2012-05-14 50 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; 
    } 
}