我正在尝试为“SMB”文件创建预览,其中它是一种可以使用AutoCAD生成的图像,我必须将此图像加载到宽度为100和高度为100的CRect
中。
然而,这个图像具有高分辨率,并且它包含一个非常小的鱼。
创建预览时,仅显示空白区域。在其他情况下,图像的大小合理,正确显示。
我想知道如何缩放图像,我可以放大图像的中心并丢失剩下的部分,只是为了让它保持在CRect
对象的范围内。 100宽度和100高度。
以下是我目前正在使用的代码:
HBITMAP hBitmap;
hBitmap = CreateDIBitmap(pDc->m_hDC,
&EnteteSymb.BitmapInfoHeader,
(LONG)CBM_INIT,
EnteteSymb.BitmapData,
(LPBITMAPINFO)&EnteteSymb.BitmapInfoHeader,
DIB_RGB_COLORS);
CDC DCMem;
DCMem.CreateCompatibleDC(pDc);
DCMem.SelectObject(hBitmap);
int X = Rect.left + MARGES_X;
int Y = Rect.top + MARGES_Y;
int Width = Rect.right - Rect.left - ( 2 * MARGES_X );
int Height = ( Rect.bottom ) - ( Rect.top + MARGES_Y ) - 1;
pDc->StretchBlt( X, Y, Width, Height, &DCMem, 0, 0, 100, 100, SRCCOPY);
DCMem.DeleteDC();
DeleteObject(hBitmap);
答案 0 :(得分:1)
当您偏移矩形时,您必须同时更改Rect.right
和::top
,与::bottom
和OffsetRect
相同。您可以使用MoveToXY
或Rect
。
如果100
是宽度和高度int margin_x = 10;
int margin_y = 10;
CRect Rect(0, 0, 100, 100);
Rect.MoveToXY(margin_x, margin_y);
的目标矩形,请使用以下内容:
GetObject
使用source
查找BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
CRect source(0, 0, bm.bmWidth, bm.bmHeight);
矩形的维度:
source
确保destination
大于BitBlt
矩形。然后使用if(source.Width() > Rect.Width() && source.Height() > Rect.Height())
{
int x = (source.Width() - Rect.Width()) / 2;
int y = (source.Height() - Rect.Height()) / 2;
dc.BitBlt(Rect.left, Rect.top, Rect.Width(), Rect.Height(), &memdc, x, y, SRCCOPY);
}
进行一对一映射。
StretchBlt
StretchBlt
通常用于将整个图像适合目标矩形。如果您使用dc.StretchBlt(Rect.left, Rect.top, Rect.Width(), Rect.Height(),
&memdc, x, y, Rect.Width(), Rect.Height(), SRCCOPY);
,该函数将如下所示:
StretchBlt
详细了解BitBlt
和{{1}},并查看目标和源矩形的说明。