首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的图像蒙版使我的图像变黑,而蒙版是白色的?

为什么我的图像蒙版使我的图像变黑,而蒙版是白色的?
EN

Stack Overflow用户
提问于 2009-07-16 08:30:25
回答 2查看 2.3K关注 0票数 2

我有一个带有alpha通道的300x400px PNG-24。它大约有140kb。我想掩盖其中的一些部分,所以我创建了另一张300x400的PNG-24图像,但只有黑色,灰色和白色,没有alpha通道。

奇怪的是:在蒙版是黑色的地方,图像只是保持原始。没有透明度。但是在蒙版是白色的地方,图像变黑了,只是变黑了。没有透明度。

它部分适用于非常小的图像,如50x50px。你知道这个函数可能出了什么问题吗?

代码语言:javascript
复制
+ (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 theImage = image.CGImage;
    CGImageRef masked = CGImageCreateWithMask(theImage, mask);
    return [UIImage imageWithCGImage:masked];
}

我的背景是橙色的,所以这个颜色应该是透明的。保存图像的透明度设置为clearColor / UIImageView和opaque=NO。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-16 08:53:09

我猜你的代码是from here。下面是这样的评论:

我已经改进了代码,这样它就可以正确地遮罩没有alpha通道的图像。

因此,如果它对您不起作用,可能您的图像没有alpha通道。

票数 0
EN

Stack Overflow用户

发布于 2013-09-09 22:29:55

当心--代码会泄露!直到在循环中运行此方法,我才注意到这一点。请确保在返回图片前调用CGImageRelease(mask)CGImageRelease(masked)

代码语言:javascript
复制
- (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 masked = CGImageCreateWithMask(image.CGImage, mask);

    UIImage *img = [UIImage imageWithCGImage:masked];

    //otherwise we will leak
    CGImageRelease(mask);
    CGImageRelease(masked);

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

https://stackoverflow.com/questions/1136195

复制
相关文章

相似问题

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