【问题标题】:Masking UIImage in ios在ios中屏蔽UIImage
【发布时间】:2013-10-22 21:01:44
【问题描述】:

我正在尝试使用 ios 中的蒙版创建具有自定义形状图案的个人资料图片图像。这是我用来创建蒙版图像的内容:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage;

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
    UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];

    CGImageRelease(mask);
    CGImageRelease(maskedImageRef);

    // returns new image with mask applied
    return maskedImage;
}

实现实例后,我调用:*(_profileImage is global UIImage)

UIImage *maskImage = [UIImage imageNamed:@"maskProfilePicture.png"];

UIImage *maskedImage = [self maskImage:_profileImage withMask:maskImage];

和结果(应该在蒙版的子视图中添加图像。但似乎蒙版图像与需要蒙版的图像重叠):

蒙版图像:(可能是我在 Photoshop 中创建的蒙版图像属性错误:)

【问题讨论】:

  • Core Graphics 调用看起来正确。您可以发布您正在使用的蒙版图像吗?根据文档,它必须在 DeviceGray 颜色空间中,并且不能有 alpha 分量。
  • 我添加了蒙版图像但它是白色的,这就是为什么它似乎什么都没有:)))
  • 天真的评论:面具不应该是黑色的吗?
  • @GabrielePetronella 一点也不天真。 :-)
  • 谁能解释一下,为什么会出现这些边框? :( - prntscr.com/1z5nxw

标签: ios objective-c uiimage


【解决方案1】:

Core Graphics 调用看起来正确。

将蒙版图像更改为在您希望图像显示的位置为黑色,在其他位置为白色。

【讨论】:

  • 感谢您的帮助,除了为蒙版图像提供白色边框外,它工作正常:/
  • @JasonHarwig,我怎样才能将遮罩添加到将被旋转的UIView,但是让这个遮罩绑定到UIView 的底部并且不会随 UIView 一起旋转?我问了这个问题,但没有人回答,也许你知道答案?谢谢。
  • 关于反向遮罩的任何想法。(与上述过程相反)。意味着我想删除填充区域(使其透明)和填充透明区域。
  • @Milanpatel,反转蒙版图像的颜色。 convert mask.png -negate inverted.png
  • @JasonHarwig,请参阅我关于堆栈溢出的问题。 ..stackoverflow.com/questions/28122370/…
【解决方案2】:

您可以使用 CALayer 的 mask 属性来达到效果。

CALayer Apple Documentation

您的遮罩层在您要剪切图像的地方应该是透明的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2012-05-28
    • 2017-05-09
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多