2016-07-18 16 views
0

매우 이상한 행동에 의해 상쇄 그것의 모든 픽셀을 가지고,하지만 난 내가이 나는 디코드 배열과의 CGImage를 만들 때, 출력은 소량

생각 갈 수까지 문제를 좁혀 NSImage, 전화 번호는 inputImage입니다. 해당되는 경우 CGColorSpaceCreateDeviceGrayNSBitmapImageRep으로 표시되며, 내용물이

인데 반전 된 색상을 사용하여 CGImageRef을 만들고 싶습니다.

NSData *data = [inputImage TIFFRepresentation]; 
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); 

    NSBitmapImageRep *maskedRep = (NSBitmapImageRep*)[inputImage representations][0]; 
    CGFloat decode[] = {0.0, 1.0}; 

    maskRef = CGImageMaskCreate(maskedRep.pixelsWide, 
           maskedRep.pixelsHigh, 
           8, 
           maskedRep.bitsPerPixel, 
           maskedRep.bytesPerRow, 
           provider, 
           decode, 
           false); 

    NSImage *testImage = [[NSImage alloc] initWithCGImage:maskRef size:NSMakeSize(1280,1185)]; //the size of the image, hard-coded for testing 
    NSLog(@"testimage: %@", testImage); 

문제

내가 testImage 볼 때, 모든 픽셀이 약간 원본 이미지에서 오른쪽으로 오프셋입니다.

inputImage :
enter image description here

testImage :
enter image description here

그것은 당신이 사진을 저장하면 볼 훨씬 쉽게,하지만 당신은 testImage에서 그 모든 것을 알 수는 약에 의해 오른쪽으로 오프셋 5 픽셀 정도. 검은 색 콘텐츠의 왼쪽에 흰색 틈이 있습니다. testImage

내 5 줄의 코드에서 어딘지로 내 이미지를 옮깁니다. 아무도 이것이 어떻게 일어날 수 있는지 전혀 알지 못합니까? 현재 의심되고 있습니다 TIFFRepresentation

답변

2

CGImageMaskCreate()으로 전달한 데이터 제공 업체는 이미지 파일 형식이 아닌 다른 매개 변수에 지정된 형식의 원시 픽셀로 간주됩니다. TIFF 데이터를 전달하면 안됩니다. 솔직히, 당신은 소음/쓰레기가 아닌 원본 이미지와 원격으로 닮은 것을 얻었습니다. 저는 TIFF 데이터가 압축되지 않았다고 생각합니다. 실제로 마스크의 왼쪽 상단에있는 픽셀로 해석되는 TIFF 헤더 인 약간의 노이즈를 볼 수 있습니다.

아마, 가장 좋은 건에서 CGImage를 생성하는 것입니다 inputImage (또는, inputImage 만든 방법에 따라 NSImage를 건너 뛰고 CGImageSource API 또는 CGImageCreateWith{JPEG,PNG}DataProvider()을 사용하여 파일에서 직접 CGImage 생성). NSImage에서 CGImage을 얻으려면 -CGImageForProposedRect:context:hints:을 사용하십시오.

그러면, 다양한 CGImageGet... 함수를 이용하여 제 CGImage에서 쿼리 다양한 속성 (폭, 높이, BPP 등)을 사용하여, 그 CGImage에서 데이터 제공받을 수 있도록 행 마스크 CGImage를 생성한다.

+0

감사합니다. –