Форматирование данных для CoreImage CIColorCube

Я пытаюсь применить произвольные 3D Luts к изображениям на iOS, но я застрял.

Я не могу понять, как правильно форматировать данные куба для CIColorCube.

Я сделал все, что мог, основываясь на кратких снимках экрана, которые я сделал из видеороликов WWDC, но что мне действительно нужно, так это какой-то рабочий шаблон, на который можно было бы опереться. Существуют ли какие-либо документы с примером жестко закодированного куба, а не процедурно сгенерированного ICC, показанного в примере кода ImageApp?

Сейчас данные моего куба выглядят так, как вы видите ниже (для краткости середина вырезана). Выдает ошибку:

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

person user1474971    schedule 22.06.2012    source источник
comment
Этот color_cube_data работал? Если да, не могли бы вы поделиться полной таблицей поиска?   -  person SushiGrass Jacob    schedule 27.06.2012


Ответы (2)


Я не могу помочь со всеми вашими проблемами без дополнительной информации, но я думаю, что ваша текущая ошибка может быть вызвана этим. Убедитесь, что строка кода, устанавливающая данные вашего куба, выглядит так...

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

не это...

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

person David Chu    schedule 26.06.2012

3D LUT должен быть заключен в NSData перед передачей в качестве аргумента CIFilter. Значения куба находятся в диапазоне [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 строго равно степени двойки.

person Dmitry Lavrov    schedule 30.06.2012
comment
Если вы получаете странные цвета из вашего CIColorCube, вполне может быть, что ваш размер не является степенью двойки. Мои выходили со всеми их синими компонентами, установленными на ноль. - person bitmusher; 09.12.2012