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))
|
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)
|
if (lpbi->biCompression)
|
||||||
{
|
{
|
||||||
DWORD flags = 0;
|
DWORD flags = 0;
|
||||||
|
@ -374,6 +368,8 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* BI_RGB: lpbi->biSizeImage isn't reliable */
|
||||||
|
DWORD biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
|
||||||
memcpy(whdd->lpvbits, lpBits, biSizeImage);
|
memcpy(whdd->lpvbits, lpBits, biSizeImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,6 +105,12 @@ static void test_DrawDib_sizeimage(void)
|
||||||
{ 0, 0, 0, "" },
|
{ 0, 0, 0, "" },
|
||||||
{ 0, HEIGHT, 0, "" },
|
{ 0, HEIGHT, 0, "" },
|
||||||
{ WIDTH, 0, 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;
|
HDC hdc;
|
||||||
DWORD src_dib_size, dst_dib_size;
|
DWORD src_dib_size, dst_dib_size;
|
||||||
|
|
Loading…
Reference in New Issue