我正在尝试将任意3D Luts应用于iOS上的图像,但我被卡住了。
我不能为我的生活弄清楚如何正确格式化CIColorCube的立方体数据。
基于我从WWDC视频中获取的简短屏幕抓取,我已经完成了所有工作,但我真正需要的是某种工作模板。 是否存在任何带有硬编码多维数据集示例的文档,而不是ImageApp示例代码中显示的程序ICC生成的文档?
现在我的立方体数据看起来就像你在下面看到的那样(中间因为简洁而被切断)。 抛出错误:
"Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CIColorCube 0xb46a850> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key inputCubedata.'"
任何帮助都会非常感激,我正在撕扯我的声音。我找不到CIColorCube期待的任何出售例子(如在一个工作示例中,而不仅仅是一个解释)。
uint8_t color_cube_data[4096*4] = {
0, 0, 0, 1,
17, 0, 0, 1,
33, 0, 0, 1,
51, 0, 0, 1,
68, 0, 0, 1,
84, 0, 0, 1,
102, 0, 0, 1,
119, 0, 0, 1,
-----etc etc etc
153, 255, 255, 1,
170, 255, 255, 1,
186, 255, 255, 1,
204, 255, 255, 1,
221, 255, 255, 1,
237, 255, 255, 1,
255, 255, 255, 1
};
答案 0 :(得分:2)
如果没有更多信息,我无法解决您的所有问题,但我认为您当前的错误可能是由此造成的。确保设置多维数据集数据的代码行如下所示...
[_ colorCube setValue:color_cube_data forKey:@“ inputCubeData ”];
不是这个......
[_ colorCube setValue:color_cube_data forKey:@“ inputCubedata ”];
答案 1 :(得分:1)
3D LUT必须在作为参数传递给CIFilter之前包装到NSData中。立方体值的范围为[0.0:1.0]
NSData * cube_data = [NSData dataWithBytes:color_cube_data length:4096*sizeof(float)*4];
[filter setValue:input_image forKey:@"inputImage"];
[filter setValue:cube_data forKey:@"inputCubeData"];
[filter setValue:[NSNumber numberWithFloat:16] forKey:@"inputCubeDimension"];
inputCubeDimension的值严格为2的幂。