我正在使用StretchDIBits函数,在显示位图时,我可以看到它以两种不同的方式显示,如下所示:
我唯一要做的就是每当我获得新数据时都要更新BMP缓冲区。
请在下面找到用于显示位图的相关代码。
if (pBMPBuffer)
{
LPBITMAPINFO pBmpInfo;
pBmpInfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)];
pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmpInfo->bmiHeader.biWidth = m_iZSize;
pBmpInfo->bmiHeader.biHeight = m_iXSize;
pBmpInfo->bmiHeader.biPlanes = 1;
pBmpInfo->bmiHeader.biBitCount = 32;
pBmpInfo->bmiHeader.biCompression = BI_RGB;
pBmpInfo->bmiHeader.biSizeImage = m_iXSize * m_iZSize;
pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
pBmpInfo->bmiHeader.biClrUsed = 0;
pBmpInfo->bmiHeader.biClrImportant = 0;
SetStretchBltMode(pDC->m_hDC, STRETCH_HALFTONE);
StretchDIBits(pDC->m_hDC,
rectBMP.left,
rectBMP.top,
rectBMP.Width(),
rectBMP.Height(),
0,
0,
m_iZSize,
m_iXSize,
pBMPBuffer,
pBmpInfo,
DIB_RGB_COLORS,
SRCCOPY);
delete[] pBmpInfo;
}
我希望位图始终具有“模糊”外观。 提前谢谢。
答案 0 :(得分:1)
您可以使用GDI +代替GDI,并选择在缩放或旋转图像时使用的双三次插值算法。 See Gdiplus::Graphics::SetInterpolationMode
请注意,GDI +将比GDI慢。另一种选择是使用OpenGL例如......