2012-06-26 57 views
0

如果我定義了這樣的結構:如何獲取C或C++中.bmp文件中RGB的每個比率?

struct rgb 
{ 
    double r; 
    double g; 
    double b; 
}; 

,每個元素是一個百分比。 如何從C或C++的.bmp文件中獲取這些值? 謝謝!

+0

我強烈建議使用OpenCV處理任何與C/C++相關的圖像處理。 –

回答

2

wikipedia entry for BMP文件具有文件格式的一個很好的說明。在該頁面的底部,有一個指向我以前用來讀取BMP文件的文件bitmap.h的鏈接。

基本上,一旦你讀過您的BMP文件,你應該將每個紅色,綠色和藍色值在RGBA結構由255得到的百分比。

+0

Thanks.Your answer help me my。 – zxi

1

我不確定,但你可以參考下面的鏈接來獲得關於如何獲得rgb值的一些想法。

RGB_Info

另外,還要檢查以下鏈接進行他們所提到的例子如下所述: -

RGB_Info_MSDN_Link

//Pass the handle to the window on which you may want to draw 
struct vRGB 
{ 
    vRGB():R(0), G(0), B(0){} 
    vRGB(BYTE r, BYTE g, BYTE b):R(r), G(b), B(b){} 
    BYTE R, G, B; 
}; 

void GetBitmapPixel(HWND hwnd, std::vector<std::vector<vRGB>> &pixel){ 
BITMAP bi; 

//Load Bitmap from resource file 
HBITMAP hBmp = LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP1)); 

//Get the Height and Width 
::GetObject(hBmp, sizeof(bi), &bi); 
int Width = bi.bmWidth; int Height = bi.bmHeight; 

//Allocate and Initialize enough memory for external (Y-dimension) array 
pixel.resize(Height); 

//Create a memory device context and place your bitmap 
HDC hDC = GetDC(hwnd); 
HDC hMemDC = ::CreateCompatibleDC(hDC); 
SelectObject(hMemDC, hBmp); 

DWORD pixelData = 0; 

for (int y = 0; y < Height; ++y) 
{ 
    //Reserve memory for each internel (X-dimension) array 
    pixel[y].reserve(Width); 

    for (int x = 0; x < Width; ++x) 
    { 
     //Add the RGB pixel information to array. 
     pixelData = GetPixel(hMemDC, x, y); 
     pixel[y].push_back(vRGB(GetRValue(pixelData), GetGValue(pixelData), GetBValue(pixelData))); 
    } 
} 

//Cleanup device contexts 
DeleteDC(hMemDC); 
ReleaseDC(hwnd, hDC); 
} 
+1

謝謝你的工作。 – zxi

+0

@zxi歡迎您:) – Abhineet