3

Im은 특정 색상 사각형을 CGBitmapContext에 그리고 나중에 픽셀 값을 i 드로우 (일종의 히트 테스트) 색상과 비교하려고합니다.CGBitmapContext는 픽셀 값을 얻습니다. Leopard와 SnowLeopard의 혼동

Leopard에서는 잘 작동하지만 SnowLeopard에서 나가는 픽셀 값은 내가 그린 색상 값과 다릅니다. 내 생각에 색 공간 혼란과 내 부분의 무지로 인한 것 같습니다. 내가 가지고

기본 단계는 다음과 같습니다 -

  1. 설정 같은 kCGColorSpaceGenericRGB 색 공간
  2. 컨텍스트의 채우기 색
  3. 무승부를 문맥의 fillColorSpace을 설정 kCGColorSpaceGenericRGB 색 공간과 비트 맵 컨텍스트를 생성
  4. bitmapContextData를 가져 와서 픽셀 값을 반복하십시오.
일례로서

, 표범에 난한다면 -

CGContextSetRGBFillColor(cntxt, 1.0, 0.0, 0.0, 1.0); // set pure red fill colour 
CGContextFillRect(cntxt, cntxtBounds); // fill entire context 

각 픽셀 값 UINT8 적색 == 255 녹색 == 0, 푸른 == 0, α- == 255

을 갖는다 그러나 Snow Lepard에서 각 픽셀의 값은 UInt8 빨강 == 243, 녹색 == 31, 파랑 == 6, 알파 == 255 입니다.이 값들은 현재 스노우 레오파드가 아닙니다. 그것들은 대체로 내가 전형적으로 보았던 것입니다 - 여전히 확실히 'Red'이지만 (1.0,0,0)과 관련이 있습니다. (1.0,1.0,1.0)을 제외한 다른 색상들도 정확하게 (255,255,255)이고 (0,0,0)은 정확히 (0,0,0)이됩니다..

다른 colorSpaces를 시도했지만 비슷한 결과가 발생합니다. 어떤 도움이나 조언을 주셔서 감사합니다.

UPDATE 내가

//create 
NSUInteger arbitraryPixSize = 10; 
size_t components = 4; 
size_t bitsPerComponent = 8; 
size_t bytesPerRow = (arbitraryPixSize * bitsPerComponent * components + 7)/8; 
size_t dataLength = bytesPerRow * arbitraryPixSize; 
UInt32 *bitmap = malloc(dataLength); 
memset(bitmap, 0, dataLength); 

CGColorSpaceRef colSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 

CGContextRef context = CGBitmapContextCreate (          bitmap, arbitraryPixSize, arbitraryPixSize,             bitsPerComponent,bytesPerRow,           colSpace, kCGImageAlphaPremultipliedFirst); 

CGContextSetFillColorSpace(context, colSpace); 
CGContextSetStrokeColorSpace(context, colSpace); 

// -- draw something 
CGContextSetRGBFillColor(context, 1.0f, 0.0f, 0.0f, 1.0f); 
CGContextFillRect(context, CGRectMake(0, 0, arbitraryPixSize, arbitraryPixSize)); 

// test the first pixel 
UInt8 *baseAddr = (UInt8 *)CGBitmapContextGetData(context); 
UInt8 alpha = baseAddr[0]; 
UInt8 red = baseAddr[1]; 
UInt8 green = baseAddr[2]; 
UInt8 blue = baseAddr[3]; 

CGContextRelease(context); 
CGColorSpaceRelease(colSpace); 

레오파드 결과 ..이 내가 약에있어 무엇을 보여줍니다 생각 -> 빨간색 == 255, 녹색 == 0, 파란색 == 0, 알파 == 255

눈 표범은 -> 빨간색 == 228, 녹색 == 29, 파란색 == 29, 알파 == 255

+0

이 질문에 전체적으로 컴파일되고 검증 가능한 코드를 추가하십시오. 문제가있는 부분은 여기에서 다루지 않을 것입니다. – Ken

+0

확인을 위해 추출하는 데 약간의 시간이 걸릴 수 있습니다. 잠시 후에 다시 확인해 주시면 감사하겠습니다. –

답변

3

는 대한 문서를 살펴 보자 CGContextSetRGBFillColor.

CGContextSetRGBFillColor는 DeviceRGB 칼라 스페이스의 값으로 현재 채우기 색을 설정합니다.

구성 요소가 일반 RGB 공간과 관련되어 있어야합니다. 따라서 채우기 색상을 설정하는 다른 방법 중 하나를 사용하십시오.

+1

고마워요. 그래서 제가 사용했던 레코드 일뿐입니다. \t CGColorRef redCol = CGColorCreateGenericRGB (1.0f, 0.0f, 0.0f, 1.0f); \t CGContextSetFillColorWithColor (context, redCol); –

+0

jib :'CFRelease' 또는'CGColorRelease'로'redCol'을 릴리즈하는 것을 잊지 마십시오. –

관련 문제