1. 創建壹個 DIB(Device Independent Bitmap)對象,用於存儲灰度圖像數據。
2. 掃描二維數組中的每個元素,並將其轉換為相應的顏色值。對於 8 位灰度圖來說,每個像素點的顏色值範圍是 0 到 255。
3. 將顏色值寫入 DIB 對象中,並設置好圖像的寬度和高度。
4. 使用 CDC 類的 BitBlt() 函數將 DIB 對象中的圖像數據顯示到指定的設備上,例如顯示到畫布或窗口中。
以下是示例代碼:
```c++
// 假設輸入的二維數組是 grayData,寬度為 width,高度為 height
int width = 320;
int height = 240;
BYTE* grayData = new BYTE[width * height];
// 創建 DIB 對象
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -height; // 負數表示 top-down
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 8;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = width * height;
HDC hdc = GetDC(hWnd); // hWnd 為窗口句柄
HBITMAP hBitmap = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (void**)&grayData, NULL, 0);
// 將二維數組轉換為灰度圖數據
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
BYTE grayValue = ...; // 根據輸入的二維數組計算出顏色值
grayData[y * width + x] = grayValue;
}
}
// 顯示灰度圖像
CDC* pDC = CDC::FromHandle(hdc);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.Attach(hBitmap);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
pDC->BitBlt(0, 0, width, height, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBmp);
```
這樣,就可以在 MFC 中將二維數組直接顯示為灰度圖了。