This question already has an answer here:
CGBitmapContextCreate with kCGImageAlphaNone

(1个答案)


5年前关闭。




我在创建上下文时有问题。

我已经看到了很多答案,但是这些都不适合我。

我有以下代码。
CGSize pixelSize = src_img.size;
pixelSize.width = src_img.scale* src_img.size.width;
pixelSize.height = src_img.scale*src_img.size.height;

size_t d_bytesPerRow = pixelSize.width * 4;
unsigned char *imgData = (unsigned char*)malloc(pixelSize.height * d_bytesPerRow);
CGImageRef imageRef = src_img.CGImage;

CGContextRef context =  CGBitmapContextCreate(imgData,
                                              (size_t)pixelSize.width, (size_t)pixelSize.height, 8, d_bytesPerRow,
                                              CGImageGetColorSpace(imageRef), kCGImageAlphaNone);

在控制台中显示错误

CGBitmapContextCreate:不支持的参数组合:8个整数
位/分量; 24位/像素; 3分量色彩空间;
kCGImageAlphaNone; 1754字节/行。

我不知道该怎么办。请帮忙

最佳答案

您未指定supported pixel formats之一。图像的色彩空间显然是RGB色彩空间。您正在指定kCGImageAlphaNone。在一起,这意味着每个像素3个组件,并且没有填充。结合您指定的每个组件8位,可以得到每个像素24位。

受支持的像素格式均不允许每个像素24位。这是说它们都不支持kCGImageAlphaNone的RGB的另一种说法。如果您没有Alpha或需要Alpha,则需要使用kCGImageAlphaNoneSkipFirstkCGImageAlphaNoneSkipLast,这意味着每个像素中的填充字节会将其每个像素最多增加32位。

另外,您几乎总是最好将NULL参数指定为data,并将bytesPerRow参数指定为0。前者使内存管理更加容易。后者不仅更容易,而且允许系统优化缓冲区的对齐方式。

关于ios - CGBitmapContextCreate:不支持的参数组合:8个整数位/组件iOS ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26071578/

10-14 21:42