MFC-带StretchDIBits的模糊/像素化BMP
我正在使用StretchDIBits函数,在显示位图的过程中,我可以看到它以两种不同的方式显示,如下所示: 我正在做的唯一一件事是每当我获得新数据时更新BMP缓冲区 请在下面找到用于显示位图的关联代码MFC-带StretchDIBits的模糊/像素化BMP,mfc,Mfc,我正在使用StretchDIBits函数,在显示位图的过程中,我可以看到它以两种不同的方式显示,如下所示: 我正在做的唯一一件事是每当我获得新数据时更新BMP缓冲区 请在下面找到用于显示位图的关联代码 if (pBMPBuffer) { LPBITMAPINFO pBmpInfo; pBmpInfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; pBmpInf
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;
}
我希望位图始终具有“模糊”外观。
提前感谢。您可以使用GDI+代替GDI,并选择缩放或旋转图像时使用的双三次插值算法
请注意,GDI+将比GDI慢。。另一个选项是使用OpenGL,例如…您可以使用GDI+而不是GDI,并选择在缩放或旋转图像时使用的双三次插值算法
请注意,GDI+将比GDI慢。。另一个选项是使用OpenGL,例如…文档中规定,在
SetStretchBltMode
之后,您应该始终使用SetBrushOrgEx
,您尝试过吗?您好,我刚刚尝试过,现在它只显示“仅”像素类型。你知道我怎样才能得到“模糊”的答案吗?对不起,如果我知道的话,我会回答这个问题的。我唯一能提出的建议是将参数更改为SetBrushOrgEx
。这很像半色调失败是有原因的。当我得到答案时,我会继续检查并张贴在这里。谢谢Mark。文档中说明您应该始终在SetStretchBltMode
之后使用SetBrushOrgEx
,您尝试过吗?嗨,Mark,我刚刚尝试过,现在它只显示“仅”像素类型。你知道我怎样才能得到“模糊”的答案吗?对不起,如果我知道的话,我会回答这个问题的。我唯一能提出的建议是将参数更改为SetBrushOrgEx
。这很像半色调失败是有原因的。当我得到答案时,我会继续检查并张贴在这里。谢谢你,马克,这很有效。我使用了DrawImage的图形方法来显示位图。谢谢,这很有效。我使用了DrawImage的图形方法来显示位图。谢谢