2016-07-12 3 views
1

だから、私は上の色を反転させる必要があることは、グレー色空間NSImageでは - > CIImage色を反転させる - BitmapImageRep/W> NSImageでは、色空間の問題

NSBitmapImageRepで表されるNSImage *startingImage
を持っています私はこの時点でoutputImageを表示すると、それは、私がCIImage

CIImage *startingCIImage = [[CIImage alloc] initWithBitmapImageRep:(NSBitmapImageRep*)[startingImage representations][0]]; 
    CIFilter *invertColorFilter = [CIFilter filterWithName:NEVER_TRANSLATE(@"CIColorInvert")]; 
    [invertColorFilter setValue:startingCIImage forKey:NEVER_TRANSLATE(@"inputImage")]; 
    CIImage *outputImage = [invertColorFilter valueForKey:NEVER_TRANSLATE(@"outputImage")]; 

に変換し、それは私が反転色を除いて、同じ画像を期待して正確に何です。

私はそのようにようにバックNSImageに変換:

NSBitmapImageRep *finalImageRep = [[NSBitmapImageRep alloc] initWithCIImage:outputImage]; 
    NSImage *finalImage = [[NSImage alloc] initWithSize:[finalImageRep size]]; 
    [finalImage finalImageRep]; 

ここに私の問題です...私の元NSImageはグレーの色空間を持っており、ピクセルあたり8ビット。

しかし、私はすべてを変換し、画像をログアウトした後、これは私が

<NSImage 0x61800127e540 Size={500, 440} Reps=(
    "NSBitmapImageRep 0x6080000b8cc0 Size={500, 440} ColorSpace=ASUS PB278 colorspace BPS=8 BPP=32 Pixels=500x440 Alpha=YES Planar=NO 
Format=0 CurrentBacking=<CGImageRef: 0x6180001a3f00>")> 

そして、あなたが知っているかもしれないとして持っているもので、NSBitmapImageRepが不変であることを意味する

<NSImage 0x610000071440 Size={500, 440} Reps=(
    "NSBitmapImageRep 0x6100002a1800 Size={500, 440} ColorSpace=Device Gray colorspace BPS=8 BPP=8 Pixels=500x440 Alpha=NO Planar=NO Format=0 
CurrentBacking=<CGImageRef: 0x6100001ab0c0>")> 

、と私はsetColorSpaceNameを試してみてくださいまたはsetAlphaの場合、画像はブラックボックスにすぎません。

NSImageCIImageに変換して白黒を反転してからNSImageに変換することができますか?

+0

'NSBitmapImageRep'の' initWithCIImage'は、現在のグラフィックスコンテキストを使用して画像をレンダリングします。 – Willeke

+0

CGContextRef?塗りつぶしやストロークの色空間しか設定できません。設定しようとすると、NSImageでは何も変わりません –

+0

私は画像のエキスパートではありません。 'initWithCIImage'のドキュメントを読むことをお勧めします。 – Willeke

答えて

0

たぶん、あなたが最後にカラースペースを置き換えることができます:

NSBitmapImageRep* fixedRep = [finalImageRep bitmapImageRepByConvertingToColorSpace: [startingImageRep colorSpace] 
    renderingIntent: NSColorRenderingIntentDefault];