2012-05-14 82 views
1

我想在Obj-C或当然C的iOS上做一些科学的图像处理,我所需要做的就是获得所有像素的RGBA位值的3D数组。 UIImage似乎没有内置函数。你们中的任何一个人都知道如何获得像素值,或者更好的是使用那些功能在那里的预定义库? 由于提前,JEMObj-C中的图像处理

+2

3D数组用于图像处理? –

+0

我不确定我是否按照您要在此处执行的操作。你问如何从图像中的RGB值生成直方图? –

+0

嗯,我想从数组中创建一个数组,然后也许我想创建一个直方图,尽管一旦我有数组 –

回答

1

你通常可以创建一个CGBitmapContext,告诉它使用你自己分配一些内存(这样,你知道它在哪里以及如何访问它),或让核芯显卡的数字,如果您仅针对iOS 4/OS X 10.6及更高版本,请拨打CGBitmapContextGetData,然后绘制您想要检查的内容。

E.g. (错误检查和一些设置步骤故意省略,为简洁起见,寻找我使用的变量,尽管没有定义和检查功能文档)

CGBitmapInfo bitmapInfo = 
       kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host; 

context = 
     CGBitmapContextCreate(
       NULL, 
       width, height, 
       8, 
       width * 4, 
       rgbColourSpace, 
       bitmapInfo); 

CGContextDrawImage(
     context, 
     CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), 
     [image CGImage]); 

uint8_t *pixelPointer = CGBitmapContextGetData(context); 

for(size_t y = 0; y < height; y++) 
{ 
    for(size_t x = 0u; x < width; x++) 
    { 
     if((bitmapInfo & kCGBitmapByteOrder32Little)) 
     { 
      NSLog(@"rgba: %02x %02x %02x %02x", 
       pixelPointer[2], pixelPointer[1], 
       pixelPointer[0], pixelPointer[3]); 
     } 
     else 
     { 
      NSLog(@"rgba: %02x %02x %02x %02x", 
       pixelPointer[1], pixelPointer[2], 
       pixelPointer[3], pixelPointer[0]); 
     } 

     pixelPointer += 4; 
    } 
}