Commit 16944f50 authored by Alexandre Julliard's avatar Alexandre Julliard

user32: Simplify the DIB byte width computation.

parent afa7817d
...@@ -316,29 +316,13 @@ static void *map_fileW( LPCWSTR name, LPDWORD filesize ) ...@@ -316,29 +316,13 @@ static void *map_fileW( LPCWSTR name, LPDWORD filesize )
/*********************************************************************** /***********************************************************************
* get_dib_width_bytes * get_dib_image_size
* *
* Return the width of a DIB bitmap in bytes. DIB bitmap data is 32-bit aligned. * Return the size of a DIB bitmap in bytes.
*/ */
static int get_dib_width_bytes( int width, int depth ) static int get_dib_image_size( int width, int height, int depth )
{ {
int words; return (((width * depth + 31) / 8) & ~3) * abs( height );
switch(depth)
{
case 1: words = (width + 31) / 32; break;
case 4: words = (width + 7) / 8; break;
case 8: words = (width + 3) / 4; break;
case 15:
case 16: words = (width + 1) / 2; break;
case 24: words = (width * 3 + 3)/4; break;
default:
WARN("(%d): Unsupported depth\n", depth );
/* fall through */
case 32:
words = width;
}
return 4 * words;
} }
...@@ -866,8 +850,7 @@ static HICON create_icon_from_bmi( BITMAPINFO *bmi, HMODULE module, LPCWSTR resn ...@@ -866,8 +850,7 @@ static HICON create_icon_from_bmi( BITMAPINFO *bmi, HMODULE module, LPCWSTR resn
color_bits = (const char*)bmi + size; color_bits = (const char*)bmi + size;
mask_bits = (const char*)color_bits + mask_bits = (const char*)color_bits +
get_dib_width_bytes( bmi->bmiHeader.biWidth, get_dib_image_size( bmi->bmiHeader.biWidth, bmi_copy->bmiHeader.biHeight, bmi->bmiHeader.biBitCount );
bmi->bmiHeader.biBitCount ) * abs(bmi_copy->bmiHeader.biHeight);
alpha = 0; alpha = 0;
if (monochrome) if (monochrome)
...@@ -2084,7 +2067,7 @@ static void stretch_blt_icon( HDC hdc_dst, int dst_x, int dst_y, int dst_width, ...@@ -2084,7 +2067,7 @@ static void stretch_blt_icon( HDC hdc_dst, int dst_x, int dst_y, int dst_width,
info->bmiHeader.biPlanes = GetDeviceCaps( hdc_dst, PLANES ); info->bmiHeader.biPlanes = GetDeviceCaps( hdc_dst, PLANES );
info->bmiHeader.biBitCount = GetDeviceCaps( hdc_dst, BITSPIXEL ); info->bmiHeader.biBitCount = GetDeviceCaps( hdc_dst, BITSPIXEL );
info->bmiHeader.biCompression = BI_RGB; info->bmiHeader.biCompression = BI_RGB;
info->bmiHeader.biSizeImage = height * get_dib_width_bytes( width, info->bmiHeader.biBitCount ); info->bmiHeader.biSizeImage = get_dib_image_size( width, height, info->bmiHeader.biBitCount );
info->bmiHeader.biXPelsPerMeter = 0; info->bmiHeader.biXPelsPerMeter = 0;
info->bmiHeader.biYPelsPerMeter = 0; info->bmiHeader.biYPelsPerMeter = 0;
info->bmiHeader.biClrUsed = 0; info->bmiHeader.biClrUsed = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment