CGBitmapContextCreate:不受支持的参数组合

我正在尝试创build一个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 Programming Guide ”中提供了支持的每组件位数,每像素位数,色彩空间组合,

正如Nikolai写的,使用kCGBitmapByteOrder32Little与kCGImageAlphaNone没有意义的灰色空间(和不支持)。

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

另外,根据CGBitmapContextCreate文档,您实际上并不需要自己分配内存(从iOS 4.0开始),您可以将NULL作为数据传递给您分配的内存。 您仍然可以通过请求CGBitmapContextGetData来访问数据指针。

另外需要注意的是,在这种情况下,将m_width作为bytesPerRow传递是正确的(每个像素有1个字节的灰色空间),但可能并不是很好的做法。 如果你传递NULL作为数据,你也可以在这里传递0来让它自动计算出来。

这可能是kCGBitmapByteOrder32Little (对于单通道灰度图像没有任何意义)。

你可以从像素格式规范中删除它。