首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImage边界掩码

UIImage边界掩码
EN

Stack Overflow用户
提问于 2014-03-18 07:17:16
回答 2查看 2.3K关注 0票数 2

我现在是这个代码,用来在我的图像上创建一个掩码。

代码语言:javascript
复制
- (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask
{
    CGImageRef imageReference = image.CGImage;
    CGImageRef maskReference = mask.CGImage;

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
                                             CGImageGetHeight(maskReference),
                                             CGImageGetBitsPerComponent(maskReference),
                                             CGImageGetBitsPerPixel(maskReference),
                                             CGImageGetBytesPerRow(maskReference),
                                             CGImageGetDataProvider(maskReference),
                                             NULL, // Decode is null
                                             YES // Should interpolate
                                             );

    CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
    CGImageRelease(imageMask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
    CGImageRelease(maskedReference);

    return maskedImage;
}

现在,我想在蒙面输出(如源url)周围添加一个两点边框。知道我怎么能做到这一点吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-18 08:52:52

请参考下面的链接,我也想实现同样的。

边界在图像形状中的应用

请查找以下代码:

代码语言:javascript
复制
- (UIImage*)mergeImage:(UIImage*)first withImage:(UIImage*)second
{
    // get size of the second image
    CGImageRef secondImageRef = second.CGImage;
    CGFloat secondWidth = CGImageGetWidth(secondImageRef);
    CGFloat secondHeight = CGImageGetHeight(secondImageRef);

    float offsetwt,offsetht,offset;

    offset=20;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        offset=offset/2;
    }
    offsetht=(secondHeight   * (secondWidth+offset)) /secondWidth;
    offsetwt=secondWidth+offset;

    // build merged size
    CGSize mergedSize = CGSizeMake(offsetwt,offsetht);

    // capture image context ref
    UIGraphicsBeginImageContext(mergedSize);

    //Draw images onto the context
    [first drawInRect:CGRectMake(0, 0, offsetwt, offsetht)];
    [second drawInRect:CGRectMake(offset/2, offset/2, secondWidth, secondHeight) blendMode:kCGBlendModeNormal alpha:1.0];

    // assign context to new UIImage
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    // end context
    UIGraphicsEndImageContext();

    return  newImage;
}

第一个参数,用于掩蔽的图像,第二个参数是蒙面图像。您可以根据您的要求设置偏移量。希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2014-03-18 07:46:28

至少有两种选择:

  1. 有三个图像,将显示在内部的图像,将用于掩蔽第一个图像的图像,然后是边界的第三个图像(后一个图像将具有一个透明的中心)。然后,您可以用第二个掩蔽第一个图像,然后在蒙面图像的顶部仅用边框覆盖图像。 但是,以编程方式生成不规则形状图像的边界并不容易。使用图形编辑器工具(如PhotoShop或其他工具)创建将用于边框的图像可能更容易。
  2. 与其用图像掩蔽,您通常可以为掩码创建一个UIBezierPath,然后从该路径创建两个CAShapeLayer对象,一个用于隐藏图像视图,另一个用于添加边框: 路径*path = UIBezierPath bezierPath;路径radius:self.view.bounds.size.width / 2.0,self.view.bounds.size.height / 2.0) radius:self.view.bounds.size.width* 0.4开始角:0 endAngle:M_PI * 2.0顺时针方向:是;CAShapeLayer *掩蔽层= CAShapeLayer层;mask.path = path.CGPath;mask.fillColor = [UIColor blackColor CGColor];self.imageView.layer.mask =掩码;CAShapeLayer *En19#;border.strokeColor = [UIColor blueColor CGColor];border.fillColor = [UIColor clearColor CGColor];border.lineWidth = 10.0;self.imageView.layer addSublayer:边界 这是一个例子,其中的路径是一个简单的圆圈,但你可以创建一个心形的路径或任何东西。Bezier路径需要一段时间才能适应,但是它们对于绘制光滑的曲线非常有效。

底线,如果边框有一些规则的形状,我可以用bezier曲线生成,我更喜欢第二种方法。如果边框是在我的图像编辑工具中手动绘制的,那么我将使用第一种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22472651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档