Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CGBitmapContextCreate:不支持的参数组合_Ios_Cgcontext - Fatal编程技术网

Ios CGBitmapContextCreate:不支持的参数组合

Ios CGBitmapContextCreate:不支持的参数组合,ios,cgcontext,Ios,Cgcontext,我正在尝试创建一个8位灰度上下文,如下所示: CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef context = CGBitmapContextCreate( data, m_width, m_height, 8, m_width, colorSpace, kCGBitmapByteOrder32Little|kCGImageAlphaNone); 但我有以下错误: CGBit

我正在尝试创建一个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.

为什么不支持这种组合?

可能是
kCGBitmapByteOrder32Little
(这对单通道灰度图像毫无意义)


您可以将其从像素格式规范中删除。

支持的每组件位、每像素位、颜色空间组合可以在“”中找到

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

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

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


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

谢谢您的回答。我已经按照您所描述的那样做了,但是错误现在变为:
CGBitmapContextCreate:invalid data bytes/row:对于8个整数位/组件、3个组件、kCGImageAlphaNoneSkipLast,应该至少为7744。
+1对于非常棒的提示—“如果数据传递NULL,您也可以在这里传递0,让它自动为您计算。”它可以工作,但我在文档中找不到它的引用。tho,你有吗?它就在CGBitmapContextCreate函数的文档中,请看bytesPerRow参数的描述。是的,我不知道我怎么会错过它!