Так у меня есть NSImage *startingImage
Он представлен в NSBitmapImageRep
с серой цветовомNSImage ж/BitmapImageRep -> CIImage инвертировать цвет -> NSImage ж/BitmapImageRep, цветовые вопросы
мне нужно, чтобы инвертировать цвета на это, так что я преобразовать его в 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
?
'NSBitmapImageRep' в' initWithCIImage' отображает изображение с использованием текущего графического контекста. – Willeke
CGContextRef? Я могу установить только цветовое пространство заливки или штриха, и когда я попытаюсь установить его, ничего не меняется на NSImage –
Я не эксперт по изображениям. Я предлагаю вам ознакомиться с документацией 'initWithCIImage'. – Willeke