From 2d41fee2e54f9f8824f6ce9ddd924fdac1bf83be Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Wed, 1 Jul 2009 15:53:47 -0500 Subject: [PATCH] windowscodecs: simplify the BMP GetSize code and fix for top-down dibs The helper function was not as useful as I thought, and we've already ensured the bitmap header is a known size. --- dlls/windowscodecs/bmpdecode.c | 36 ++++++++++++------------------------ 1 files changed, 12 insertions(+), 24 deletions(-) diff --git a/dlls/windowscodecs/bmpdecode.c b/dlls/windowscodecs/bmpdecode.c index 46b2527..8391a1b 100644 --- a/dlls/windowscodecs/bmpdecode.c +++ b/dlls/windowscodecs/bmpdecode.c @@ -118,36 +118,24 @@ static ULONG WINAPI BmpFrameDecode_Release(IWICBitmapFrameDecode *iface) return ref; } -static HRESULT BmpHeader_GetSize(BITMAPV5HEADER *bih, UINT *puiWidth, UINT *puiHeight) -{ - switch (bih->bV5Size) - { - case sizeof(BITMAPCOREHEADER): - { - BITMAPCOREHEADER *bch = (BITMAPCOREHEADER*)bih; - *puiWidth = bch->bcWidth; - *puiHeight = bch->bcHeight; - return S_OK; - } - case sizeof(BITMAPCOREHEADER2): - case sizeof(BITMAPINFOHEADER): - case sizeof(BITMAPV4HEADER): - case sizeof(BITMAPV5HEADER): - *puiWidth = bih->bV5Width; - *puiHeight = bih->bV5Height; - return S_OK; - default: - return E_FAIL; - } -} - static HRESULT WINAPI BmpFrameDecode_GetSize(IWICBitmapFrameDecode *iface, UINT *puiWidth, UINT *puiHeight) { BmpFrameDecode *This = (BmpFrameDecode*)iface; TRACE("(%p,%p,%p)\n", iface, puiWidth, puiHeight); - return BmpHeader_GetSize(&This->bih, puiWidth, puiHeight); + if (This->bih.bV5Size == sizeof(BITMAPCOREHEADER)) + { + BITMAPCOREHEADER *bch = (BITMAPCOREHEADER*)&This->bih; + *puiWidth = bch->bcWidth; + *puiHeight = bch->bcHeight; + } + else + { + *puiWidth = This->bih.bV5Width; + *puiHeight = abs(This->bih.bV5Height); + } + return S_OK; } static HRESULT WINAPI BmpFrameDecode_GetPixelFormat(IWICBitmapFrameDecode *iface, -- 1.5.4.3