このような構造体を定義した場合:
struct rgb
{
double r;
double g;
double b;
};
そして、各要素はパーセンテージです。CまたはC++の.bmpファイルからこれらの値を取得するにはどうすればよいですか?ありがとう!
BMPファイルのウィキペディアのエントリには、ファイル形式のわかりやすい説明があります。そのページの下部に、BMPファイルを読み取るために以前に使用したこのファイルbitmap.hへのリンクがあります。
基本的に、BMPファイルを読み取ったら、RGBA構造体の各赤、緑、青の値を255で割ってパーセンテージを取得する必要があります。
よくわかりませんが、以下のリンクを参照して、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);
}