0

如果我定义了这样的结构:

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

每个元素都是一个百分比。如何从 C 或 C++ 中的 .bmp 文件中获取这些值?谢谢!

4

2 回答 2

2

BMP 文件的维基百科条目对文件格式有很好的描述。在该页面的底部有一个指向此文件bitmap.h的链接,我以前用它来读取 BMP 文件。

基本上,一旦您读取了 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 回答