NSImage w/ BitmapImageRep -> CIImage для инвертирования цвета -> NSImage w/ BitmapImageRep, проблемы с цветовым пространством
Итак, у меня есть 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
?
1 ответ
Может быть, вы могли бы заменить цветовое пространство в конце:
NSBitmapImageRep* fixedRep = [finalImageRep bitmapImageRepByConvertingToColorSpace: [startingImageRep colorSpace]
renderingIntent: NSColorRenderingIntentDefault];