阅读提示:
《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); } //--------------------------------------------------------------------------- |