Listing 2 of Apple's Q & A显示了如何修改CGImageRef中像素的示例。问题是:他们没有显示如何获取像素并修改它的R G B和A值。
有趣的部分在这里:
void *data = CGBitmapContextGetData (cgctx);
if (data != NULL)
{
// **** You have a pointer to the image data ****
// **** Do stuff with the data here ****
}
现在,假设我想从x = 100,y = 50的像素读取红色,绿色,蓝色和Alpha。如何访问该像素及其R,G,B和A组件?
答案 0 :(得分:3)
首先,您需要知道位图的bytesPerRow,以及位图中像素的数据类型和颜色格式。 bytesPerRow可以与width_in_pixels * bytesPerPixel不同,因为每行末尾可能有填充。像素可以是16位或32位,或者可能是一些其他大小。像素的格式可以是ARGB或BRGA,或其他格式。
对于32位ARGB数据:
unsigned char *p = (unsigned char *)bytes;
long int i = bytesPerRow * y + 4 * x; // for 32-bit pixels
alpha = p[i ]; // for ARGB
red = p[i+1];
green = p[i+2];
blue = p[i+3];
请注意,根据您的视图转换,Y轴可能看起来也是颠倒的,具体取决于您的预期。