UIImage屏蔽问题iOS 7 [英] UIImage masking problems iOS 7

查看:105
本文介绍了UIImage屏蔽问题iOS 7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有大量借用(标准)代码,它将灰度UIImage掩码应用于UIImage。

I have heavily borrowed (standard) code which applies a grayscale UIImage mask to a UIImage.

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

    CGImageRef imageRef = image.CGImage;  // main UIImage
    CGImageRef maskRef = maskImage.CGImage;  // grayscale UIImage mask

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

    CGImageRef masked = CGImageCreateWithMask(imageRef, mask);

    maskedImage = [UIImage imageWithCGImage:masked];
    CGImageRelease(mask);
    CGImageRelease(masked);

    imageView.image = maskedImage;

}

然后保存imageView .image to a file。代码就像iOS 6和6.1中的魅力一样;保存的图像包含应用了蒙版的主UIImage。但是,我注意到此代码在iOS 7(iPhone)中的执行方式不同。在iOS 7中,保存的图像仅包含未应用蒙版的主UIImage。我不确定问题是否存在于CGImageCreateWithMask()方法或其他地方。

I then save the imageView.image to a file. The code works like a charm in iOS 6 and 6.1; the saved image contains the main UIImage with the mask applied. However, I have noticed that this code does not perform in the same way in iOS 7 (iPhone). In iOS 7, the saved image contains only main UIImage without the mask applied. I am not sure whether the problem lies in the CGImageCreateWithMask() method or elsewhere.

任何见解都将受到赞赏。非常感谢你提前。

Any insight would be appreciated. Thank you so much in advance.

推荐答案

上面的代码很好地说明了如何处理问题(在上下文中绘图) )但不适合我。下面的代码适用于IOS 7和以前的版本(IOS 6.x)。

The above code gives a good idea of how to approach the problem(drawing over a context) but did not work for me. The code below works both on IOS 7 and previous versions(IOS 6.x).

+(UIImage*)maskImageExt:(UIImage *)image withMask:(UIImage *)maskImage {
    CGImageRef maskRef = maskImage.CGImage;
    CGImageRef imageRef = image.CGImage;

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

    CGImageRef maskImageRef = CGImageCreateWithMask([image CGImage], mask);

    CGContextRef context = CGBitmapContextCreate(nil,
                                                 CGImageGetWidth(imageRef),
                                                 CGImageGetHeight(imageRef),
                                                 CGImageGetBitsPerComponent(imageRef),
                                                 CGImageGetBytesPerRow(imageRef),
                                                 CGImageGetColorSpace(imageRef),
                                                 CGImageGetBitmapInfo(imageRef));
    CGRect imageRect = CGRectMake(0, 0, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef));
    CGContextDrawImage(context, imageRect, maskImageRef);
    CGImageRef maskedImageRef = CGBitmapContextCreateImage(context);
    UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];

    CGImageRelease(mask);
    CGContextRelease(context);
    CGImageRelease(maskedImageRef);

    return maskedImage;
}

这篇关于UIImage屏蔽问题iOS 7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆