mirror of
https://github.com/reactos/wine.git
synced 2024-11-29 22:50:43 +00:00
gdi32: Get rid of the DIB_GetBitmapInfo function.
This commit is contained in:
parent
3d0f272a0d
commit
e5ce32e54d
@ -28,8 +28,7 @@
|
||||
|
||||
Most Windows API functions taking a BITMAPINFO* / BITMAPINFOHEADER* also
|
||||
accept the old "core" structures, and so must WINE.
|
||||
You can distinguish them by looking at the first member (bcSize/biSize),
|
||||
or use the internal function DIB_GetBitmapInfo.
|
||||
You can distinguish them by looking at the first member (bcSize/biSize).
|
||||
|
||||
|
||||
* The palettes are stored in different formats:
|
||||
@ -98,69 +97,34 @@ int bitmap_info_size( const BITMAPINFO * info, WORD coloruse )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* DIB_GetBitmapInfo
|
||||
*
|
||||
* Get the info from a bitmap header.
|
||||
* Return 0 for COREHEADER, 1 for INFOHEADER, -1 for error.
|
||||
*/
|
||||
int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
|
||||
LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size )
|
||||
{
|
||||
if (!header) return -1;
|
||||
if (header->biSize == sizeof(BITMAPCOREHEADER))
|
||||
{
|
||||
const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)header;
|
||||
*width = core->bcWidth;
|
||||
*height = core->bcHeight;
|
||||
*planes = core->bcPlanes;
|
||||
*bpp = core->bcBitCount;
|
||||
*compr = 0;
|
||||
*size = 0;
|
||||
return 0;
|
||||
}
|
||||
if (header->biSize >= sizeof(BITMAPINFOHEADER)) /* assume BITMAPINFOHEADER */
|
||||
{
|
||||
*width = header->biWidth;
|
||||
*height = header->biHeight;
|
||||
*planes = header->biPlanes;
|
||||
*bpp = header->biBitCount;
|
||||
*compr = header->biCompression;
|
||||
*size = header->biSizeImage;
|
||||
return 1;
|
||||
}
|
||||
ERR("(%d): unknown/wrong size for header\n", header->biSize );
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*******************************************************************************************
|
||||
* Fill out a true BITMAPINFOHEADER from a variable sized BITMAPINFOHEADER / BITMAPCOREHEADER.
|
||||
*/
|
||||
static BOOL bitmapinfoheader_from_user_bitmapinfo( BITMAPINFOHEADER *dst, const BITMAPINFOHEADER *info )
|
||||
{
|
||||
LONG width, height;
|
||||
WORD planes, bpp;
|
||||
DWORD compr, size;
|
||||
int bitmap_type = DIB_GetBitmapInfo( info, &width, &height, &planes, &bpp, &compr, &size );
|
||||
if (!info) return FALSE;
|
||||
|
||||
if (bitmap_type == -1) return FALSE;
|
||||
|
||||
if (bitmap_type == 1)
|
||||
if (info->biSize == sizeof(BITMAPCOREHEADER))
|
||||
{
|
||||
const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)info;
|
||||
dst->biWidth = core->bcWidth;
|
||||
dst->biHeight = core->bcHeight;
|
||||
dst->biPlanes = core->bcPlanes;
|
||||
dst->biBitCount = core->bcBitCount;
|
||||
dst->biCompression = BI_RGB;
|
||||
dst->biXPelsPerMeter = 0;
|
||||
dst->biYPelsPerMeter = 0;
|
||||
dst->biClrUsed = 0;
|
||||
dst->biClrImportant = 0;
|
||||
}
|
||||
else if (info->biSize >= sizeof(BITMAPINFOHEADER)) /* assume BITMAPINFOHEADER */
|
||||
{
|
||||
*dst = *info;
|
||||
}
|
||||
else
|
||||
{
|
||||
dst->biWidth = width;
|
||||
dst->biHeight = height;
|
||||
dst->biPlanes = planes;
|
||||
dst->biBitCount = bpp;
|
||||
dst->biCompression = compr;
|
||||
dst->biXPelsPerMeter = 0;
|
||||
dst->biYPelsPerMeter = 0;
|
||||
dst->biClrUsed = 0;
|
||||
dst->biClrImportant = 0;
|
||||
WARN( "(%u): unknown/wrong size for header\n", info->biSize );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
dst->biSize = sizeof(*dst);
|
||||
@ -928,11 +892,7 @@ INT WINAPI GetDIBits(
|
||||
|
||||
/* Since info may be a BITMAPCOREINFO or any of the larger BITMAPINFO structures, we'll use our
|
||||
own copy and transfer the colour info back at the end */
|
||||
if (!bitmapinfoheader_from_user_bitmapinfo( &dst_info->bmiHeader, &info->bmiHeader ))
|
||||
{
|
||||
ERR("Invalid bitmap format\n");
|
||||
return 0;
|
||||
}
|
||||
if (!bitmapinfoheader_from_user_bitmapinfo( &dst_info->bmiHeader, &info->bmiHeader )) return 0;
|
||||
dst_info->bmiHeader.biClrUsed = 0;
|
||||
dst_info->bmiHeader.biClrImportant = 0;
|
||||
|
||||
|
@ -338,8 +338,6 @@ extern void DC_UpdateXforms( DC * dc ) DECLSPEC_HIDDEN;
|
||||
|
||||
/* dib.c */
|
||||
extern int bitmap_info_size( const BITMAPINFO * info, WORD coloruse ) DECLSPEC_HIDDEN;
|
||||
extern int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
|
||||
LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size ) DECLSPEC_HIDDEN;
|
||||
extern DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bitblt_coords *src,
|
||||
const BITMAPINFO *dst_info, void *dst_bits ) DECLSPEC_HIDDEN;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user