ReactOS 0.4.17-dev-1247-ge46f4bb
dib.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define DIB_PAL_BRUSHHACK   3
 

Functions

INT FASTCALL DIB_BitmapInfoSize (const BITMAPINFO *info, WORD coloruse)
 
HBITMAP APIENTRY DIB_CreateDIBSection (PDC dc, CONST BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch)
 
int FASTCALL DIB_GetBitmapInfo (const BITMAPINFOHEADER *header, LONG *width, LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size)
 
INT APIENTRY DIB_GetDIBImageBytes (INT width, INT height, INT depth)
 
HPALETTE FASTCALL DIB_MapPaletteColors (PPALETTE ppal, CONST BITMAPINFO *lpbmi)
 
HPALETTE FASTCALL BuildDIBPalette (CONST BITMAPINFO *bmi)
 
BITMAPINFO *FASTCALL DIB_ConvertBitmapInfo (CONST BITMAPINFO *bmi, DWORD Usage)
 
VOID FASTCALL DIB_FreeConvertedBitmapInfo (BITMAPINFO *converted, BITMAPINFO *orig, DWORD Usage)
 
INT APIENTRY GreGetDIBitsInternal (HDC hDC, HBITMAP hBitmap, UINT StartScan, UINT ScanLines, LPBYTE Bits, LPBITMAPINFO Info, UINT Usage, UINT MaxBits, UINT MaxInfo)
 
HBITMAP NTAPI GreCreateDIBitmapFromPackedDIB (_In_reads_(cjPackedDIB) PVOID pvPackedDIB, _In_ UINT cjPackedDIB, _In_ ULONG uUsage)
 

Macro Definition Documentation

◆ DIB_PAL_BRUSHHACK

#define DIB_PAL_BRUSHHACK   3

Definition at line 36 of file dib.h.

Function Documentation

◆ BuildDIBPalette()

HPALETTE FASTCALL BuildDIBPalette ( CONST BITMAPINFO *  bmi)

◆ DIB_BitmapInfoSize()

INT FASTCALL DIB_BitmapInfoSize ( const BITMAPINFO *  info,
WORD  coloruse 
)

Definition at line 2161 of file dibobj.c.

2162{
2163 unsigned int colors, size, masks = 0;
2164 unsigned int colorsize;
2165
2166 colorsize = (coloruse == DIB_RGB_COLORS) ? sizeof(RGBQUAD) :
2167 (coloruse == DIB_PAL_INDICES) ? 0 :
2168 sizeof(WORD);
2169
2170 if (info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
2171 {
2172 const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)info;
2173 if (core->bcBitCount == 0)
2174 {
2175 return sizeof(BITMAPCOREHEADER);
2176 }
2177 colors = (core->bcBitCount <= 8) ? 1 << core->bcBitCount : 0;
2178 return sizeof(BITMAPCOREHEADER) + colors * colorsize;
2179 }
2180 else /* Assume BITMAPINFOHEADER */
2181 {
2182 if (info->bmiHeader.biBitCount == 0)
2183 {
2184 return info->bmiHeader.biSize;
2185 }
2186 colors = info->bmiHeader.biClrUsed;
2187 if (colors > 256) colors = 256;
2188 if (!colors && (info->bmiHeader.biBitCount <= 8))
2189 colors = 1 << info->bmiHeader.biBitCount;
2190 if (info->bmiHeader.biCompression == BI_BITFIELDS) masks = 3;
2191 size = max( info->bmiHeader.biSize, sizeof(BITMAPINFOHEADER) + masks * sizeof(DWORD) );
2192 return size + colors * colorsize;
2193 }
2194}
#define DIB_PAL_INDICES
ULONG RGBQUAD
Definition: precomp.h:49
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
if(dx< 0)
Definition: linetemp.h:194
#define BI_BITFIELDS
Definition: mmreg.h:507
static const BYTE masks[8]
Definition: dib.c:3008
#define max(a, b)
Definition: svc.c:63
#define DIB_RGB_COLORS
Definition: wingdi.h:367
struct tagBITMAPCOREHEADER BITMAPCOREHEADER

Referenced by _Success_(), GreCreateDIBitmapFromPackedDIB(), and NtGdiCreateDIBSection().

◆ DIB_ConvertBitmapInfo()

BITMAPINFO *FASTCALL DIB_ConvertBitmapInfo ( CONST BITMAPINFO *  bmi,
DWORD  Usage 
)

Definition at line 2242 of file dibobj.c.

2243{
2245 BITMAPINFO* pNewBmi ;
2246 UINT numColors = 0, ColorsSize = 0;
2247
2248 if(pbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) return (BITMAPINFO*)pbmi;
2249 if(pbmi->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) return NULL;
2250
2251 if(pbmci->bmciHeader.bcBitCount <= 8)
2252 {
2253 numColors = 1 << pbmci->bmciHeader.bcBitCount;
2254 if(Usage == DIB_PAL_COLORS)
2255 {
2256 ColorsSize = numColors * sizeof(WORD);
2257 }
2258 else
2259 {
2260 ColorsSize = numColors * sizeof(RGBQUAD);
2261 }
2262 }
2263 else if (Usage == DIB_PAL_COLORS)
2264 {
2265 /* Invalid at high-res */
2266 return NULL;
2267 }
2268
2269 pNewBmi = ExAllocatePoolWithTag(PagedPool, sizeof(BITMAPINFOHEADER) + ColorsSize, TAG_DIB);
2270 if(!pNewBmi) return NULL;
2271
2272 RtlZeroMemory(pNewBmi, sizeof(BITMAPINFOHEADER) + ColorsSize);
2273
2274 pNewBmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
2275 pNewBmi->bmiHeader.biBitCount = pbmci->bmciHeader.bcBitCount;
2276 pNewBmi->bmiHeader.biWidth = pbmci->bmciHeader.bcWidth;
2277 pNewBmi->bmiHeader.biHeight = pbmci->bmciHeader.bcHeight;
2278 pNewBmi->bmiHeader.biPlanes = pbmci->bmciHeader.bcPlanes;
2279 pNewBmi->bmiHeader.biCompression = BI_RGB ;
2281 pNewBmi->bmiHeader.biHeight,
2282 pNewBmi->bmiHeader.biBitCount);
2283 pNewBmi->bmiHeader.biClrUsed = numColors;
2284
2285 if(Usage == DIB_PAL_COLORS)
2286 {
2287 RtlCopyMemory(pNewBmi->bmiColors, pbmci->bmciColors, ColorsSize);
2288 }
2289 else
2290 {
2291 UINT i;
2292 for(i=0; i<numColors; i++)
2293 {
2294 pNewBmi->bmiColors[i].rgbRed = pbmci->bmciColors[i].rgbtRed;
2295 pNewBmi->bmiColors[i].rgbGreen = pbmci->bmciColors[i].rgbtGreen;
2296 pNewBmi->bmiColors[i].rgbBlue = pbmci->bmciColors[i].rgbtBlue;
2297 }
2298 }
2299
2300 return pNewBmi ;
2301}
INT APIENTRY DIB_GetDIBImageBytes(INT width, INT height, INT depth)
Definition: dibobj.c:2149
#define NULL
Definition: types.h:112
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:384
#define CONST
Definition: pedump.c:81
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
Definition: ntgdi.h:2808
USHORT biBitCount
Definition: precomp.h:36
ULONG biCompression
Definition: precomp.h:37
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1922
RGBQUAD bmiColors[1]
Definition: wingdi.h:1923
UCHAR rgbBlue
Definition: bootanim.c:103
UCHAR rgbRed
Definition: bootanim.c:105
UCHAR rgbGreen
Definition: bootanim.c:104
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define BI_RGB
Definition: uefivid.c:46
#define TAG_DIB
Definition: tags.h:17
#define DIB_PAL_COLORS
Definition: wingdi.h:366

Referenced by GreGetDIBitsInternal(), IntSynthesizeBitmap(), and UserLoadImage().

◆ DIB_CreateDIBSection()

HBITMAP APIENTRY DIB_CreateDIBSection ( PDC  dc,
CONST BITMAPINFO *  bmi,
UINT  usage,
LPVOID *  bits,
HANDLE  section,
DWORD  offset,
DWORD  ovr_pitch 
)

Definition at line 1908 of file dibobj.c.

1916{
1917 HBITMAP res = 0;
1918 SURFACE *bmp = NULL;
1919 void *mapBits = NULL;
1920 PPALETTE ppalDIB = NULL;
1921
1922 // Fill BITMAP32 structure with DIB data
1923 CONST BITMAPINFOHEADER *bi = &bmi->bmiHeader;
1924 INT effHeight;
1925 ULONG totalSize;
1926 BITMAP bm;
1927 //SIZEL Size;
1928 HANDLE hSecure;
1929
1930 DPRINT("format (%ld,%ld), planes %u, bpp %u, size %lu, colors %lu (%s)\n",
1931 bi->biWidth, bi->biHeight, bi->biPlanes, bi->biBitCount,
1932 bi->biSizeImage, bi->biClrUsed, usage == DIB_PAL_COLORS? "PAL" : "RGB");
1933
1934 /* CreateDIBSection should fail for compressed formats */
1935 if (bi->biCompression == BI_RLE4 || bi->biCompression == BI_RLE8)
1936 {
1937 DPRINT1("no compressed format allowed\n");
1938 return (HBITMAP)NULL;
1939 }
1940
1941 effHeight = bi->biHeight >= 0 ? bi->biHeight : -bi->biHeight;
1942 bm.bmType = 0;
1943 bm.bmWidth = bi->biWidth;
1944 bm.bmHeight = effHeight;
1945 bm.bmWidthBytes = ovr_pitch ? ovr_pitch : WIDTH_BYTES_ALIGN32(bm.bmWidth, bi->biBitCount);
1946
1947 bm.bmPlanes = bi->biPlanes;
1948 bm.bmBitsPixel = bi->biBitCount;
1949 bm.bmBits = NULL;
1950
1951 // Get storage location for DIB bits. Only use biSizeImage if it's valid and
1952 // we're dealing with a compressed bitmap. Otherwise, use width * height.
1953 totalSize = (bi->biSizeImage && (bi->biCompression != BI_RGB) && (bi->biCompression != BI_BITFIELDS))
1954 ? bi->biSizeImage : (ULONG)(bm.bmWidthBytes * effHeight);
1955
1956 if (section)
1957 {
1960 DWORD mapOffset;
1962 SIZE_T mapSize;
1963
1965 &Sbi,
1966 sizeof Sbi,
1967 0);
1968 if (!NT_SUCCESS(Status))
1969 {
1970 DPRINT1("ZwQuerySystemInformation failed (0x%lx)\n", Status);
1971 return NULL;
1972 }
1973
1974 mapOffset = offset - (offset % Sbi.AllocationGranularity);
1975 mapSize = totalSize + (offset - mapOffset);
1976
1977 SectionOffset.LowPart = mapOffset;
1978 SectionOffset.HighPart = 0;
1979
1980 Status = ZwMapViewOfSection(section,
1982 &mapBits,
1983 0,
1984 0,
1986 &mapSize,
1987 ViewShare,
1988 0,
1990 if (!NT_SUCCESS(Status))
1991 {
1992 DPRINT1("ZwMapViewOfSection failed (0x%lx)\n", Status);
1994 return NULL;
1995 }
1996
1997 if (mapBits) bm.bmBits = (char *)mapBits + (offset - mapOffset);
1998 }
1999 else if (ovr_pitch && offset)
2000 bm.bmBits = UlongToPtr(offset);
2001 else
2002 {
2003 offset = 0;
2004 bm.bmBits = EngAllocUserMem(totalSize, 0);
2005 if(!bm.bmBits)
2006 {
2007 DPRINT1("Failed to allocate memory\n");
2008 goto cleanup;
2009 }
2010 }
2011
2012// hSecure = MmSecureVirtualMemory(bm.bmBits, totalSize, PAGE_READWRITE);
2013 hSecure = (HANDLE)0x1; // HACK OF UNIMPLEMENTED KERNEL STUFF !!!!
2014
2015 // Create Device Dependent Bitmap and add DIB pointer
2016 //Size.cx = bm.bmWidth;
2017 //Size.cy = abs(bm.bmHeight);
2019 abs(bm.bmHeight),
2020 bm.bmWidthBytes,
2021 BitmapFormat(bi->biBitCount * bi->biPlanes, bi->biCompression),
2023 ((bi->biHeight < 0) ? BMF_TOPDOWN : 0),
2024 totalSize,
2025 bm.bmBits,
2026 0);
2027 if (!res)
2028 {
2029 DPRINT1("GreCreateBitmapEx failed\n");
2031 goto cleanup;
2032 }
2033 bmp = SURFACE_ShareLockSurface(res); // HACK
2034 if (NULL == bmp)
2035 {
2036 DPRINT1("SURFACE_LockSurface failed\n");
2038 goto cleanup;
2039 }
2040
2041 /* WINE NOTE: WINE makes use of a colormap, which is a color translation
2042 table between the DIB and the X physical device. Obviously,
2043 this is left out of the ReactOS implementation. Instead,
2044 we call NtGdiSetDIBColorTable. */
2045 bmp->hDIBSection = section;
2046 bmp->hSecure = hSecure;
2047 bmp->dwOffset = offset;
2048 bmp->flags = API_BITMAP;
2049 bmp->biClrImportant = bi->biClrImportant;
2050
2051 /* Create a palette for the DIB */
2052 ppalDIB = CreateDIBPalette(bmi, dc, usage);
2053
2054 // Clean up in case of errors
2055cleanup:
2056 if (!res || !bmp || !bm.bmBits || !ppalDIB)
2057 {
2058 DPRINT("Got an error res=%p, bmp=%p, bm.bmBits=%p\n", res, bmp, bm.bmBits);
2059 if (bm.bmBits)
2060 {
2061 // MmUnsecureVirtualMemory(hSecure); // FIXME: Implement this!
2062 if (section)
2063 {
2064 ZwUnmapViewOfSection(NtCurrentProcess(), mapBits);
2065 bm.bmBits = NULL;
2066 }
2067 else if (!offset)
2068 EngFreeUserMem(bm.bmBits), bm.bmBits = NULL;
2069 }
2070
2071 if (bmp)
2072 {
2074 bmp = NULL;
2075 }
2076
2077 if (res)
2078 {
2080 res = 0;
2081 }
2082
2083 if(ppalDIB)
2084 {
2086 }
2087 }
2088
2089 if (bmp)
2090 {
2091 /* If we're here, everything went fine */
2092 SURFACE_vSetPalette(bmp, ppalDIB);
2095 }
2096
2097 // Return BITMAP handle and storage location
2098 if (NULL != bm.bmBits && NULL != bits)
2099 {
2100 *bits = bm.bmBits;
2101 }
2102
2103 return res;
2104}
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
HBITMAP NTAPI GreCreateBitmapEx(_In_ ULONG nWidth, _In_ ULONG nHeight, _In_ ULONG cjWidthBytes, _In_ ULONG iFormat, _In_ USHORT fjBitmap, _In_ ULONG cjSizeImage, _In_opt_ PVOID pvBits, _In_ FLONG flags)
Definition: bitmaps.c:101
HDC dc
Definition: cylfrac.c:34
PPALETTE NTAPI CreateDIBPalette(_In_ const BITMAPINFO *pbmi, _In_ PDC pdc, _In_ ULONG iUsage)
Definition: dibobj.c:41
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
static void cleanup(void)
Definition: main.c:1335
#define BI_RLE4
Definition: precomp.h:47
#define UlongToPtr(u)
Definition: config.h:106
#define abs(i)
Definition: fconv.c:206
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
@ SystemBasicInformation
Definition: ntddk_ex.h:11
Status
Definition: gdiplustypes.h:24
GLuint res
Definition: glext.h:9613
GLintptr offset
Definition: glext.h:5920
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
BITMAP bmp
Definition: alphablend.c:62
static HBITMAP
Definition: button.c:44
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
Definition: mmfuncs.h:411
#define PAGE_READWRITE
Definition: nt_native.h:1307
#define NtCurrentProcess()
Definition: nt_native.h:1660
@ ViewShare
Definition: nt_native.h:1281
#define DPRINT
Definition: sndvol32.h:73
Definition: parser.c:56
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
LONG bmType
Definition: wingdi.h:1867
LONG bmWidthBytes
Definition: wingdi.h:1870
LPVOID bmBits
Definition: wingdi.h:1873
WORD bmPlanes
Definition: wingdi.h:1871
WORD bmBitsPixel
Definition: wingdi.h:1872
#define WIDTH_BYTES_ALIGN32(cx, bpp)
Definition: swimpl.c:16
PVOID HANDLE
Definition: typedefs.h:73
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
ULONG FASTCALL BitmapFormat(ULONG cBits, ULONG iCompression)
Definition: surface.c:39
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
FORCEINLINE VOID SURFACE_vSetPalette(_Inout_ PSURFACE psurf, _In_ PPALETTE ppal)
Definition: surface.h:136
@ API_BITMAP
Definition: surface.h:76
#define SURFACE_ShareLockSurface(hBMObj)
Definition: surface.h:91
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59
#define BMF_DONTCACHE
Definition: winddi.h:1182
ENGAPI VOID APIENTRY EngFreeUserMem(_Pre_notnull_ __drv_freesMem(UserMem) PVOID pv)
#define BMF_TOPDOWN
Definition: winddi.h:1180
#define BMF_USERMEM
Definition: winddi.h:1183
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:21
#define BMF_NOZEROINIT
Definition: winddi.h:1181
#define ERROR_NO_SYSTEM_RESOURCES
Definition: winerror.h:1276
#define BI_RLE8
Definition: wingdi.h:35

Referenced by GreGetDIBitsInternal(), IntCreateCompatibleBitmap(), and NtGdiCreateDIBSection().

◆ DIB_FreeConvertedBitmapInfo()

VOID FASTCALL DIB_FreeConvertedBitmapInfo ( BITMAPINFO *  converted,
BITMAPINFO *  orig,
DWORD  Usage 
)

Definition at line 2306 of file dibobj.c.

2307{
2308 BITMAPCOREINFO* pbmci;
2309 if(converted == orig)
2310 return;
2311
2312 if(usage == -1)
2313 {
2314 /* Caller don't want any conversion */
2315 ExFreePoolWithTag(converted, TAG_DIB);
2316 return;
2317 }
2318
2319 /* Perform inverse conversion */
2320 pbmci = (BITMAPCOREINFO*)orig;
2321
2322 ASSERT(pbmci->bmciHeader.bcSize == sizeof(BITMAPCOREHEADER));
2323 pbmci->bmciHeader.bcBitCount = converted->bmiHeader.biBitCount;
2324 pbmci->bmciHeader.bcWidth = converted->bmiHeader.biWidth;
2325 pbmci->bmciHeader.bcHeight = converted->bmiHeader.biHeight;
2326 pbmci->bmciHeader.bcPlanes = converted->bmiHeader.biPlanes;
2327
2328 if(pbmci->bmciHeader.bcBitCount <= 8)
2329 {
2330 UINT numColors = converted->bmiHeader.biClrUsed;
2331 if(!numColors) numColors = 1 << pbmci->bmciHeader.bcBitCount;
2332 if(usage == DIB_PAL_COLORS)
2333 {
2334 RtlZeroMemory(pbmci->bmciColors, ((SIZE_T)1 << pbmci->bmciHeader.bcBitCount) * sizeof(WORD));
2335 RtlCopyMemory(pbmci->bmciColors, converted->bmiColors, numColors * sizeof(WORD));
2336 }
2337 else
2338 {
2339 UINT i;
2340 RtlZeroMemory(pbmci->bmciColors, ((SIZE_T)1 << pbmci->bmciHeader.bcBitCount) * sizeof(RGBTRIPLE));
2341 for(i=0; i<numColors; i++)
2342 {
2343 pbmci->bmciColors[i].rgbtRed = converted->bmiColors[i].rgbRed;
2344 pbmci->bmciColors[i].rgbtGreen = converted->bmiColors[i].rgbGreen;
2345 pbmci->bmciColors[i].rgbtBlue = converted->bmiColors[i].rgbBlue;
2346 }
2347 }
2348 }
2349 /* Now free it, it's not needed anymore */
2350 ExFreePoolWithTag(converted, TAG_DIB);
2351}
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
BITMAPCOREHEADER bmciHeader
Definition: wingdi.h:1899
RGBTRIPLE bmciColors[1]
Definition: wingdi.h:1900
BYTE rgbtGreen
Definition: wingdi.h:1885
BYTE rgbtBlue
Definition: wingdi.h:1884
BYTE rgbtRed
Definition: wingdi.h:1886

Referenced by GreGetDIBitsInternal(), IntSynthesizeBitmap(), and UserLoadImage().

◆ DIB_GetBitmapInfo()

int FASTCALL DIB_GetBitmapInfo ( const BITMAPINFOHEADER *  header,
LONG *  width,
LONG *  height,
WORD *  planes,
WORD *  bpp,
DWORD *  compr,
DWORD *  size 
)

Definition at line 2114 of file dibobj.c.

2116{
2117 if (header->biSize == sizeof(BITMAPCOREHEADER))
2118 {
2119 const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)header;
2120 *width = core->bcWidth;
2121 *height = core->bcHeight;
2122 *planes = core->bcPlanes;
2123 *bpp = core->bcBitCount;
2124 *compr = BI_RGB;
2125 *size = 0;
2126 return 0;
2127 }
2128 if (header->biSize >= sizeof(BITMAPINFOHEADER)) /* Assume BITMAPINFOHEADER */
2129 {
2130 *width = header->biWidth;
2131 *height = header->biHeight;
2132 *planes = header->biPlanes;
2133 *bpp = header->biBitCount;
2134 *compr = header->biCompression;
2135 *size = header->biSizeImage;
2136 return 1;
2137 }
2138 DPRINT1("(%u): unknown/wrong size for header\n", header->biSize );
2139 return -1;
2140}
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
static int __cdecl compr(const void *a, const void *b)
Definition: bidi.c:640
ULONG bpp[]
Definition: xlate.c:19

Referenced by GreGetDIBitsInternal().

◆ DIB_GetDIBImageBytes()

INT APIENTRY DIB_GetDIBImageBytes ( INT  width,
INT  height,
INT  depth 
)

Definition at line 2149 of file dibobj.c.

2150{
2151 return WIDTH_BYTES_ALIGN32(width, depth) * (height < 0 ? -height : height);
2152}
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546

Referenced by DIB_ConvertBitmapInfo(), GreGetDIBitsInternal(), and IntSetDIBits().

◆ DIB_MapPaletteColors()

HPALETTE FASTCALL DIB_MapPaletteColors ( PPALETTE  ppal,
CONST BITMAPINFO *  lpbmi 
)

Definition at line 2198 of file dibobj.c.

2199{
2200 PPALETTE ppalNew;
2201 ULONG nNumColors,i;
2202 USHORT *lpIndex;
2203 HPALETTE hpal;
2204
2205 if (!(ppalDc->flFlags & PAL_INDEXED))
2206 {
2207 return NULL;
2208 }
2209
2210 nNumColors = 1 << lpbmi->bmiHeader.biBitCount;
2211 if (lpbmi->bmiHeader.biClrUsed)
2212 {
2213 nNumColors = min(nNumColors, lpbmi->bmiHeader.biClrUsed);
2214 }
2215
2216 ppalNew = PALETTE_AllocPalWithHandle(PAL_INDEXED, nNumColors, NULL, 0, 0, 0);
2217 if (ppalNew == NULL)
2218 {
2219 DPRINT1("Could not allocate palette\n");
2220 return NULL;
2221 }
2222
2223 lpIndex = (USHORT *)((PBYTE)lpbmi + lpbmi->bmiHeader.biSize);
2224
2225 for (i = 0; i < nNumColors; i++)
2226 {
2227 ULONG iColorIndex = *lpIndex % ppalDc->NumColors;
2228 ppalNew->IndexedColors[i] = ppalDc->IndexedColors[iColorIndex];
2229 lpIndex++;
2230 }
2231
2232 hpal = ppalNew->BaseObject.hHmgr;
2233 PALETTE_UnlockPalette(ppalNew);
2234
2235 return hpal;
2236}
HGDIOBJ hHmgr(VOID)
Definition: baseobj.hpp:95
#define min(a, b)
Definition: monoChain.cc:55
BYTE * PBYTE
Definition: pedump.c:66
unsigned short USHORT
Definition: pedump.c:61
BASEOBJECT BaseObject
Definition: palette.h:36
PALETTEENTRY * IndexedColors
Definition: palette.h:42
PPALETTE NTAPI PALETTE_AllocPalWithHandle(_In_ ULONG iMode, _In_ ULONG cColors, _In_opt_ const PALETTEENTRY *pEntries, _In_ FLONG flRed, _In_ FLONG flGreen, _In_ FLONG flBlue)
Definition: palette.c:212
#define PALETTE_UnlockPalette(pPalette)
Definition: palette.h:56
#define PAL_INDEXED
Definition: winddi.h:1561

◆ GreCreateDIBitmapFromPackedDIB()

HBITMAP NTAPI GreCreateDIBitmapFromPackedDIB ( _In_reads_(cjPackedDIB) PVOID  pvPackedDIB,
_In_ UINT  cjPackedDIB,
_In_ ULONG  uUsage 
)

Definition at line 1790 of file dibobj.c.

1794{
1796 PBYTE pjBits;
1797 UINT cjInfo, cjBits;
1798 HBITMAP hbm;
1799
1800 /* We only support BITMAPINFOHEADER, make sure the size is ok */
1801 if (cjPackedDIB < sizeof(BITMAPINFOHEADER))
1802 {
1803 return NULL;
1804 }
1805
1806 /* The packed DIB starts with the BITMAPINFOHEADER */
1807 pbmi = pvPackedDIB;
1808
1809 if (cjPackedDIB < pbmi->bmiHeader.biSize)
1810 {
1811 return NULL;
1812 }
1813
1814 /* Calculate the info size and make sure the packed DIB is large enough */
1815 cjInfo = DIB_BitmapInfoSize(pbmi, uUsage);
1816 if (cjPackedDIB <= cjInfo)
1817 {
1818 return NULL;
1819 }
1820
1821 /* The bitmap bits start after the header */
1822 pjBits = (PBYTE)pvPackedDIB + cjInfo;
1823 cjBits = cjPackedDIB - cjInfo;
1824
1829 pjBits,
1830 pbmi,
1831 uUsage,
1832 0,
1833 cjBits,
1834 NULL);
1835
1836 return hbm;
1837}
#define CBM_CREATDIB
INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO *info, WORD coloruse)
Definition: dibobj.c:2161
HBITMAP NTAPI GreCreateDIBitmapInternal(IN HDC hDc, IN INT cx, IN INT cy, IN DWORD fInit, IN OPTIONAL LPBYTE pjInit, IN OPTIONAL PBITMAPINFO pbmi, IN DWORD iUsage, IN FLONG fl, IN UINT cjMaxBits, IN HANDLE hcmXform)
Definition: dibobj.c:1714
_In_ HBITMAP hbm
Definition: ntgdi.h:2804
#define CBM_INIT
Definition: wingdi.h:365

Referenced by NtGdiCreateDIBBrush().

◆ GreGetDIBitsInternal()

INT APIENTRY GreGetDIBitsInternal ( HDC  hDC,
HBITMAP  hBitmap,
UINT  StartScan,
UINT  ScanLines,
LPBYTE  Bits,
LPBITMAPINFO  Info,
UINT  Usage,
UINT  MaxBits,
UINT  MaxInfo 
)

Definition at line 707 of file dibobj.c.

717{
718 BITMAPCOREINFO* pbmci = NULL;
719 PSURFACE psurf = NULL;
720 PDC pDC;
722 WORD planes, bpp;
724 USHORT i;
725 int bitmap_type;
726 RGBQUAD* rgbQuads;
727 VOID* colorPtr;
728
729 DPRINT("Entered GreGetDIBitsInternal()\n");
730
731 if ((Usage && Usage != DIB_PAL_COLORS) || !Info || !hBitmap)
732 return 0;
733
734 pDC = DC_LockDc(hDC);
735 if (pDC == NULL || pDC->dctype == DCTYPE_INFO)
736 {
737 ScanLines = 0;
738 goto done;
739 }
740
741 /* Get a pointer to the source bitmap object */
743 if (psurf == NULL)
744 {
745 ScanLines = 0;
746 goto done;
747 }
748
749 colorPtr = (LPBYTE)Info + Info->bmiHeader.biSize;
750 rgbQuads = colorPtr;
751
752 bitmap_type = DIB_GetBitmapInfo(&Info->bmiHeader,
753 &width,
754 &height,
755 &planes,
756 &bpp,
757 &compr,
758 &size);
759 if(bitmap_type == -1)
760 {
761 DPRINT1("Wrong bitmap format\n");
763 ScanLines = 0;
764 goto done;
765 }
766 else if(bitmap_type == 0)
767 {
768 /* We need a BITMAPINFO to create a DIB, but we have to fill
769 * the BITMAPCOREINFO we're provided */
770 pbmci = (BITMAPCOREINFO*)Info;
771 /* fill in the the bit count, so we can calculate the right ColorsSize during the conversion */
774 if(Info == NULL)
775 {
776 DPRINT1("Error, could not convert the BITMAPCOREINFO!\n");
777 ScanLines = 0;
778 goto done;
779 }
780 rgbQuads = Info->bmiColors;
781 }
782
783 /* Validate input:
784 - non-null Bits and negative width is an invalid combination
785 - non-null Bits and zero bpp is an invalid combination
786 - only check the rest of the input params if either bpp is non-zero or Bits are set */
787 if (Bits != NULL)
788 {
789 if ((width < 0) || (bpp == 0))
790 {
791 ScanLines = 0;
792 goto done;
793 }
794 }
795
796 if (Bits || bpp)
797 {
798 if ((height == 0 || width == 0) || (compr && compr != BI_BITFIELDS && compr != BI_RGB))
799 {
800 ScanLines = 0;
801 goto done;
802 }
803 }
804
805 Info->bmiHeader.biClrUsed = 0;
806 Info->bmiHeader.biClrImportant = 0;
807
808 /* Fill in the structure */
809 switch(bpp)
810 {
811 case 0: /* Only info */
812 Info->bmiHeader.biWidth = psurf->SurfObj.sizlBitmap.cx;
813 Info->bmiHeader.biHeight = (psurf->SurfObj.fjBitmap & BMF_TOPDOWN) ?
814 -psurf->SurfObj.sizlBitmap.cy :
815 psurf->SurfObj.sizlBitmap.cy;
816 Info->bmiHeader.biPlanes = 1;
817 Info->bmiHeader.biBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat);
818 Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes( Info->bmiHeader.biWidth,
819 Info->bmiHeader.biHeight,
820 Info->bmiHeader.biBitCount);
821 Info->bmiHeader.biCompression = (Info->bmiHeader.biBitCount == 16 || Info->bmiHeader.biBitCount == 32) ?
823 Info->bmiHeader.biXPelsPerMeter = 0;
824 Info->bmiHeader.biYPelsPerMeter = 0;
825
826 if (Info->bmiHeader.biBitCount <= 8 && Info->bmiHeader.biClrUsed == 0)
827 Info->bmiHeader.biClrUsed = 1 << Info->bmiHeader.biBitCount;
828
829 ScanLines = 1;
830 goto done;
831
832 case 1:
833 case 4:
834 case 8:
835 Info->bmiHeader.biClrUsed = 1 << bpp;
836
837 /* If the bitmap is a DIB section and has the same format as what
838 * is requested, go ahead! */
839 if((psurf->hSecure) &&
841 {
842 if(Usage == DIB_RGB_COLORS)
843 {
844 ULONG colors = min(psurf->ppal->NumColors, 256);
845 if(colors != 256) Info->bmiHeader.biClrUsed = colors;
846 for(i = 0; i < colors; i++)
847 {
848 rgbQuads[i].rgbRed = psurf->ppal->IndexedColors[i].peRed;
849 rgbQuads[i].rgbGreen = psurf->ppal->IndexedColors[i].peGreen;
850 rgbQuads[i].rgbBlue = psurf->ppal->IndexedColors[i].peBlue;
851 rgbQuads[i].rgbReserved = 0;
852 }
853 }
854 else
855 {
856 for(i = 0; i < 256; i++)
857 ((WORD*)rgbQuads)[i] = i;
858 }
859 }
860 else
861 {
862 if(Usage == DIB_PAL_COLORS)
863 {
864 for(i = 0; i < 256; i++)
865 {
866 ((WORD*)rgbQuads)[i] = i;
867 }
868 }
869 else if(bpp > 1 && bpp == BitsPerFormat(psurf->SurfObj.iBitmapFormat))
870 {
871 /* For color DDBs in native depth (mono DDBs always have
872 a black/white palette):
873 Generate the color map from the selected palette */
874 PPALETTE pDcPal = PALETTE_ShareLockPalette(pDC->dclevel.hpal);
875 if(!pDcPal)
876 {
877 ScanLines = 0 ;
878 goto done ;
879 }
880 for (i = 0; i < pDcPal->NumColors; i++)
881 {
882 rgbQuads[i].rgbRed = pDcPal->IndexedColors[i].peRed;
883 rgbQuads[i].rgbGreen = pDcPal->IndexedColors[i].peGreen;
884 rgbQuads[i].rgbBlue = pDcPal->IndexedColors[i].peBlue;
885 rgbQuads[i].rgbReserved = 0;
886 }
888 }
889 else
890 {
891 switch (bpp)
892 {
893 case 1:
894 rgbQuads[0].rgbRed = rgbQuads[0].rgbGreen = rgbQuads[0].rgbBlue = 0;
895 rgbQuads[0].rgbReserved = 0;
896 rgbQuads[1].rgbRed = rgbQuads[1].rgbGreen = rgbQuads[1].rgbBlue = 0xff;
897 rgbQuads[1].rgbReserved = 0;
898 break;
899
900 case 4:
901 /* The EGA palette is the first and last 8 colours of the default palette
902 with the innermost pair swapped */
903 RtlCopyMemory(rgbQuads, DefLogPaletteQuads, 7 * sizeof(RGBQUAD));
904 RtlCopyMemory(rgbQuads + 7, DefLogPaletteQuads + 12, 1 * sizeof(RGBQUAD));
905 RtlCopyMemory(rgbQuads + 8, DefLogPaletteQuads + 7, 1 * sizeof(RGBQUAD));
906 RtlCopyMemory(rgbQuads + 9, DefLogPaletteQuads + 13, 7 * sizeof(RGBQUAD));
907 break;
908
909 case 8:
910 {
911 INT i;
912
913 memcpy(rgbQuads, DefLogPaletteQuads, 10 * sizeof(RGBQUAD));
914 memcpy(rgbQuads + 246, DefLogPaletteQuads + 10, 10 * sizeof(RGBQUAD));
915
916 for (i = 10; i < 246; i++)
917 {
918 rgbQuads[i].rgbRed = (i & 0x07) << 5;
919 rgbQuads[i].rgbGreen = (i & 0x38) << 2;
920 rgbQuads[i].rgbBlue = i & 0xc0;
921 rgbQuads[i].rgbReserved = 0;
922 }
923 }
924 }
925 }
926 }
927 break;
928
929 case 15:
930 if (Info->bmiHeader.biCompression == BI_BITFIELDS)
931 {
932 ((PDWORD)Info->bmiColors)[0] = 0x7c00;
933 ((PDWORD)Info->bmiColors)[1] = 0x03e0;
934 ((PDWORD)Info->bmiColors)[2] = 0x001f;
935 }
936 break;
937
938 case 16:
939 if (Info->bmiHeader.biCompression == BI_BITFIELDS)
940 {
941 if (psurf->hSecure)
942 {
943 ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask;
944 ((PDWORD)Info->bmiColors)[1] = psurf->ppal->GreenMask;
945 ((PDWORD)Info->bmiColors)[2] = psurf->ppal->BlueMask;
946 }
947 else
948 {
949 ((PDWORD)Info->bmiColors)[0] = 0xf800;
950 ((PDWORD)Info->bmiColors)[1] = 0x07e0;
951 ((PDWORD)Info->bmiColors)[2] = 0x001f;
952 }
953 }
954 break;
955
956 case 24:
957 case 32:
958 if (Info->bmiHeader.biCompression == BI_BITFIELDS)
959 {
960 if (psurf->hSecure)
961 {
962 ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask;
963 ((PDWORD)Info->bmiColors)[1] = psurf->ppal->GreenMask;
964 ((PDWORD)Info->bmiColors)[2] = psurf->ppal->BlueMask;
965 }
966 else
967 {
968 ((PDWORD)Info->bmiColors)[0] = 0xff0000;
969 ((PDWORD)Info->bmiColors)[1] = 0x00ff00;
970 ((PDWORD)Info->bmiColors)[2] = 0x0000ff;
971 }
972 }
973 break;
974
975 default:
976 ScanLines = 0;
977 goto done;
978 }
979
980 Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes(width, height, bpp);
981 Info->bmiHeader.biPlanes = 1;
982
983 if(Bits && ScanLines)
984 {
985 /* Create a DIBSECTION, blt it, profit */
986 PVOID pDIBits ;
987 HBITMAP hBmpDest;
988 PSURFACE psurfDest;
989 EXLATEOBJ exlo;
990 RECT rcDest;
991 POINTL srcPoint;
992 BOOL ret ;
993 int newLines = -1;
994
995 if (StartScan >= abs(Info->bmiHeader.biHeight))
996 {
997 ScanLines = 1;
998 goto done;
999 }
1000 else
1001 {
1002 ScanLines = min(ScanLines, abs(Info->bmiHeader.biHeight) - StartScan);
1003 }
1004
1005 if (abs(Info->bmiHeader.biHeight) < psurf->SurfObj.sizlBitmap.cy)
1006 {
1007 StartScan += psurf->SurfObj.sizlBitmap.cy - abs(Info->bmiHeader.biHeight);
1008 }
1009 /* Fixup values */
1010 Info->bmiHeader.biHeight = (height < 0) ?
1011 -(LONG)ScanLines : ScanLines;
1012 /* Create the DIB */
1013 hBmpDest = DIB_CreateDIBSection(pDC, Info, Usage, &pDIBits, NULL, 0, 0);
1014 /* Restore them */
1015 Info->bmiHeader.biHeight = height;
1016
1017 if(!hBmpDest)
1018 {
1019 DPRINT1("Unable to create a DIB Section!\n");
1021 ScanLines = 0;
1022 goto done ;
1023 }
1024
1025 psurfDest = SURFACE_ShareLockSurface(hBmpDest);
1026
1027 RECTL_vSetRect(&rcDest, 0, 0, Info->bmiHeader.biWidth, ScanLines);
1028 Info->bmiHeader.biWidth = width;
1029 srcPoint.x = 0;
1030
1031 if (abs(Info->bmiHeader.biHeight) <= psurf->SurfObj.sizlBitmap.cy)
1032 {
1033 srcPoint.y = psurf->SurfObj.sizlBitmap.cy - StartScan - ScanLines;
1034 }
1035 else
1036 {
1037 /* Determine the actual number of lines copied from the */
1038 /* original bitmap. It might be different from ScanLines. */
1039 newLines = abs(Info->bmiHeader.biHeight) - psurf->SurfObj.sizlBitmap.cy;
1040 newLines = min((int)(StartScan + ScanLines - newLines), psurf->SurfObj.sizlBitmap.cy);
1041 if (newLines > 0)
1042 {
1043 srcPoint.y = psurf->SurfObj.sizlBitmap.cy - newLines;
1044 if (StartScan > psurf->SurfObj.sizlBitmap.cy)
1045 {
1046 newLines -= (StartScan - psurf->SurfObj.sizlBitmap.cy);
1047 }
1048 }
1049 else
1050 {
1051 newLines = 0;
1052 srcPoint.y = psurf->SurfObj.sizlBitmap.cy;
1053 }
1054 }
1055
1056 EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xffffff, 0xffffff, 0);
1057
1058 ret = IntEngCopyBits(&psurfDest->SurfObj,
1059 &psurf->SurfObj,
1060 NULL,
1061 &exlo.xlo,
1062 &rcDest,
1063 &srcPoint);
1064
1065 SURFACE_ShareUnlockSurface(psurfDest);
1066
1067 if(!ret)
1068 ScanLines = 0;
1069 else
1070 {
1071 RtlCopyMemory(Bits, pDIBits, DIB_GetDIBImageBytes (width, ScanLines, bpp));
1072 }
1073 /* Update if line count has changed */
1074 if (newLines != -1)
1075 {
1076 ScanLines = (UINT)newLines;
1077 }
1078 GreDeleteObject(hBmpDest);
1079 EXLATEOBJ_vCleanup(&exlo);
1080 }
1081 else
1082 {
1083 if (width < 0 || Info->bmiHeader.biSizeImage == 0)
1084 ScanLines = 0;
1085 else
1086 /* Signals success and not the actual number of scan lines*/
1087 ScanLines = 1;
1088 }
1089
1090done:
1091
1092 if (pbmci)
1094
1095 if (psurf)
1097
1098 if (pDC)
1099 DC_UnlockDc(pDC);
1100
1101 return ScanLines;
1102}
static HDC hDC
Definition: 3dtext.c:33
BOOL APIENTRY IntEngCopyBits(SURFOBJ *psoTrg, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc)
Definition: bitblt_new.c:678
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
Definition: dc.h:238
@ DCTYPE_INFO
Definition: dc.h:43
FORCEINLINE PDC DC_LockDc(HDC hdc)
Definition: dc.h:220
static const RGBQUAD DefLogPaletteQuads[20]
Definition: dibobj.c:14
BITMAPINFO *FASTCALL DIB_ConvertBitmapInfo(CONST BITMAPINFO *pbmi, DWORD Usage)
Definition: dibobj.c:2242
int FASTCALL DIB_GetBitmapInfo(const BITMAPINFOHEADER *header, LONG *width, LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size)
Definition: dibobj.c:2114
VOID FASTCALL DIB_FreeConvertedBitmapInfo(BITMAPINFO *converted, BITMAPINFO *orig, DWORD usage)
Definition: dibobj.c:2306
HBITMAP APIENTRY DIB_CreateDIBSection(PDC dc, CONST BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch)
Definition: dibobj.c:1908
static HBITMAP hBitmap
Definition: timezone.c:26
return ret
Definition: mutex.c:147
unsigned int BOOL
Definition: ntddk_ex.h:94
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
DWORD * PDWORD
Definition: pedump.c:68
long LONG
Definition: pedump.c:60
#define UINT
Definition: utils.c:29
Definition: polytest.cpp:41
Definition: dcommon.idl:28
XLATEOBJ xlo
Definition: xlateobj.h:21
ULONG NumColors
Definition: palette.h:41
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
SURFOBJ SurfObj
Definition: surface.h:8
HANDLE hSecure
Definition: surface.h:32
struct _PALETTE *const ppal
Definition: surface.h:11
USHORT fjBitmap
Definition: winddi.h:1217
SIZEL sizlBitmap
Definition: winddi.h:1209
ULONG iBitmapFormat
Definition: winddi.h:1215
unsigned char * LPBYTE
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
#define BitsPerFormat(Format)
Definition: surface.h:109
#define PALETTE_ShareLockPalette(hpal)
Definition: palette.h:57
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
Definition: rect.h:5
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
Definition: xlateobj.c:491
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)
Definition: xlateobj.c:894

Referenced by _Success_(), and IntSynthesizeDib().