RGBStroke - 图像像素而不是颜色(iOS)

时间:2013-10-07 06:35:57

标签: objective-c core-graphics image-masking

我在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;
}

The above code is generating an effect like :

现在我真正想要的是不是亮红线,而是来自其他图像的像素。两个图像具有相同的尺寸。我该怎么做?? 我试图实现我的手动图像处理方法我的像素访问,但它太慢了,这将实时完成。

有什么替代方案:     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),1.0,0.0,0.0,1.0); ?

1 个答案:

答案 0 :(得分:2)

不要在路径中绘制颜色或图案,绘制透明度。在要擦除的图像后面的图层后面需要一个图像。像现在一样创建路径,但不是设置颜色,而是将混合模式设置为clear(kCGBlendModeClear)。

这将删除图像的各个部分,以便您查看下面的图像。


替换:

CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);

使用:

CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear);