2016-07-12 1 views
1

Так у меня есть 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?

+0

'NSBitmapImageRep' в' initWithCIImage' отображает изображение с использованием текущего графического контекста. – Willeke

+0

CGContextRef? Я могу установить только цветовое пространство заливки или штриха, и когда я попытаюсь установить его, ничего не меняется на NSImage –

+0

Я не эксперт по изображениям. Я предлагаю вам ознакомиться с документацией 'initWithCIImage'. – Willeke

ответ

0

Может быть, вы могли бы заменить цветовое пространство в конце:

NSBitmapImageRep* fixedRep = [finalImageRep bitmapImageRepByConvertingToColorSpace: [startingImageRep colorSpace] 
    renderingIntent: NSColorRenderingIntentDefault]; 
Смежные вопросы