将位图大小与96DPI

时间:2015-05-04 16:00:32

标签: visual-studio bitmap mfc dpi

我正在为我的MFC应用程序创建位图。我的桌面设置为96dpi,我正在尝试填充29x25位图按钮。我们使用的示例位图大小为42x40。当叠加在我们的按钮上时,图像看起来不像我期望的那样清晰明快。

举个例子,这是我正在使用的代码:

CBitmapButton::DrawItem(lpDIS);

CDC *dcMem, *pdcBmp;
// Get the DC for the Base Bitmap
dcMem = CDC::FromHandle(lpDIS->hDC);
pdcBmp = new CDC();
pdcBmp->CreateCompatibleDC(dcMem);
DrawOverlay(&selectedBmp, pdcBmp, dcMem);  //selected bmp is a class variable

void OverlayButton::DrawOverlay(CBitmap *bmp, CDC *pdcBmp, CDC *dcMem)
{
    BITMAP bitmapInfo;
    bmp->GetBitmap(&bitmapInfo);
    pdcBmp->SelectObject(bmp);
    dcMem->TransparentBlt(0, 0, bitmapInfo.bmWidth, bitmapInfo.bmHeight,
    pdcBmp, 0, 0, bitmapInfo.bmWidth, bitmapInfo.bmHeight,
    RGB(192, 192, 192));
}

所以我的问题是: 我如何确定位图或按钮的正确大小以适应位图而不拉伸并可能丢失细节?

如果我有一个32x32位图,那么它与那些具有96dpi的VS中的窗口单位相对应?

1 个答案:

答案 0 :(得分:0)

DPI是每英寸的点数。每个点都是一个像素。它只是让您知道您可以看到的每英寸像素数。因此,32x32位图将是屏幕上1/3英寸的1/3英寸。这与你的问题无关。

“我正在尝试填充29x25位图按钮。我们使用的示例位图大小为42x40。”

这是你问题的根源。如果您有一个带有位图图像的29x25像素按钮,请为该图像使用29x25像素位图。使用42x40甚至不是正确的宽高比。我并不感到惊讶它看起来是扭曲的。

您最好的选择是精确匹配像素大小或更多功率。所以,58x50或116x100,但29x25将为您提供您想要的。

使其适合按钮,将目的地设置为按钮的宽度和高度。但是,听起来你已经使按钮尺寸合适了。我只是好奇你如何设置大小。您是否使用代码来设置像素大小,还是使用了GUI中的其他“大小”?

dcMem->TransparentBlt(0, 0, button.width, button.height, pdcBmp, 0, 0, bitmapInfo.bmWidth, bitmapInfo.bmHeight, ...