【问题标题】:CGBitmapContextCreate unsupported parameter combination errorCGBitmapContextCreate不支持的参数组合错误
【发布时间】:2012-09-04 17:13:38
【问题描述】:

我正在读取一个图像文件并重新显示它而不进行任何更改,如下面的代码所示,但我得到了这个错误:

:CGBitmapContextCreate:不支持的参数组合:8个整数位/分量; 16 位/像素; 1-分量色彩空间; 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 中的建议,我将“CGImageGetColorSpace(sourceImage)”替换为“CGColorSpaceCreateDeviceRGB()”,但出现此错误:

:CGBitmapContextCreate:无效数据字节/行:对于 8 个整数位/分量、3 个分量、kCGImageAlphaPremultipliedLast,应至少为 15168。

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

有人遇到过这个问题吗?是不是和Xcode 4.4升级有关?

谢谢!谢

【问题讨论】:

    标签: cgbitmapcontextcreate


    【解决方案1】:

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

    【讨论】:

    • 感谢您发布您的解决方案:它也帮助了我。
    • 我必须将值设置为 CGImageAlphaInfo.no​​neSkipFirst.rawValue