windowscodecs: Simplify the BMP GetSize code and fix for top-down dibs.
This commit is contained in:
parent
02d0462f06
commit
07538b79cb
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue