RGBStroke - пиксели изображения вместо цвета (iOS)
Я реализую в iOS функцию маски изображений, аналогичную той, которая предлагается в приложении Blender с двумя изображениями. Вот мой код перемещения касания:-
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:staticBG1];
UIGraphicsBeginImageContext(view.frame.size);
[image_1 drawInRect:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 20.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
image_1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
mouseMoved++;
if (mouseMoved == 10)
mouseMoved = 0;
}
Теперь то, что я действительно хочу, это не ярко-красная линия, а пиксели от другого изображения в этих местах. Оба изображения имеют одинаковые размеры. Как мне это сделать?? Я пытался реализовать свой метод ручной обработки изображений для доступа к пикселям, но он был слишком медленным, и это будет сделано в режиме реального времени.
Есть ли альтернатива: CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);?
1 ответ
Не рисуйте цвет или рисунок на пути, нарисуйте прозрачность. Вам нужно одно изображение в своем собственном слое за стираемым изображением. Создайте путь, как вы сейчас, но вместо того, чтобы установить цвет, установите режим наложения, чтобы очистить (kCGBlendModeClear
).
Это удалит части изображения, чтобы вы могли видеть изображение ниже.
Заменить:
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
с:
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);