格式化CoreImage CIColorCube的数据

时间:2012-06-22 13:43:27

标签: iphone core-image

我正在尝试将任意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
};

2 个答案:

答案 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的幂。