CGBitmapContextCreate:不支持的参数组合

2024-03-25

我正在尝试创建一个 8 位灰度上下文,如下所示:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate(
    data, m_width, m_height, 8, m_width, colorSpace, 
    kCGBitmapByteOrder32Little|kCGImageAlphaNone);

但我有以下错误:

CGBitmapContextCreate: unsupported parameter combination: 
8 integer bits/component; 8 bits/pixel; 1-component color space; 
kCGImageAlphaNone; 1936 bytes/row.

为什么这个组合不受支持?


支持的每组件位数、每像素位数、色彩空间组合可在“Quartz 2D 编程指南 https://developer.apple.com/library/mac/DOCUMENTATION/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB"

正如 Nikolai 所写,将 kCGBitmapByteOrder32Little 与 kCGImageAlphaNone 一起使用对于灰色空间没有意义(并且不受支持)。

现在,根据每行的字节数和高度,您需要提供足够的分配内存CGBitmapContextCreate在你的数据参数中。您没有显示设置高度并为数据分配内存的代码,但我想您的问题就在那里。

此外,根据CGBitmapContext创建 https://developer.apple.com/library/ios/documentation/graphicsimaging/Reference/CGBitmapContext/Reference/reference.html#//apple_ref/c/func/CGBitmapContextCreate根据文档,您可以传递 NULL 作为数据来为您分配内存。您稍后仍然可以通过请求来访问数据指针CGBitmapContextGetData.

另一个注意事项是通过m_width as bytesPerRow仅在这种情况下正确(每个像素 1 字节的灰色颜色空间),但可能不是一个好的做法。如果您为数据传递 NULL,您也可以在此处传递 0 以自动为您计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGBitmapContextCreate:不支持的参数组合 的相关文章

随机推荐