我想在ios中获取图像的像素。
我知道如何在android中执行此操作,我正在寻找ios的等效方法。
http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels(int [],int,int,int,int,int,int)
我找到了一堆ios的示例代码,但没有一个像android框架一样干净。所以我猜测有一种更好,更简单的方法,主要由框架处理。
答案 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];
最后你应该用
发布imageRCGImageRelease(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的数组。也许它适合你。