msvfw32: Fix uncompressed bitmap size handling in DrawDibDraw.
This commit is contained in:
parent
47a3a0528d
commit
af089289b3
|
@ -355,12 +355,6 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
|
|||
|
||||
if (!(wFlags & DDF_UPDATE))
|
||||
{
|
||||
DWORD biSizeImage = lpbi->biSizeImage;
|
||||
|
||||
/* biSizeImage may be set to 0 for BI_RGB (uncompressed) bitmaps */
|
||||
if ((lpbi->biCompression == BI_RGB) && (biSizeImage == 0))
|
||||
biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
|
||||
|
||||
if (lpbi->biCompression)
|
||||
{
|
||||
DWORD flags = 0;
|
||||
|
@ -374,6 +368,8 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* BI_RGB: lpbi->biSizeImage isn't reliable */
|
||||
DWORD biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
|
||||
memcpy(whdd->lpvbits, lpBits, biSizeImage);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,6 +105,12 @@ static void test_DrawDib_sizeimage(void)
|
|||
{ 0, 0, 0, "" },
|
||||
{ 0, HEIGHT, 0, "" },
|
||||
{ WIDTH, 0, 0, "" },
|
||||
/* [8] zero size (to compare [9], [10] ) */
|
||||
{ WIDTH, HEIGHT/2, 0, "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
|
||||
/* [9] insufficient size */
|
||||
{ WIDTH, HEIGHT/2, sizeof(RGBQUAD), "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
|
||||
/* [10] too much size */
|
||||
{ WIDTH, HEIGHT/2, WIDTH * HEIGHT * sizeof(RGBQUAD), "8b75bf6d54a8645380114fe77505ee0699ffffaa" },
|
||||
};
|
||||
HDC hdc;
|
||||
DWORD src_dib_size, dst_dib_size;
|
||||
|
|
Loading…
Reference in New Issue