UIImage在int数组中获取图像的getpixels

时间:2014-04-08 17:49:16

标签: ios uiimage core-graphics

我想在ios中获取图像的像素。

我知道如何在android中执行此操作,我正在寻找ios的等效方法。

http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels(int [],int,int,int,int,int,int)

我找到了一堆ios的示例代码,但没有一个像android框架一样干净。所以我猜测有一种更好,更简单的方法,主要由框架处理。

2 个答案:

答案 0 :(得分:1)

我用这种方式

- (void) imagePixel:(UIImage *)image
{

    struct pixel {
        unsigned char r, g, b, a;
    };


    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGImageRef imageRef = image.CGImage;

    size_t width = CGImageGetWidth(imageRef);
    size_t height = CGImageGetHeight(imageRef);

    struct pixel *pixels = (struct pixel *) calloc(1, sizeof(struct pixel) * width * height);


    size_t bytesPerComponent = 8;
    size_t bytesPerRow = width * sizeof(struct pixel);

    CGContextRef context = CGBitmapContextCreate(pixels, width, height, bytesPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
    unsigned long numberOfPixels = width * height;

    if (context != NULL) {
        for (unsigned i = 0; i < numberOfPixels; i++) {
            //you can add code here
            pixels[i].r;
            pixels[i].g;
            pixels[i].b;
        }


        free(pixels);
        CGContextRelease(context);
    }

    CGColorSpaceRelease(colorSpace);

}

<强>更新

是的,您可以在发布上下文和

之前重新创建图像
CGImageRef imageR = CGBitmapContextCreateImage(context);
UIImage *outputImage = [UIImage imageWithCGImage:imageR];

最后你应该用

发布imageR
CGImageRelease(imageR)

答案 1 :(得分:0)

-(NSArray*)getPixelsFromImage:(UIImage*)image
{
NSMutableArray *pixelData=[NSMutableArray new];
for (int y = 0; y<image.size.height; y+=1) {
   for (int x = 0; x<image.size.width; x+=1) {
           CGImageRef tmp = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(x, y, 1, 1));
           UIImage *part=[UIImage imageWithCGImage:tmp];
           [pixelData addObject:part];
       }

   }
return [pixelData copy];
}

这将返回一个1x1 UIImages的数组。也许它适合你。