我工作的一个应用程序,可以改变边界或矩形的UIImage。边界会有所不同,但看起来UIImage会被剪刀剪掉,或者会影响到它。掩盖一个UIImage
这样做的最好方法是什么?
我首先想到的是预习一堆透明的PNG图像与正确的边框效果我正在寻找,然后以某种方式使用它作为我的UIImage口罩。这是正确的道路吗?还是有更灵活的编程方式来做到这一点?
我工作的一个应用程序,可以改变边界或矩形的UIImage。边界会有所不同,但看起来UIImage会被剪刀剪掉,或者会影响到它。掩盖一个UIImage
这样做的最好方法是什么?
我首先想到的是预习一堆透明的PNG图像与正确的边框效果我正在寻找,然后以某种方式使用它作为我的UIImage口罩。这是正确的道路吗?还是有更灵活的编程方式来做到这一点?
这里是核芯显卡调用你可以用它来掩盖图像:
//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);
是的,这是相当多的,你需要做什么。最好的方法是使用Core Graphics;石英2D编程指南有一个article describing how to mask images with other images。您可以通过获取其CGImage
属性CGImageRef
(这些核芯显卡方法使用)从UIImage
对象,然后使用UIImage
类方法+imageWithCGImage:
从改变(屏蔽)CGImageRef
得到UIImage
回来。
CGImage为空。 – Aggressor 2014-09-26 01:41:02
您需要为该图像屏蔽,我写了一个tutorial on how to use it和我如何在自己的应用程序中使用它。
下面的示例代码应该帮助你开始,它需要原始图像和作为输入遮掩图像,并返回遮盖的图像作为输出。
- (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;
}
还有一种方法可以做到这一点与路径。我已经发布了一个代码,它可以用一个圆圈来完成,并且可以很容易地编辑来处理任何封闭的路径。如果它是从一个CIImage创建的,所以要小心从一个UIImage
谢谢!想知道如何做到这一点。对于后代,你的第一个UIImage alloc有一个小的错字:应该像第二个那样说'imageNamed'。 – dooleyo 2013-08-07 20:25:25
需要更新'imageWithCGImage:''到imageWIthCGImage:规模:定位:' – jowie 2015-07-09 16:59:16
非常相似,http://stackoverflow.com/a/5757417 – danh 2016-05-05 02:22:40