我有一个使用Metal编写的自定义CIKernel,我发现一个奇怪的问题,着色器返回了固定的颜色,但屏幕显示的颜色却不同!我使用断点检查生成的CIImage对象,发现颜色确实不同。
以下是我的代码:
float4 test(sample_t s) {
return float4(16 / 255.0, 16 / 255.0, 16 / 255.0, 1);
}
并且这导致了断点。
我希望得到一个(16,16,16)的颜色,但是它却产生了一个(62,62,62)的颜色。
我尝试了很多次,得到了这张图表(x轴是输入值(shader返回),y轴是结果)
看起来像是进行了伽玛校正?如何解决?有人能帮忙吗?
CIContext
的渲染API都有一个colorSpace
参数。尝试在那里传递一个线性色彩空间。 - undefinedworkingColorSpace
设置为NSNull()
,在内核中我们会得到伽马校正的值还是线性值? - undefinedworkingColorSpace
设置为NSNull()
时,Core Image不会进行任何颜色转换。 - undefined