iOS - 在图像上绘画 - 应用蒙版

时间:2015-08-14 12:20:59

标签: ios swift mask core-image

我有一个用户可以在上面绘画的图像。对于绘画我用的是:

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    if (touches.count == 1) {
        let touch = touches.first as! UITouch
        if (touch.tapCount == 1) {
            let touch = touches.first as! UITouch
            let currentPoint = touch.locationInView(self)
            UIGraphicsBeginImageContextWithOptions(self.frame.size, false, self.scale)
            self.image?.drawInRect(CGRectMake(0, 0, self.frame.size.width, self.frame.size.height))
            CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound)
            CGContextSetLineWidth(UIGraphicsGetCurrentContext(), self.width);
            CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), UIColor.whiteColor().colorWithAlphaComponent(1.0).CGColor);
            CGContextBeginPath(UIGraphicsGetCurrentContext());

            CGContextMoveToPoint(UIGraphicsGetCurrentContext(), startPoint.x, startPoint.y);
            CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y)

            CGContextStrokePath(UIGraphicsGetCurrentContext());
            self.image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
        }
    }
}

因此结果是原始图像上的白线。

然后在下一个屏幕中我想要显示画线但是透明色,这样才能显示原始图像。我试图应用蒙版,但白线并不完全透明。

func mergeImages(image: UIImage) {
    let maskImage = UIImage(named: "03-tobacco.png")
    let maskRef = maskImage?.CGImage;

    let mask = CGImageMaskCreate(
        CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef),
        nil,
        false)
    let masked = CGImageCreateWithMask(image.CGImage, mask)
    let maskedImage = UIImage(CGImage: masked)!
    self.signatureImage.image = maskedImage
}

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

而不是应用蒙版,这就是我解决它的方法:

UIGraphicsBeginImageContextWithOptions(size, false, 0.0)

let areaSize = CGRect(x: 0, y: 0, width: size.width, height: size.height)
image.drawInRect(areaSize
    maskImage!.drawInRect(areaSize, blendMode: kCGBlendModeSourceIn, alpha: 1.0)        
var newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()

我首先画线,然后我应用&#34;背景&#34;图像使用混合模式 kCGBlendModeSourceIn ,因此它仅绘制该线条。

希望它能帮助别人!

答案 1 :(得分:0)

你不是用白线作为面具,而是使用03-tobacco.png

如果你想要遮挡白线,你需要更改maskImage和self.image

答案 2 :(得分:0)

为避免带来不便,请尝试在UIImageView上方设置UIView的子类。 将其设置为背景色以清除。 然后在UIView的子类中浏览-就是这样。