OSDN Git Service

Fix bugs of DPI conversion.
[ffftp/ffftp.git] / misc.c
diff --git a/misc.c b/misc.c
index 7beef23..9bb301f 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -1994,7 +1994,7 @@ int CalcPixelY(int y)
        return (y * DisplayDPIY + 96 / 2) / 96;\r
 }\r
 \r
-HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator)\r
 {\r
        HBITMAP hDstBitmap;\r
        HDC hDC;\r
@@ -2003,6 +2003,8 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)
        BITMAP Bitmap;\r
        HGDIOBJ hSrcOld;\r
        HGDIOBJ hDstOld;\r
+       int Width;\r
+       int Height;\r
        hDstBitmap = NULL;\r
        if(hDC = GetDC(NULL))\r
        {\r
@@ -2012,12 +2014,18 @@ HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY)
                        {\r
                                if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0)\r
                                {\r
-                                       if(hDstBitmap = CreateCompatibleBitmap(hDC, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY)))\r
+                                       if(UnitSizeX == 0)\r
+                                               UnitSizeX = Bitmap.bmWidth;\r
+                                       if(UnitSizeY == 0)\r
+                                               UnitSizeY = Bitmap.bmHeight;\r
+                                       Width = (Bitmap.bmWidth / UnitSizeX) * ((CalcPixelX(UnitSizeX) * ScaleNumerator) / ScaleDenominator);\r
+                                       Height = (Bitmap.bmHeight / UnitSizeY) * ((CalcPixelY(UnitSizeY) * ScaleNumerator) / ScaleDenominator);\r
+                                       if(hDstBitmap = CreateCompatibleBitmap(hDC, Width, Height))\r
                                        {\r
                                                hSrcOld = SelectObject(hSrcDC, hBitmap);\r
                                                hDstOld = SelectObject(hDstDC, hDstBitmap);\r
                                                SetStretchBltMode(hDstDC, HALFTONE);\r
-                                               StretchBlt(hDstDC, 0, 0, CalcPixelX((Bitmap.bmWidth / UnitSizeX) * UnitSizeX), CalcPixelY((Bitmap.bmHeight / UnitSizeY) * UnitSizeY), hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);\r
+                                               StretchBlt(hDstDC, 0, 0, Width, Height, hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);\r
                                                SelectObject(hSrcDC, hSrcOld);\r
                                                SelectObject(hDstDC, hDstOld);\r
                                        }\r