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];
Другие вопросы по тегам