Сплит-эффект с использованием фильтров изображения ядра?
Я понимаю принципы эффекта разделения тона и хотел бы использовать либо цветовую карту, либо тональные кривые для отдельных каналов rgb. К сожалению, это не вариант для iOS на данный момент, поскольку SDK не включает эти фильтры.
Единственный хак, который я придумал (кроме выполнения рендеринга через opengl), дублирует изображение, корректируя оттенок в бликах в одном, тени в другом и объединяя их. Однако я бы предпочел более простой способ, который не требует двухцелевой составной операции.
Возможно ли такое действие с цепочкой любого из доступных в настоящее время фильтров изображения ядра в iOS 5?
Ответы
Ответ 1
Я немного читал о том, как это сделать в Photoshop, и это в основном увеличивает контраст в красных и зеленых каналах и уменьшает его в синих каналах. (По крайней мере, для базового эффекта - если вы действительно делаете это с фильмом, вы можете получить некоторые действительно странные изменения цвета тоже!)
Вы можете выполнить настройку контраста с помощью серии узлов CIColorMatrix. Контраст в основном ((значение - 0,5) * контраст) + 0,5. Таким образом, цветовая матрица, скажем, контраста 1,5 в красном и зеленом цвете и 0,66 в синем, будет что-то вроде
| 1 0 0 -0.5 | | 1.5 0.0 0 0 | | 1 0 0 0.5 |
| 0 1 0 -0.5 | + | 0 1.5 0 0 | + | 0 1 0 0.5 |
| 0 0 1 -0.5 | | 0 0.0 0.66 0 | | 0 0 1 0.5 |
| 0 0 0 1.0 | | 0 0.0 0.0 1.0| | 0 0 0 1.0 |
CIColorCube может воспроизводить более сложные преобразования, но формат его данных сложный. Вам нужно создать таблицу 3D-поиска.
CIToneCurve может это сделать, если вы сделали 3 отдельных прохода (или, может быть, только 2 - один для красного и зеленого, а второй для синего), а затем объединили результаты. Вы установили бы 2-ю позицию ниже 0,25, а 4-е место выше 0,75 в красном и зеленом, а в синем - наоборот.
Ответ 2
Я получил очень похожий эффект, сначала применив CIFalseImage.
Выберите свой темный и светлый цвет (синий, красный или оранжевый).
Когда вы создаете CIColor для двух цветов, установите альфа для .5.
Затем используйте CIScreenBlendMode и смешайте это отфильтрованное изображение с оригиналом.
Он будет выглядеть как разделенный тон.
Это хороший способ быстро изменить тени и блики.
CIFilter *lightDark = [CIFilter filterWithName:@"CIFalseColor"
keysAndValues: @"inputImage", helper.ciImage, nil];
[lightDark setDefaults];
CIColor *myBlue = [CIColor colorWithRed:0.0 green:0.0 blue:0.6 alpha:0.5];
CIColor *myRed = [CIColor colorWithRed:1.0 green:0.8 blue:0.0 alpha:0.5];
[lightDark setValue:myBlue forKey:@"inputColor0"];
[lightDark setValue:myRed forKey:@"inputColor1"];
CIImage *mappedImage = [lightDark valueForKey:kCIOutputImageKey];
CIFilter *screenBlend = [CIFilter filterWithName:@"CIScreenBlendMode" keysAndValues: @"inputImage", mappedImage, @"inputBackgroundImage", helper.ciImage, nil];
CIImage *finalImage = [screenBlend valueForKey:kCIOutputImageKey];
if (finalImage) imageView.image = [UIImage imageWithCIImage:finalImage orientation:orientation];
else NSLog(@"Missing our image");