首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >屏蔽UIImage

屏蔽UIImage
EN

Stack Overflow用户
提问于 2010-05-06 05:00:28
回答 4查看 11.3K关注 0票数 12

我正在开发一款可以更改边框或矩形UIImage的应用程序。边框会有所不同,但看起来就像UIImage是被剪刀剪掉的,或者类似的东西。

做这件事最好的方法是什么?

我的第一个想法是准备一堆透明的PNG与我正在寻找的正确的边框效果,然后以某种方式使用它作为我的UIImage的面具。这条路对吗?或者有一种更灵活的编程方式来做到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-14 07:35:04

以下是可用于遮罩图像的Core Graphics调用:

代码语言:javascript
复制
//Mask Image
UIImage *inputImage = [UIImage imageNamed:@"inputImage.png"];
CGImageRef maskRef = [UIImage imageNamed:@"mask.png"].CGImage; 

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

CGImageRef masked = CGImageCreateWithMask([inputImage CGImage], mask);
CGImageRelease(mask);

UIImage *maskedImage = [UIImage imageWithCGImage:masked];

CGImageRelease(masked);
票数 25
EN

Stack Overflow用户

发布于 2012-11-08 18:22:52

你需要图像掩蔽,我写了一个tutorial on how to use it,以及我如何在我自己的应用程序中使用它。

下面的示例代码应该可以帮助您入门,它需要原始图像和蒙版图像作为输入,并返回蒙版图像作为输出。

代码语言: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;
}
票数 6
EN

Stack Overflow用户

发布于 2011-01-14 07:01:59

是的,这就是你需要做的。最好的方法是使用Core Graphics;Quartz 2D编程指南有一个article describing how to mask images with other images。您可以通过UIImage对象的CGImage属性获取CGImageRef (这些核心图形方法使用),然后使用UIImage类方法+imageWithCGImage:从更改后的(屏蔽的) CGImageRef中获取一个use。

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

https://stackoverflow.com/questions/2776747

复制
相关文章

相似问题

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