如果我定義了這樣的結構:如何獲取C或C++中.bmp文件中RGB的每個比率?
struct rgb
{
double r;
double g;
double b;
};
,每個元素是一個百分比。 如何從C或C++的.bmp文件中獲取這些值? 謝謝!
如果我定義了這樣的結構:如何獲取C或C++中.bmp文件中RGB的每個比率?
struct rgb
{
double r;
double g;
double b;
};
,每個元素是一個百分比。 如何從C或C++的.bmp文件中獲取這些值? 謝謝!
的wikipedia entry for BMP文件具有文件格式的一個很好的說明。在該頁面的底部,有一個指向我以前用來讀取BMP文件的文件bitmap.h的鏈接。
基本上,一旦你讀過您的BMP文件,你應該將每個紅色,綠色和藍色值在RGBA結構由255得到的百分比。
Thanks.Your answer help me my。 – zxi
我不確定,但你可以參考下面的鏈接來獲得關於如何獲得rgb值的一些想法。
另外,還要檢查以下鏈接進行他們所提到的例子如下所述: -
//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);
}
我強烈建議使用OpenCV處理任何與C/C++相關的圖像處理。 –