掩盖UIImage

Ste*_*man 12 cocoa-touch core-graphics mask transparent uiimage

我正在开发一个可以改变边框或矩形UIImage的应用程序.边框会有所不同,但看起来像UIImage是用剪刀剪掉的,或者是影响的东西.

做这个的最好方式是什么?

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

Ree*_*sen 25

以下是可用于屏蔽图像的Core Graphics调用:

//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);
Run Code Online (Sandbox Code Playgroud)


Jer*_*oen 6

你需要图像屏蔽,我写了一个关于如何使用它以及我如何在我自己的应用程序中使用它教程.

以下示例代码应该可以帮助您入门,它需要原始图像和掩码图像作为输入,它将屏蔽图像作为输出返回.

- (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;
}
Run Code Online (Sandbox Code Playgroud)