我正在尝试用“遮罩图像”遮罩图像。它在第一次运行得很好。但当我在应用程序中使用相同的蒙版图像再次尝试时,应用程序崩溃。当尝试使用另一个蒙版图像时,它可以正常工作。这一切为什么要发生?
控制台显示<Error>: CGImageMaskCreate: invalid mask bits/component: 4294967295.
- (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"]];
}在调用fun1和fun2时,应用程序工作正常。调用fun3时应用程序崩溃。
发布于 2010-05-23 15:21:06
你为什么要发布maskRef?你不应该这样,因为你没有保留它。
发布于 2011-07-07 08:00:07
以下是您正在尝试做的事情,没有内存泄漏或崩溃:
- (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;
}https://stackoverflow.com/questions/949306
复制相似问题