对如何在iPhone上阅读和编辑图片的像素感到好奇。我最好使用带颜色的点阵列吗?
我想做的事情是......如果CGPoint与图片上的“棕色”点相交,则将半径内所有棕色像素的颜色设置为白色。还有更多问题,但这是一个开始。
干杯
答案 0 :(得分:1)
图像数据可以精确地用于 - 二维像素阵列,每个像素由32位整数表示。对于每个颜色分量(红色,绿色,蓝色和alpga),存在8位值。这些8位宽的值在32位整数内的排序随图像数据的格式而变化。关于这一切的苹果博士真的很棒。虽然有一些有吸引力的苹果公司使用CGDataProviderCopyData来指示UIImage的实际数据存储,实际上这可能是一个令人头疼的问题,因为内部存储的格式可能因图像而异。在实践中,大多数进行图像处理的人似乎都使用这种方法:
CGImageRef image = [UIImage CGImage];
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData_ = malloc(height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel_ * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height));
CGContextRelease(context);
// rawData contains image data in the RGBA8888 format.
// for any pixel at coordinate x,y -- the value is
//
int pixelIndex = (bytesPerRow * y) + x * bytesPerPixel;
unsigned char red = rawData[pixelIndex];
green = rawData[pixelIndex + 1];
blue = rawData[pixelIndex + 2];
alpha = rawData[pixelIndex + 3];