Я строю своеобразное цензурное приложение. Я до сих пор понял, что могу добавить пиксель изображения, снятого с моим iPhone.рисунок изображения из CALayers
Но я хочу достичь в конце изображения, как это: http://images-mediawiki-sites.thefullwiki.org/11/4/8/8/8328511755287292.jpg
Так что моя мысль была полностью Пикселизация моего изображения, а затем добавьте маску поверх него, чтобы достичь желаемого эффекта. Таким образом, с точки зрения слоев это выглядит так: originalImage + maskedPixelatedVersionOfImage .. Я подумывал о анимации маски при касании изображения, масштабирования маски до нужного размера. Чем дольше вы держите палец на изображении, тем больше становится маска ...
После некоторого поиска, я думаю, это можно сделать с помощью CALayers и CAAnimation. Но как мне затем объединить эти слои с изображением, которое я могу сохранить в фотоальбоме на iphone?
Я правильно подхожу сюда?
EDIT:
Хорошо, я предполагаю, что решение Оле является правильным, хотя я до сих пор не получить то, что я хочу: код, который я использую:
CALayer *maskLayer = [CALayer layer];
CALayer *mosaicLayer = [CALayer layer];
// Mask image ends with 0.15 opacity on both sides. Set the background color of the layer
// to the same value so the layer can extend the mask image.
mosaicLayer.contents = (id)[img CGImage];
mosaicLayer.frame = CGRectMake(0,0, img.size.width, img.size.height);
UIImage *maskImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"mask" ofType:@"png"]];
maskLayer.contents = (id)[maskImg CGImage];
maskLayer.frame = CGRectMake(100,150, maskImg.size.width, maskImg.size.height);
mosaicLayer.mask = maskLayer;
[imageView.layer addSublayer:mosaicLayer];
UIGraphicsBeginImageContext(imageView.layer.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *saver = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Так что в моем ImageView я сделал: setImage, у которого есть оригинальная (неотредактированная) версия фотографии. Кроме того, я добавляю подуровень, mosaicLayer, который имеет свойство mask: maskLayer. Я подумал, создав корнеукладчик imageView, все получится нормально. Это неправильно?
Кроме того, я понял что-то еще: моя маска растянута и повернута, что, я думаю, имеет какое-то отношение к imageOrientation? Я заметил, что случайно сохранил mosaicLayer в своей библиотеке, что также объясняет проблему, с которой у меня была маска, которая маскировала неправильную часть моего изображения ...
ОК спасибо, я попробую это. Как вы думаете, у меня есть правильный подход к остальным? – ThomasM
Возможно, стоит отметить, что этот подход помешает вам сделать рендеринг на фоновом потоке. Если вам нужна безопасность потоков, избегайте 'UI' -функций и создайте свой собственный' CGBitmapContext': http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html –
Это также может не удастся захватить изображение с AVCaptureVideoPreviewLayer, если он использовал это для представления кадров в реальном времени. –