如何获取和修改像素值?

时间:2011-06-17 16:42:30

标签: iphone objective-c ios core-graphics image-manipulation

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组件?

1 个答案:

答案 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轴可能看起来也是颠倒的,具体取决于您的预期。