Dmitry Timoshkov : windowscodecs: BMP decoder should always return valid image resolution.
Alexandre Julliard
julliard at winehq.org
Wed Jan 9 13:30:37 CST 2013
Module: wine
Branch: master
Commit: 8d72c2771dd134c2595c83a383b3c1fb3ab506eb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8d72c2771dd134c2595c83a383b3c1fb3ab506eb
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Jan 9 15:46:52 2013 +0800
windowscodecs: BMP decoder should always return valid image resolution.
---
dlls/windowscodecs/bmpdecode.c | 29 +++++++++++++++++++++--------
dlls/windowscodecs/tests/bmpformat.c | 2 --
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/dlls/windowscodecs/bmpdecode.c b/dlls/windowscodecs/bmpdecode.c
index e029369..d9e3a45 100644
--- a/dlls/windowscodecs/bmpdecode.c
+++ b/dlls/windowscodecs/bmpdecode.c
@@ -163,22 +163,35 @@ static HRESULT WINAPI BmpFrameDecode_GetPixelFormat(IWICBitmapFrameDecode *iface
static HRESULT BmpHeader_GetResolution(BITMAPV5HEADER *bih, double *pDpiX, double *pDpiY)
{
+ LONG resx = 0, resy = 0;
+
switch (bih->bV5Size)
{
+ default:
case sizeof(BITMAPCOREHEADER):
- *pDpiX = 96.0;
- *pDpiY = 96.0;
- return S_OK;
+ break;
+
case sizeof(BITMAPCOREHEADER2):
case sizeof(BITMAPINFOHEADER):
case sizeof(BITMAPV4HEADER):
case sizeof(BITMAPV5HEADER):
- *pDpiX = bih->bV5XPelsPerMeter * 0.0254;
- *pDpiY = bih->bV5YPelsPerMeter * 0.0254;
- return S_OK;
- default:
- return E_FAIL;
+ resx = bih->bV5XPelsPerMeter;
+ resy = bih->bV5YPelsPerMeter;
+ break;
+ }
+
+ if (!resx || !resy)
+ {
+ *pDpiX = 96.0;
+ *pDpiY = 96.0;
+ }
+ else
+ {
+ *pDpiX = resx * 0.0254;
+ *pDpiY = resy * 0.0254;
}
+
+ return S_OK;
}
static HRESULT WINAPI BmpFrameDecode_GetResolution(IWICBitmapFrameDecode *iface,
diff --git a/dlls/windowscodecs/tests/bmpformat.c b/dlls/windowscodecs/tests/bmpformat.c
index 5140577..48985b9 100644
--- a/dlls/windowscodecs/tests/bmpformat.c
+++ b/dlls/windowscodecs/tests/bmpformat.c
@@ -138,9 +138,7 @@ static void test_decode_24bpp(void)
hr = IWICBitmapFrameDecode_GetResolution(framedecode, &dpiX, &dpiY);
ok(SUCCEEDED(hr), "GetResolution failed, hr=%x\n", hr);
-todo_wine
ok(dpiX == 96.0, "expected dpiX=96.0, got %f\n", dpiX);
-todo_wine
ok(dpiY == 96.0, "expected dpiY=96.0, got %f\n", dpiY);
hr = IWICBitmapFrameDecode_GetPixelFormat(framedecode, &guidresult);
More information about the wine-cvs
mailing list