0

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

2 回答 2

2

如果没有更多信息,我无法帮助您解决所有问题,但我认为您当前的错误可能是由此造成的。确保设置多维数据集数据的代码行如下所示...

[_colorCube setValue:color_cube_data forKey:@" inputCubeData "];

不是这个...

[_colorCube setValue:color_cube_data forKey:@" inputCubedata "];

于 2012-06-26T08:08:20.373 回答
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 的值是严格的二的幂。

于 2012-06-30T10:57:14.833 回答