mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 22:32:57 +00:00
[WIN32K]
- Rewrite NtGdiGetDIBitsInternal, with WINE as a reference. - Get back DIB Section creation to classic BITMAPINFO. This si the beginnig of the end for all this BITMAPV5INFO stuff. It is horrible, BITMAPCOREINFO->BITMAPINFO is already made in user mode, and V4 and V5 features are not used so often. svn path=/branches/reactos-yarotows/; revision=48359
This commit is contained in:
parent
21a56a9d82
commit
5cfcef35dc
3 changed files with 525 additions and 350 deletions
|
@ -5,15 +5,16 @@
|
||||||
INT FASTCALL
|
INT FASTCALL
|
||||||
DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse);
|
DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse);
|
||||||
HBITMAP APIENTRY
|
HBITMAP APIENTRY
|
||||||
DIB_CreateDIBSection (PDC dc, CONST BITMAPV5INFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch);
|
DIB_CreateDIBSection (PDC dc, CONST BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch);
|
||||||
INT APIENTRY
|
int FASTCALL
|
||||||
DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, PLONG width, PLONG height, PWORD planes, PWORD bpp, PLONG compr, PLONG size );
|
DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
|
||||||
|
LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size );
|
||||||
INT APIENTRY
|
INT APIENTRY
|
||||||
DIB_GetDIBImageBytes (INT width, INT height, INT depth);
|
DIB_GetDIBImageBytes (INT width, INT height, INT depth);
|
||||||
INT FASTCALL
|
INT FASTCALL
|
||||||
DIB_GetDIBWidthBytes (INT width, INT depth);
|
DIB_GetDIBWidthBytes (INT width, INT depth);
|
||||||
RGBQUAD * FASTCALL
|
RGBQUAD * FASTCALL
|
||||||
DIB_MapPaletteColors(PDC dc, CONST BITMAPV5INFO* lpbmi);
|
DIB_MapPaletteColors(PDC dc, CONST BITMAPINFO* lpbmi);
|
||||||
|
|
||||||
HPALETTE FASTCALL
|
HPALETTE FASTCALL
|
||||||
BuildDIBPalette (CONST BITMAPINFO *bmi, PINT paletteType);
|
BuildDIBPalette (CONST BITMAPINFO *bmi, PINT paletteType);
|
||||||
|
|
|
@ -309,30 +309,28 @@ IntCreateCompatibleBitmap(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* A DIB section is selected in the DC */
|
/* A DIB section is selected in the DC */
|
||||||
BITMAPV5INFO bi;
|
BYTE buf[sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)] = {0};
|
||||||
PVOID Bits;
|
PVOID Bits;
|
||||||
|
BITMAPINFO* bi = (BITMAPINFO*)buf;
|
||||||
|
|
||||||
RtlZeroMemory(&bi.bmiHeader, sizeof(bi.bmiHeader));
|
bi->bmiHeader.biSize = sizeof(bi->bmiHeader);
|
||||||
bi.bmiHeader.bV5Size = sizeof(bi.bmiHeader);
|
bi->bmiHeader.biWidth = Width;
|
||||||
bi.bmiHeader.bV5Width = Width;
|
bi->bmiHeader.biHeight = Height;
|
||||||
bi.bmiHeader.bV5Height = Height;
|
bi->bmiHeader.biPlanes = dibs.dsBmih.biPlanes;
|
||||||
bi.bmiHeader.bV5Planes = dibs.dsBmih.biPlanes;
|
bi->bmiHeader.biBitCount = dibs.dsBmih.biBitCount;
|
||||||
bi.bmiHeader.bV5BitCount = dibs.dsBmih.biBitCount;
|
bi->bmiHeader.biCompression = dibs.dsBmih.biCompression;
|
||||||
bi.bmiHeader.bV5Compression = dibs.dsBmih.biCompression;
|
bi->bmiHeader.biSizeImage = 0;
|
||||||
bi.bmiHeader.bV5SizeImage = 0;
|
bi->bmiHeader.biXPelsPerMeter = dibs.dsBmih.biXPelsPerMeter;
|
||||||
bi.bmiHeader.bV5XPelsPerMeter = dibs.dsBmih.biXPelsPerMeter;
|
bi->bmiHeader.biYPelsPerMeter = dibs.dsBmih.biYPelsPerMeter;
|
||||||
bi.bmiHeader.bV5YPelsPerMeter = dibs.dsBmih.biYPelsPerMeter;
|
bi->bmiHeader.biClrUsed = dibs.dsBmih.biClrUsed;
|
||||||
bi.bmiHeader.bV5ClrUsed = dibs.dsBmih.biClrUsed;
|
bi->bmiHeader.biClrImportant = dibs.dsBmih.biClrImportant;
|
||||||
bi.bmiHeader.bV5ClrImportant = dibs.dsBmih.biClrImportant;
|
|
||||||
|
|
||||||
if (bi.bmiHeader.bV5Compression == BI_BITFIELDS)
|
if (bi->bmiHeader.biCompression == BI_BITFIELDS)
|
||||||
{
|
{
|
||||||
/* Copy the color masks */
|
/* Copy the color masks */
|
||||||
bi.bmiHeader.bV5RedMask = dibs.dsBitfields[0];
|
RtlCopyMemory(bi->bmiColors, dibs.dsBitfields, 3*sizeof(RGBQUAD));
|
||||||
bi.bmiHeader.bV5GreenMask = dibs.dsBitfields[1];
|
|
||||||
bi.bmiHeader.bV5BlueMask = dibs.dsBitfields[2];
|
|
||||||
}
|
}
|
||||||
else if (bi.bmiHeader.bV5BitCount <= 8)
|
else if (bi->bmiHeader.biBitCount <= 8)
|
||||||
{
|
{
|
||||||
/* Copy the color table */
|
/* Copy the color table */
|
||||||
UINT Index;
|
UINT Index;
|
||||||
|
@ -350,15 +348,15 @@ IntCreateCompatibleBitmap(
|
||||||
Index < 256 && Index < PalGDI->NumColors;
|
Index < 256 && Index < PalGDI->NumColors;
|
||||||
Index++)
|
Index++)
|
||||||
{
|
{
|
||||||
bi.bmiColors[Index].rgbRed = PalGDI->IndexedColors[Index].peRed;
|
bi->bmiColors[Index].rgbRed = PalGDI->IndexedColors[Index].peRed;
|
||||||
bi.bmiColors[Index].rgbGreen = PalGDI->IndexedColors[Index].peGreen;
|
bi->bmiColors[Index].rgbGreen = PalGDI->IndexedColors[Index].peGreen;
|
||||||
bi.bmiColors[Index].rgbBlue = PalGDI->IndexedColors[Index].peBlue;
|
bi->bmiColors[Index].rgbBlue = PalGDI->IndexedColors[Index].peBlue;
|
||||||
bi.bmiColors[Index].rgbReserved = 0;
|
bi->bmiColors[Index].rgbReserved = 0;
|
||||||
}
|
}
|
||||||
PALETTE_UnlockPalette(PalGDI);
|
PALETTE_UnlockPalette(PalGDI);
|
||||||
|
|
||||||
Bmp = DIB_CreateDIBSection(Dc,
|
Bmp = DIB_CreateDIBSection(Dc,
|
||||||
&bi,
|
bi,
|
||||||
DIB_RGB_COLORS,
|
DIB_RGB_COLORS,
|
||||||
&Bits,
|
&Bits,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue