阅读提示:
  《C++图像处理》系列以代码清晰,可读性为主,全部使用C++代码。
  《Delphi图像处理》系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM。
  尽可能保持二者内容一致,可相互对照。
  本文代码必须包括《C++图像处理 -- 数据类型及公用函数》文章中的BmpData.h头文件以及《C++图像处理 -- 图像合成》中的有关代码。
  在《C++图像处理 -- 图像合成》一文中开始时说过,图像的合成操作包括图像显示、图像拷贝、图像拼接以及的图层拼合叠加等,本文在《C++图像处理 -- 图像合成》代码基础上介绍如何在Windows环境下进行图像显示。
  图像显示代码如下:

 

VOID GetBitmapInfoHeader(CONST BitmapData *data, CONST PBITMAPINFO pbi)
{
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biWidth = data->Width;
pbi->bmiHeader.biHeight = data->Height;
pbi->bmiHeader.biPlanes = 1;
pbi->bmiHeader.biBitCount = (data->PixelFormat >> 8) & 0xff;
pbi->bmiHeader.biCompression = BI_RGB;
}
//---------------------------------------------------------------------------
VOID GetDCImageData(HDC DC, INT x, INT y, BitmapData *data, PBITMAPINFO pbi)
{
HBITMAP bitmap = CreateCompatibleBitmap(DC, data->Width, data->Height);
HDC memDC = CreateCompatibleDC(DC);
HBITMAP saveBitmap = (HBITMAP)SelectObject(memDC, bitmap);
BitBlt(memDC, 0, 0, data->Width, data->Height, DC, x, y, SRCCOPY);
SelectObject(memDC, saveBitmap);
DeleteDC(memDC);
GetDIBits(DC, bitmap, 0, data->Height, data->Scan0, pbi, DIB_RGB_COLORS);
DeleteObject(bitmap);
}
//---------------------------------------------------------------------------
VOID BitBltImageData(HDC DC, INT x, INT y, CONST BitmapData *data, PBITMAPINFO pbi)
{
HBITMAP bitmap = CreateDIBitmap(DC, &pbi->bmiHeader, CBM_INIT, data->Scan0, pbi, DIB_RGB_COLORS);
HDC memDC = CreateCompatibleDC(DC);
HBITMAP saveBitmap = (HBITMAP)SelectObject(memDC, bitmap);
BitBlt(DC, x, y, data->Width, data->Height, memDC, 0, 0, SRCCOPY);
SelectObject(memDC, saveBitmap);
DeleteDC(memDC);
DeleteObject(bitmap);
}
//---------------------------------------------------------------------------