2012-02-06 46 views
0

我使用Visual Studio 2010,C++的像素數據。使用從圖像檢索使用Devil

我想要做的是從加載的圖像中檢索像素數據(特定於RGB顏色),然後在各種檢查中使用它。目前,我想遍歷所有數據,並能夠檢測像素是否是特定顏色(特定的R,G和B值)。

我應該注意到我使用的是DevIL,而且我更願意繼續使用DevIL(我已經看到了一些關於其他工具幫助圖像處理的建議)。

現在,據我所知,DevIL函數ilgetData()檢索一個指針,該指針具有一維字節數組中所有像素的所有RGB值。我不知道如何存儲使用這個函數得到的數據,然後在for循環中使用它。

示例代碼非常感謝。

回答

5

存儲ilGetData()返回的正確方法是在IL無符號字節數組中。

例如

ILubyte * bytes = ilGetData(); 

遍歷它在一個for循環使用

for(int i = 0; i < size; i++) 
    { 
    // Print out each ILubyte one at time 
    printf("%d\n", bytes[ i ]); 
    } 

你可能想要的是一個for循環,打印或做別的事情與RGB值在給定的像素爲圖像中的所有像素。正如Bart指出的,下面的排序是針對IL_RGBA或RGBA格式的。如果使用IL_RGB,那麼4將變成3,並且如果使用IL_BGR或IL_BGRA,則需要按預期切換紅色和藍色值。

ILuint width,height; 
width = ilGetInteger(IL_IMAGE_WIDTH); 
height = ilGetInteger(IL_IMAGE_HEIGHT); 

for (int i = 0; i < height; i++) 
{ 
    for (int j = 0; j < width; j++) 
    { 
     printf("%s\n", "Red Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 0]); 
     printf("%s\n", "Green Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 1]); 
     printf("%s\n", "Blue Value for Pixel"); 
     printf("%d\n", bytes[(i*width + j)*4 + 2]); 
    } 
} 
+0

你的例子假定RGBA是一種格式,我認爲? – Bart 2012-02-06 20:38:30

+0

非常感謝您的支持。你已經解決了一個星期尋找我。代碼示例非常感謝。再次感謝。 – Rohit 2012-02-07 13:49:27

相關問題