gpt4 book ai didi

objective-c - 将 1.8 的 Gamma 应用于 NSImage

转载 作者:行者123 更新时间:2023-12-03 17:15:57 25 4
gpt4 key购买 nike

我正在尝试将 NSImage 转换为 Gamma 值为 1.8,但运气不佳。我找到了一些代码,但没有任何效果。我有一个方法可以在 NSImage 类别上返回 NSBitmapImageRep。

首先,我尝试使用网上找到的 CGColorSpaceCreateCaliberatedRGB 函数更改颜色空间,但这没有效果:

- (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];
}

接下来我尝试在位图图像属性上设置 Gamma :

- (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;
}

这设置了属性,但对输出图像没有影响。

有办法做到这一点吗?

最佳答案

来自the docs :

The gamma value is a floating-point number between 0.0 and 1.0, with 0.0 being black and 1.0 being the maximum color.

如您所见,您的值 1.8 超出了此范围。请注意,通过将属性写入 PNG 文件,设置此属性仅设置 PNG 图像的 Gamma 值。它实际上并没有改变图像中的像素值。

如果你想这样做,你应该使用 Core Image并应用 CIGammaAdjust过滤。

关于objective-c - 将 1.8 的 Gamma 应用于 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6719927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com