Im은 특정 색상 사각형을 CGBitmapContext에 그리고 나중에 픽셀 값을 i 드로우 (일종의 히트 테스트) 색상과 비교하려고합니다.CGBitmapContext는 픽셀 값을 얻습니다. Leopard와 SnowLeopard의 혼동
Leopard에서는 잘 작동하지만 SnowLeopard에서 나가는 픽셀 값은 내가 그린 색상 값과 다릅니다. 내 생각에 색 공간 혼란과 내 부분의 무지로 인한 것 같습니다. 내가 가지고
기본 단계는 다음과 같습니다 -
- 는
- 설정 같은 kCGColorSpaceGenericRGB 색 공간
- 컨텍스트의 채우기 색
- 무승부를 문맥의 fillColorSpace을 설정 kCGColorSpaceGenericRGB 색 공간과 비트 맵 컨텍스트를 생성
- 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
이 질문에 전체적으로 컴파일되고 검증 가능한 코드를 추가하십시오. 문제가있는 부분은 여기에서 다루지 않을 것입니다. – Ken
확인을 위해 추출하는 데 약간의 시간이 걸릴 수 있습니다. 잠시 후에 다시 확인해 주시면 감사하겠습니다. –