IOS使用drawrect在图像上创建蒙版

Posted

技术标签:

【中文标题】IOS使用drawrect在图像上创建蒙版【英文标题】:IOS Create Mask on an image using drawrect 【发布时间】:2014-09-08 02:48:48 【问题描述】:

我创建了一个绘制折线图的函数,如何将折线图用作蒙版并将其放在图像之上?图像在不同的高度上有不同的颜色,所以我想做的是用折线图遮罩后,折线图会在不同的层次上显示不同的颜色。非常感谢您帮助我:)

- (void)drawLineGraphWithContext:(CGContextRef)ctx

    CGContextSetLineWidth(ctx, 2.0);
    CGContextSetStrokeColorWithColor(ctx, [[UIColor colorWithRed:1.0 green:0.5 blue:0 alpha:1.0] CGColor]);

    int maxGraphHeight = kGraphHeight - kOffsetY;

    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, kOffsetX, kGraphHeight - maxGraphHeight * data[0]);

    for (int i = 1; i < sizeof(data); i++)
    
        CGContextAddLineToPoint(ctx, kOffsetX + i * kStepX, kGraphHeight - maxGraphHeight * data[i]);
    

    CGContextDrawPath(ctx, kCGPathStroke);

    CGContextSetFillColorWithColor(ctx, [[UIColor colorWithRed:1.0 green:0.5 blue:0 alpha:1.0] CGColor]);

    for (int i = 0; i < sizeof(data) - 1; i++)
    
        float x = kOffsetX + i * kStepX;
        float y = kGraphHeight - maxGraphHeight * data[i];
        CGRect rect = CGRectMake(x - kCircleRadius, y - kCircleRadius, 2 * kCircleRadius, 2 * kCircleRadius);
        CGContextAddEllipseInRect(ctx, rect);
    
    CGContextDrawPath(ctx, kCGPathFillStroke);


CGPathRef myPath = CGContextCopyPath(ctx);

CAShapeLayer *shapeLayer =  [[CAShapeLayer alloc] init];
CGPathRef myPath = CGContextCopyPath(ctx);

shapeLayer.path = myPath;


_imageView.layer.mask = shapeLayer;




【问题讨论】:

你没有alloc init你的CAShapeLayer 正如 Szlosek 所说。你需要初始化 CAShapeLayer 已经修改了代码,但是什么也没发生...... 【参考方案1】:

试着这样做。

 1. Put the Image into an ImageView.
 2. Since you already have the Path. And rite now, you will get the last
    point as `path.currentPoint`. Add a Line to the `bottomRight` then
    to `bottomLeft` and then to the `startingPoint` of the Path. You
    will need to store the FirstPoint of the Path Somewhere for this.
    Also, all the Path drawing should be in reference to the `bounds` of
    the ImageView.
 3. Create a CAShapeLayer with the path above. `shapeLayer.path = path`.
 4. Set it as mask of the imageView -- imageView.mask = shapeLayer`.

试试这个方法。干杯,玩得开心。

【讨论】:

非常感谢。我已经完成了前 3 点。但在第 4 点,在 UIIMageView 类型的对象上找不到错误属性掩码 既然您已经创建了正确的路径,那么只需将其设置为 imageView 的掩码 已编辑代码,但无法正常工作...在函数底部添加了几行,我做错了吗?

以上是关于IOS使用drawrect在图像上创建蒙版的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 在图像上创建矩形区域蒙版

ios如何在drawrect方法中在图像上画一条线

如何在 VC.m 尝试加载之前保存使用 drawRect 绘制的图像?

如何在处理中加载的 png 图像上创建颜色剪贴蒙版?

使用 Emgu CV C# 创建轮廓蒙版以仅在原始图像上显示 ROI

如何将蒙版应用于保存图像(swift3)