我正在阅读图片文件并重新显示它,而不进行任何更改,如下面的代码所示,但我收到此错误:
: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升级有关吗?
谢谢!晒
答案 0 :(得分:3)
使用kCGImageAlphaNone而不是kCGImageAlphaPremultipliedLast解决。 我仍然不明白为什么/如何将我的彩色图像变成灰度,以及为什么曾经工作的东西改变了它的行为,但至少我得到了一些显示。