我得到了一個閱讀bmp圖像的問題。我如何獲得像素值(R,G,B值)在一個BMP圖像? 任何人都可以幫助我使用C編程語言嗎?獲取BMP文件的像素值
5
A
回答
7
簡單的方法是爲您選擇的平臺找到一個好的圖像處理庫並使用它。
- 的LinuxImLib/GDK-Pixbuf (Gnome/GTK)/QT Image (KDE/Qt)應該能夠做你的需要。
- Windows我不熟悉相應的系統庫,但MSDN Search for "Bitmap"可能是一個很好的開始。
- Mac OSX可可具有一些圖像處理功能,請參閱this article。
困難的方法是打開文件並實際解釋其中的二進制數據。要做到這一點,你需要BMP File Specification。我建議先嚐試簡單的方法。
6
您需要研究BMP文件格式。讀取未壓縮的24位BMP文件比較容易。它們只在開頭包含一個標題,並且包含每個像素的RGB值。
要開始此操作,請檢查位於http://en.wikipedia.org/wiki/BMP_file_format的2x2位圖圖像的示例。按照以下步驟。
- 創建維基百科上顯示的2x2 BMP圖像。
- 使用C程序以二進制模式打開文件。
- 尋找字節位置54.
- 讀取3個字節。
這些字節將分別爲0,0和255。 (不知道該命令是否爲RGB,我已經完成了這一步,我認爲命令不是RGB,只需驗證一下。)
就這麼簡單!研究BMP的標題以更多地瞭解格式。
10
注意:如果您的BMP有alpha通道,您可能需要爲alpha值獲取額外的字節。在這種情況下,圖像將是image[pixelcount][4]
,並且您將添加另一條getc(streamIn)
線來保存第四個索引。我的BMP結果不需要那樣。
// super-simplified BMP read algorithm to pull out RGB data
// read image for coloring scheme
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
FILE *streamIn;
streamIn = fopen("./mybitmap.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
exit(0);
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<1024;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
〜Locutus
相關問題
- 1. 如何使用jython獲取.bmp圖像文件像素值
- 2. 如何使用Qt獲取BMP中每個像素的RGB值?
- 3. 讀取.bmp文件C++,錯誤的值?
- 4. Fread返回0,從BMP文件讀取像素
- 5. 計數像素值bmp到像素值C++
- 6. 從bmp文件獲取不正確的值
- 7. 使用PHP GD庫從BMP中獲取像素的調色板
- 8. 從文本文件中獲取演示的像素值
- 9. 獲取Android像素值
- 10. 用像素獲取css值
- 11. MATLAB獲取xyrgb像素值
- 12. 獲取圖像中的像素值
- 13. C讀取bmp文件
- 14. 讀取/寫入bmp文件
- 15. 獲取gif文件中每個像素的RGB值
- 16. 如何解釋在1 BPP BMP文件的像素陣列
- 17. 設置BMP/JPG文件的像素顏色
- 18. SDL框架無法顯示小於20x20像素的BMP文件?
- 19. 在C中反轉BMP文件中的像素顏色
- 20. PHP:獲取圖像gamma值(像素)
- 21. 從圖像獲取像素值:Matlab
- 22. python dicom - 從dicom文件中獲取像素值
- 23. 24位BMP與256色BMP的像素存儲
- 24. 獲取代碼鏡像元素的值
- 25. 獲取單個像素的值
- 26. 獲取給定像素位置的值
- 27. 在C++的bmp文件中獲取指針到dib的指針
- 28. MFC - 模糊/像素化BMP與的StretchDIBits
- 29. 獲取像素
- 30. 如何使用vbscript獲取2個BMP文件的區別?
是不是有你需要闖過你打的圖像數據前的頭塊? – 2011-08-30 04:56:39
@Anon如果我的文件是jpeg,該怎麼辦? – Kraken 2013-04-15 20:30:23