Примените гамму 1,8 к NSImage - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь преобразовать NSImage, чтобы получить гамму 1,8, и мне не очень повезло.Я нашел код, но ничего не работает.У меня есть метод, который возвращает NSBitmapImageRep для категории NSImage.

Сначала я попытался изменить цветовое пространство с помощью функции CGColorSpaceCreateCalibratedRGB, которую я нашел в сети, но это не дало эффекта:

- (NSBitmapImageRep *)OnePointEightBitmapImageRep{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateCalibratedRGB(
                                                                 (CGFloat[3]){0.9505, 1.0000, 1.0891},//white point
                                                                 (CGFloat[3]){0.0000, 0.0000, 0.0000},//black point
                                                                 (CGFloat[3]){1.8010, 1.8010, 1.8010},//gamma rgb
                                                                 (CGFloat[9]){0.4543, 0.2426, 0.0148, 0.3533, 0.6744, 0.0904, 0.1566, 0.0834, 0.7195} //rgb tristimulus
                                                                 );

    CGImageRef imageRef = CGImageCreateCopyWithColorSpace([self CGImage], colorSpace);
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:imageRef];

    CGColorSpaceRelease(colorSpace);
    CGImageRelease(imageRef);

    return bitmap;
}

- (CGImageRef)CGImage{
    return [self CGImageForProposedRect:nil context:nil hints:nil];
}

Затем я попытался установить гамму для свойств растрового изображения:

- (NSBitmapImageRep *)OnePointEightBitmapImageRep{
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:[self CGImage]];
    NSLog(@"gamma: %@", [bitmap valueForProperty:NSImageGamma]);

    [bitmap setProperty:NSImageGamma withValue:[NSNumber numberWithDouble:1.8f]];
    NSLog(@"gamma: %@", [bitmap valueForProperty:NSImageGamma]);

    return bitmap;
}

Это свойство было установлено, но не оказало влияния на выходное изображение.

Есть ли способ сделать это?

1 Ответ

1 голос
/ 17 июля 2011

С документы :

Значение гаммы представляет собой число с плавающей запятой в диапазоне от 0,0 до 1,0, с 0.0 - черный, а 1.0 - максимальный.

Как видите, ваше значение 1,8 находится за пределами этого диапазона. Обратите внимание, что установка этого свойства устанавливает гамму только для изображений PNG, записывая свойство в файл PNG. На самом деле это не меняет значения пикселей в изображении.

Если вы хотите сделать это, вы должны использовать Core Image и применить фильтр CIGammaAdjust.

...