iOS无损图像编辑

时间:2013-04-17 05:13:03

标签: ios objective-c image-processing

我正在为iPhone / iPod开发照片应用程序。

我想从iPhone应用程序中获取大图像的原始数据并对其执行一些像素操作并将其写回磁盘/图库。

到目前为止,我一直在使用以下技术将从图像选择器获得的UIImage转换为unsigned char指针:

CGImageRef imageBuff = [imageBuffer CGImage];//imageBuffer is an UIImage *
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(imageBuff));
unsigned char *input_image = (unsigned char *)CFDataGetBytePtr(pixelData);

//height & width represents the dimensions of the input image

unsigned char *resultant = (unsigned char *)malloc(height*4*width);

for (int i=0; i<height;i++)
{
    for (int j=0; j<4*width; j+=4)
    {
        resultant[i*4*width+4*(j/4)+0] = input_image[i*4*width+4*(j/4)];
        resultant[i*4*width+4*(j/4)+1] = input_image[i*4*width+4*(j/4)+1];
        resultant[i*4*width+4*(j/4)+2] = input_image[i*4*width+4*(j/4)+2];
        resultant[i*4*width+4*(j/4)+3] = 255;
    }
}
CFRelease(pixelData);

我正在对结果进行所有操作,并使用以下方法将其写回原始分辨率的磁盘:

     NSData* data = UIImagePNGRepresentation(image);
    [data writeToFile:path atomically:YES];

我想知道:

  1. 实际上是无损转变?
  2. 如果手头有20-22 MP图像......在后台线程中执行此操作是否明智? (碰撞等的可能性......我想知道这样做的最佳做法)。
  3. 有没有更好的方法来实现这个(在这里获取像素数据是必需的)

2 个答案:

答案 0 :(得分:1)

是的,这种方法是无损的,但我不确定20-22 MP图像。如果我想编辑那些大图片,我认为Iphone根本不是一个合适的选择!

答案 1 :(得分:1)

我已成功使用此技术捕获和编辑高达22 MP的图像。

在iPhone 4s上测试过,它运行良好。但是,我正在使用的一些效果需要Core Image过滤器。看起来CIFilters不支持超过16 MP的图像。如果在图像&gt; 16MP上使用过滤器将返回空白图像。

我仍然希望人们对iOS中的无损大图像编辑策略发表评论。