我正在尝试创建一个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一起使用对于灰色空间没有意义(并且不受支持)。

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

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

另一个需要注意的是,将m_width传递为bytesPerRow仅在这种情况下(每像素1字节的灰色颜色空间)是正确的,但可能不是一个好习惯。如果为数据传递NULL,则也可以在此处传递0,以自动为您计算出它。

关于ios - CGBitmapContextCreate : unsupported parameter combination,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18057967/

10-08 21:06