9 #define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3) 42 colors =
max ? (1 <<
info->bmiHeader.biBitCount) :
info->bmiHeader.biClrUsed;
45 if (!colors && (
info->bmiHeader.biBitCount <= 8))
46 colors = 1 <<
info->bmiHeader.biBitCount;
81 Info->bmiHeader.biWidth *
Info->bmiHeader.biPlanes,
82 Info->bmiHeader.biBitCount) * ScanLines;
86 Ret =
Info->bmiHeader.biSizeImage;
124 *planes =
header->biPlanes;
143 if (
header->biSize ==
sizeof(BITMAPV5HEADER))
145 BITMAPV5HEADER *v5hdr = (BITMAPV5HEADER *)
header;
146 *
width = v5hdr->bV5Width;
147 *
height = v5hdr->bV5Height;
148 *planes = v5hdr->bV5Planes;
149 *
bpp = v5hdr->bV5BitCount;
150 *
compr = v5hdr->bV5Compression;
151 *
size = v5hdr->bV5SizeImage;
154 DPRINT(
"(%lu): wrong size for header\n",
header->biSize);
208 UINT ConvertedInfoSize;
229 ConvertedInfoSize, 0,
233 if (BitmapInfo != pConvertedInfo)
234 RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo);
283 if ((pbm->bmWidthBytes != 0) && (!(pbm->bmWidthBytes & 1)))
343 if (pDIBs->
dsBm.bmBitsPixel <= 8)
391 return NtGdiGetDIBitsInternal(
hDC,
hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage,
392 cjBmpScanSize, cjInfoSize);
409 WORD Planes, BitsPerPixel;
411 UINT cjBmpScanSize = 0;
439 if (pbmiConverted ==
NULL)
441 DPRINT1(
"CBM_CREATDIB needs a BITMAPINFO!\n");
448 DPRINT1(
"Invalid ColorUse: %lu\n", ColorUse);
485 DPRINT1(
"DIB_GetBitmapInfo failed!\n");
493 DPRINT1(
"Invalid compression: %lu!\n", Compression);
500 DPRINT1(
"Invalid compression: %lu!\n", Compression);
508 DPRINT1(
"Invalid ColorUse: %lu\n", ColorUse);
528 DPRINT(
"pBMI %p, Size bpp %u, dibsize %d, Conv %u, BSS %u\n",
529 Data, BitsPerPixel, DibSize, cjInfoSize, cjBmpScanSize);
551 if ((pbmiConverted !=
NULL) && (pbmiConverted !=
Data))
553 RtlFreeHeap(RtlGetProcessHeap(), 0, pbmiConverted);
573 HDC hDCc, SavehDC, nhDC;
576 HPALETTE hPal =
NULL;
585 if (lpbmi->bmiHeader.biCompression ==
BI_JPEG 586 || lpbmi->bmiHeader.biCompression ==
BI_PNG)
621 dwWidth = lpbmi->bmiHeader.biWidth;
626 cScanLines, (
void *) lpvBits, (
LPBITMAPINFO) lpbmi, fuColorUse);
664 UINT ConvertedInfoSize;
666 UINT cjBmpScanSize = 0;
670 if (!ScanLines || !lpbmi || !Bits)
751 DPRINT1(
"SetDIBitsToDevice fail to read BitMapInfo: %p or Bits: %p & Size: %u\n",
752 pConvertedInfo, Bits, cjBmpScanSize);
754 DPRINT(
"SetDIBitsToDevice Allocate Bits %u!!!\n", cjBmpScanSize);
771 cjBmpScanSize, ConvertedInfoSize,
776 if (Bits != pvSafeBits)
778 if (lpbmi != pConvertedInfo)
779 RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo);
807 UINT ConvertedInfoSize = 0;
809 UINT cjBmpScanSize = 0;
813 DPRINT(
"StretchDIBits %p : %p : %u\n", lpBits, lpBitsInfo,
iUsage);
861 DPRINT1(
"StretchDIBits fail to read BitMapInfo: %p or Bits: %p & Size: %u\n",
862 pConvertedInfo, lpBits, cjBmpScanSize);
864 DPRINT(
"StretchDIBits Allocate Bits %u!!!\n", cjBmpScanSize);
899 if (lpBitsInfo != pConvertedInfo)
900 RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo);
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectA(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define ERROR_INVALID_PARAMETER
HBITMAP WINAPI CreateDiscardableBitmap(HDC hDC, INT Width, INT Height)
GLint GLint GLsizei width
DWORD WINAPI GetBitmapAttributes(HBITMAP hbm)
HDC WINAPI GdiConvertAndCheckDC(HDC hdc)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBPP, _In_opt_ LPBYTE pjInit)
#define WIDTH_BYTES_ALIGN32(cx, bpp)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateDIBitmapInternal(_In_ HDC hdc, _In_ INT cx, _In_ INT cy, _In_ DWORD fInit, _In_reads_bytes_opt_(cjMaxBits) LPBYTE pjInit, _In_reads_bytes_opt_(cjMaxInitInfo) LPBITMAPINFO pbmi, _In_ DWORD iUsage, _In_ UINT cjMaxInitInfo, _In_ UINT cjMaxBits, _In_ FLONG f, _In_ HANDLE hcmXform)
BITMAPINFOHEADER bmiHeader
__kernel_entry W32KAPI INT APIENTRY NtGdiStretchDIBitsInternal(_In_ HDC hdc, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_reads_bytes_opt_(cjMaxBits) LPBYTE pjInit, _In_ LPBITMAPINFO pbmi, _In_ DWORD dwUsage, _In_ DWORD dwRop4, _In_ UINT cjMaxInfo, _In_ UINT cjMaxBits, _In_opt_ HANDLE hcmXform)
HBITMAP WINAPI ClearBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
INT WINAPI GetDIBits(HDC hDC, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uUsage)
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
HBITMAP WINAPI CreateBitmap(INT Width, INT Height, UINT Planes, UINT BitsPixel, CONST VOID *pUnsafeBits)
#define ERROR_INVALID_HANDLE
struct _BITMAPCOREINFO * PBITMAPCOREINFO
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
INT WINAPI SetDIBits(HDC hDC, HBITMAP hBitmap, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits, CONST BITMAPINFO *lpbmi, UINT fuColorUse)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
_In_ HFONT _Out_ PUINT Height
UINT FASTCALL DIB_BitmapMaxBitsSize(PBITMAPINFO Info, UINT ScanLines)
int WINAPI StretchDIBits(HDC hdc, int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits, CONST BITMAPINFO *lpBitsInfo, UINT iUsage, DWORD dwRop)
#define HANDLE_METADC(_RetType, _Func, dwError, hdc,...)
_In_ DWORD _In_ DWORD dwOffset
int WINAPI StartPage(_In_ HDC)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO *info, WORD coloruse, BOOL max)
BITMAPCOREHEADER bmciHeader
#define LDC_KILL_DOCUMENT
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateDIBSection(_In_ HDC hdc, _In_opt_ HANDLE hSectionApp, _In_ DWORD dwOffset, _In_reads_bytes_opt_(cjHeader) LPBITMAPINFO pbmi, _In_ DWORD iUsage, _In_ UINT cjHeader, _In_ FLONG fl, _In_ ULONG_PTR dwColorSpace, _Outptr_ PVOID *ppvBits)
static int __cdecl compr(const void *a, const void *b)
HPALETTE WINAPI SelectPalette(_In_ HDC, _In_ HPALETTE, _In_ BOOL)
__kernel_entry W32KAPI HDC APIENTRY NtGdiGetDCforBitmap(_In_ HBITMAP hsurf)
#define GDI_HANDLE_IS_STOCKOBJ(h)
HBITMAP WINAPI CreateCompatibleBitmap(HDC hDC, INT Width, INT Height)
struct tagRGBTRIPLE RGBTRIPLE
UINT WINAPI GetDIBColorTable(HDC hDC, UINT iStartIndex, UINT cEntries, RGBQUAD *pColors)
static const WCHAR dwHeight[]
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetDCObject(_In_ HDC hdc, _In_ INT itype)
#define GDI_HANDLE_GET_TYPE(h)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
VOID GdiSAPCallback(PLDC pldc)
PLDC FASTCALL GdiGetLDC(HDC hDC)
#define EXCEPTION_EXECUTE_HANDLER
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiClearBitmapAttributes(_In_ HBITMAP hbm, _In_ DWORD dwFlags)
HBITMAP WINAPI CreateDIBitmap(HDC hDC, const BITMAPINFOHEADER *Header, DWORD Init, LPCVOID Bits, const BITMAPINFO *Data, UINT ColorUse)
struct tagBITMAPCOREHEADER BITMAPCOREHEADER
HBITMAP WINAPI CreateBitmapIndirect(const BITMAP *pbm)
__kernel_entry W32KAPI INT APIENTRY NtGdiSetDIBitsToDeviceInternal(_In_ HDC hdcDest, _In_ INT xDst, _In_ INT yDst, _In_ DWORD cx, _In_ DWORD cy, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD iStartScan, _In_ DWORD cNumScan, _In_reads_bytes_(cjMaxBits) LPBYTE pInitBits, _In_reads_bytes_(cjMaxInfo) LPBITMAPINFO pbmi, _In_ DWORD iUsage, _In_ UINT cjMaxBits, _In_ UINT cjMaxInfo, _In_ BOOL bTransformCoordinates, _In_opt_ HANDLE hcmXform)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSetBitmapAttributes(_In_ HBITMAP hbm, _In_ DWORD dwFlags)
#define GDI_OBJECT_TYPE_DC
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define GDI_OBJECT_TYPE_BITMAP
GLint GLint GLsizei GLsizei height
VOID WINAPI GdiSetLastError(DWORD dwErrCode)
int WINAPI GdiGetBitmapBitsSize(BITMAPINFO *lpbmi)
BOOL WINAPI DeleteDC(_In_ HDC)
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
struct tagBITMAPCOREHEADER * PBITMAPCOREHEADER
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO _In_ UINT iUsage
int WINAPI SaveDC(_In_ HDC)
INT WINAPI SetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD Width, DWORD Height, int XSrc, int YSrc, UINT StartScan, UINT ScanLines, CONST VOID *Bits, CONST BITMAPINFO *lpbmi, UINT ColorUse)
INT WINAPI DIB_GetBitmapInfo(const BITMAPINFOHEADER *header, PLONG width, PLONG height, PWORD planes, PWORD bpp, PLONG compr, PLONG size)
#define RtlCopyMemory(Destination, Source, Length)
LPBITMAPINFO WINAPI ConvertBitmapInfo(CONST BITMAPINFO *BitmapInfo, UINT ColorSpec, UINT *BitmapInfoSize, BOOL FollowedByData)
#define _SEH2_EXCEPT(...)
BOOL WINAPI RestoreDC(_In_ HDC, _In_ int)
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
static const WCHAR dwWidth[]
BOOL WINAPI GdiValidateHandle(HGDIOBJ)
static const BYTE masks[8]