CGBitmapContextCreate不支持的参数组合错误

时间:2012-09-04 17:13:39

标签: cgbitmapcontextcreate

我正在阅读图片文件并重新显示它,而不进行任何更改,如下面的代码所示,但我收到此错误:

:CGBitmapContextCreate:不支持的参数组合:8个整数位/组件; 16位/像素;单组分色彩空间; kCGImageAlphaPremultipliedLast; 3792字节/行。

代码是:

CGImageRef sourceImage = theImage.image.CGImage;

CFDataRef theData;
theData = CGDataProviderCopyData(CGImageGetDataProvider(sourceImage));

UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(theData);

CGContextRef context;
context = CGBitmapContextCreate(pixelData,
                                 CGImageGetWidth(sourceImage),
                                 CGImageGetHeight(sourceImage),
                                 8,
                                 CGImageGetBytesPerRow(sourceImage),
                                 CGImageGetColorSpace(sourceImage),
                                 kCGImageAlphaPremultipliedLast);

CGImageRef newCGImage = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newCGImage];

CGContextRelease(context);
CFRelease(theData);
CGImageRelease(newCGImage);

theImage.image = newImage;

此代码以前一直运行正常,直到我最近升级到Xcode 4.4。

根据iPhone CGContextRef CGBitmapContextCreate unsupported parameter combination中的建议,我用“CGColorSpaceCreateDeviceRGB()”替换了“CGImageGetColorSpace(sourceImage)”,但是出现了这个错误:

:CGBitmapContextCreate:无效的数据字节/行:对于8个整数位/组件,3个组件,至少为15168,kCGImageAlphaPremultipliedLast。

然后,当我用“CGImageGetBytesPerRow(sourceImage)* 4”替换“CGImageGetBytesPerRow(sourceImage)”时,错误消失了,但是4X缩小图像的副本并排显示。

有人遇到过这个问题吗?它与Xcode 4.4升级有关吗?

谢谢!晒

1 个答案:

答案 0 :(得分:3)

使用kCGImageAlphaNone而不是kCGImageAlphaPremultipliedLast解决。 我仍然不明白为什么/如何将我的彩色图像变成灰度,以及为什么曾经工作的东西改变了它的行为,但至少我得到了一些显示。