0

このような構造体を定義した場合:

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

そして、各要素はパーセンテージです。CまたはC++の.bmpファイルからこれらの値を取得するにはどうすればよいですか?ありがとう!

4

2 に答える 2

2

BMPファイルのウィキペディアのエントリには、ファイル形式のわかりやすい説明があります。そのページの下部に、BMPファイルを読み取るために以前に使用したこのファイルbitmap.hへのリンクがあります。

基本的に、BMPファイルを読み取ったら、RGBA構造体の各赤、緑、青の値を255で割ってパーセンテージを取得する必要があります。

于 2012-06-26T08:28:36.147 に答える
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);
}
于 2012-06-26T08:26:35.937 に答える