在iPhone上读取和编辑图像像素

在iPhone上读取和编辑图像像素,iphone,uiimageview,uiimage,core-graphics,quartz-graphics,Iphone,Uiimageview,Uiimage,Core Graphics,Quartz Graphics,好奇如何在iPhone上读取和编辑图片的像素。使用带有颜色的点阵列是否更好 我想做一些事情,比如。。如果CGPoint与图片上的“棕色”点相交,请将半径内所有棕色像素的颜色设置为白色。还有更多的问题要问,但这只是一个开始 干杯您可以使用的图片数据正是这样——一个二维像素数组,每个像素由一个32位整数表示。对于每个颜色分量(红色、绿色、蓝色和alpga),都有一个8位值。这些8位宽值在32位整数内的顺序随图片数据的格式而变化。关于这一切的苹果医生真的很好。虽然有一些吸引人的苹果产品使用CGData

好奇如何在iPhone上读取和编辑图片的像素。使用带有颜色的点阵列是否更好

我想做一些事情,比如。。如果CGPoint与图片上的“棕色”点相交,请将半径内所有棕色像素的颜色设置为白色。还有更多的问题要问,但这只是一个开始


干杯

您可以使用的图片数据正是这样——一个二维像素数组,每个像素由一个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];

回答得好!实时保存/读取此图像的效率如何?假设我每次做改变时都会设置一个标志,这并不是每一个滴答声都会出现,这是非常有效的。你可以接近30 fps,即使你在不断地改变…谢谢!期待着尝试一下。嘿,我从bytesPerPixel(第二次使用)中取出了一个下划线。。我假设只有一个变量叫做bytesperpoixel。在创建上下文时,我得到一个错误“rawdataundeclared”:CGContextRef context=CGBitmapContextCreate(rawData、width、height、bitsPerComponent、bytesPerRow、colorSpace、kcgimagealphapremultipledast | kcgbitmappbyteorder32big);但我用“unsigned char*rawData_uu=malloc(height*width*4)”,创建了几行。。有什么建议吗?节日快乐!很抱歉,在unsigned char*rawData_uuz=malloc(高度*宽度*4)处还有一个下划线;您需要删除。不知道这些是怎么进来的--我猜我的文本编辑器与stackoverflow的交互有些奇怪。。。