2016-07-18 5 views
0

非常に奇妙な行動によって相殺され、それの全ての画素がありますが、私は私が持っている私は デコード配列とCGImageを作成する場合、出力は少量

を考える行くことができる限り、問題を絞り込んています NSImageinputImageとしましょう。その場合は、 CGColorSpaceCreateDeviceGrayNSBitmapImageRepで表されます。

反転色でCGImageRefを作成します。私はtestImageを見たとき

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); 

問題は、すべてのピクセルは少し元の画像から右側にオフセットされています。

inputImage
enter image description here

testImage
enter image description here

それはあなたが絵をオフに保存するかどうかを確認するためにはるかに簡単ですが、あなたはtestImageですべてが程度によって右にオフセットされていることに気づくでしょう5ピクセル程度です。黒のコンテンツの左側に白い隙間が表示されますtestImage

私の5行のコードのどこかで、どういうわけか自分のイメージを移動しています。誰にどのように起こっている可能性がありますか?現在疑われているTIFFRepresentation

答えて

2

CGImageMaskCreate()に渡すデータプロバイダは、画像ファイル形式ではなく、他のパラメータで指定された形式の生のピクセルであると考えられます。 TIFFデータを渡すべきではありません。率直に言えば、騒音やゴミではなく、元の画像に遠隔的に類似したものがあることに驚いています。私は、TIFFデータが圧倒的なチャンスで圧縮されていなかったと推測しています。実際には、マスクの左上にあるピクセルとして解釈されるTIFFヘッダーであるノイズのビットが表示されます。

おそらく、あなたの最善の策は、(NSImageをスキップしてCGImageSource APIまたはCGImageCreateWith{JPEG,PNG}DataProvider()を使用してファイルから直接CGImageを作成したり、inputImageが作成された方法に応じて)あなたのinputImageからCGImageを作成することです。 NSImageからCGImageを取得するには、-CGImageForProposedRect:context:hints:を使用します。

そして、各種CGImageGet...関数を用いて第1 CGImageから照会種々の特性(幅、高さ、BPP、等)を用いて、そのCGImageからデータプロバイダを取得し、それから、マスクCGImageを作成します。

+0

ありがとうございました! –

関連する問題