首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遮罩图像时崩溃

遮罩图像时崩溃
EN

Stack Overflow用户
提问于 2009-06-04 08:40:54
回答 2查看 584关注 0票数 1

我正在尝试用“遮罩图像”遮罩图像。它在第一次运行得很好。但当我在应用程序中使用相同的蒙版图像再次尝试时,应用程序崩溃。当尝试使用另一个蒙版图像时,它可以正常工作。这一切为什么要发生?

控制台显示<Error>: CGImageMaskCreate: invalid mask bits/component: 4294967295.

代码语言: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 *img2=[UIImage imageWithCGImage:masked];

    CGImageRelease(maskRef);
    CGImageRelease(mask);
    CGImageRelease(masked);

    return img2;
}

fun1()
{
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]];
}

fun2()
{
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]]; view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image3.png"]];
}

fun3()
{
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]];
view.image=[self maskImage:image1 withMask:[UIImage imageNamed:@"image2.png"]];
}

在调用fun1fun2时,应用程序工作正常。调用fun3时应用程序崩溃。

EN

回答 2

Stack Overflow用户

发布于 2010-05-23 15:21:06

你为什么要发布maskRef?你不应该这样,因为你没有保留它。

票数 1
EN

Stack Overflow用户

发布于 2011-07-07 08:00:07

以下是您正在尝试做的事情,没有内存泄漏或崩溃:

代码语言:javascript
复制
    - (UIImage*) maskImage:(UIImage *)image
              withMask:(UIImage *)maskImage
{
        CGImageRef imageRef = image.CGImage;
        CGImageRef maskRef = maskImage.CGImage;  
        CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                      CGImageGetHeight(maskRef),
                                      CGImageGetBitsPerComponent(maskRef),
                                      CGImageGetBitsPerPixel(maskRef),
                                      CGImageGetBytesPerRow(maskRef),
                                      CGImageGetDataProvider(maskRef),
                                      NULL, // decode should be NULL
                                      FALSE // shouldInterpolate
                                      );

        CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
        CGImageRelease(mask);
        UIImage *maskedImage = [UIImage imageWithCGImage:masked];
        CGImageRelease(masked);
        return maskedImage;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/949306

复制
相关文章

相似问题

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