所以我有一个NSImage *startingImage
它由带有灰色空间的NSBitmapImageRep
表示
我需要反转其上的颜色,因此我将其转换为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")];
如果我此时查看outputImage
,这正是我所期望的,相同的图像除了反色。
NSImage
,如此:
NSBitmapImageRep *finalImageRep = [[NSBitmapImageRep alloc] initWithCIImage:outputImage];
NSImage *finalImage = [[NSImage alloc] initWithSize:[finalImageRep size]];
[finalImage finalImageRep];
这是我的问题......我的原始NSImage
有一个灰色空间,每像素8位。
<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>" )>
然而,在我转换所有内容并注销图像之后,这就是我所拥有的
<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
意味着不可变,当我尝试setColorSpaceName
或setAlpha
时,图片最终只是一个黑盒子。
我是否遗漏了某些内容,以便将NSImage
转换为CIImage
,将黑色和白色反转,然后转换回NSImage
?
答案 0 :(得分:0)
也许你可以在最后替换色彩空间:
NSBitmapImageRep* fixedRep = [finalImageRep bitmapImageRepByConvertingToColorSpace: [startingImageRep colorSpace]
renderingIntent: NSColorRenderingIntentDefault];