7 #define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3) 40 colors =
max ? (1 <<
info->bmiHeader.biBitCount) :
info->bmiHeader.biClrUsed;
43 if (!colors && (
info->bmiHeader.biBitCount <= 8))
44 colors = 1 <<
info->bmiHeader.biBitCount;
79 Info->bmiHeader.biWidth *
Info->bmiHeader.biPlanes,
80 Info->bmiHeader.biBitCount) * ScanLines;
84 Ret =
Info->bmiHeader.biSizeImage;
122 *planes =
header->biPlanes;
141 if (
header->biSize ==
sizeof(BITMAPV5HEADER))
143 BITMAPV5HEADER *v5hdr = (BITMAPV5HEADER *)
header;
144 *
width = v5hdr->bV5Width;
145 *
height = v5hdr->bV5Height;
146 *planes = v5hdr->bV5Planes;
147 *
bpp = v5hdr->bV5BitCount;
148 *
compr = v5hdr->bV5Compression;
149 *
size = v5hdr->bV5SizeImage;
152 DPRINT(
"(%lu): wrong size for header\n",
header->biSize);
206 UINT ConvertedInfoSize;
227 ConvertedInfoSize, 0,
231 if (BitmapInfo != pConvertedInfo)
232 RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo);
281 if ((pbm->bmWidthBytes != 0) && (!(pbm->bmWidthBytes & 1)))
317 if (!Width || !Height)
341 if (pDIBs->
dsBm.bmBitsPixel <= 8)
389 return NtGdiGetDIBitsInternal(
hDC,
hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage,
390 cjBmpScanSize, cjInfoSize);
406 LONG Width, Height, Compression, DibSize;
407 WORD Planes, BitsPerPixel;
409 UINT cjBmpScanSize = 0;
437 if (pbmiConverted ==
NULL)
439 DPRINT1(
"CBM_CREATDIB needs a BITMAPINFO!\n");
446 DPRINT1(
"Invalid ColorUse: %lu\n", ColorUse);
483 DPRINT1(
"DIB_GetBitmapInfo failed!\n");
491 DPRINT1(
"Invalid compression: %lu!\n", Compression);
498 DPRINT1(
"Invalid compression: %lu!\n", Compression);
506 DPRINT1(
"Invalid ColorUse: %lu\n", ColorUse);
514 DPRINT1(
"Negative width: %li\n", Width);
519 Height =
abs(Height);
526 DPRINT(
"pBMI %p, Size bpp %u, dibsize %d, Conv %u, BSS %u\n",
527 Data, BitsPerPixel, DibSize, cjInfoSize, cjBmpScanSize);
529 if (!Width || !Height)
549 if ((pbmiConverted !=
NULL) && (pbmiConverted !=
Data))
551 RtlFreeHeap(RtlGetProcessHeap(), 0, pbmiConverted);
571 HDC hDCc, SavehDC, nhDC;
574 HPALETTE hPal =
NULL;
583 if (lpbmi->bmiHeader.biCompression ==
BI_JPEG 584 || lpbmi->bmiHeader.biCompression ==
BI_PNG)
619 dwWidth = lpbmi->bmiHeader.biWidth;
624 cScanLines, (
void *) lpvBits, (
LPBITMAPINFO) lpbmi, fuColorUse);
662 UINT ConvertedInfoSize;
664 UINT cjBmpScanSize = 0;
668 if (!ScanLines || !lpbmi || !Bits)
749 DPRINT1(
"SetDIBitsToDevice fail to read BitMapInfo: %p or Bits: %p & Size: %u\n",
750 pConvertedInfo, Bits, cjBmpScanSize);
752 DPRINT(
"SetDIBitsToDevice Allocate Bits %u!!!\n", cjBmpScanSize);
769 cjBmpScanSize, ConvertedInfoSize,
774 if (Bits != pvSafeBits)
776 if (lpbmi != pConvertedInfo)
777 RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo);
805 UINT ConvertedInfoSize = 0;
807 UINT cjBmpScanSize = 0;
811 DPRINT(
"StretchDIBits %p : %p : %u\n", lpBits, lpBitsInfo,
iUsage);
889 DPRINT1(
"StretchDIBits fail to read BitMapInfo: %p or Bits: %p & Size: %u\n",
890 pConvertedInfo, lpBits, cjBmpScanSize);
892 DPRINT(
"StretchDIBits Allocate Bits %u!!!\n", cjBmpScanSize);
909 YSrc, nSrcWidth, nSrcHeight, pvSafeBits, pConvertedInfo, (
DWORD)
iUsage, dwRop,
910 ConvertedInfoSize, cjBmpScanSize,
915 if (lpBitsInfo != pConvertedInfo)
916 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
BOOL MFDRV_StretchBlt(PHYSDEV devDst, struct bitblt_coords *dst, PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop)
_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)
BOOL EMFDRV_StretchBlt(PHYSDEV devDst, struct bitblt_coords *dst, PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
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)
#define EXCEPTION_EXECUTE_HANDLER
HPALETTE WINAPI SelectPalette(_In_ HDC, _In_ HPALETTE, _In_ BOOL)
__kernel_entry W32KAPI HDC APIENTRY NtGdiGetDCforBitmap(_In_ HBITMAP hsurf)
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)
HBITMAP WINAPI CreateDIBitmap(HDC hDC, const BITMAPINFOHEADER *Header, DWORD Init, LPCVOID Bits, const BITMAPINFO *Data, UINT ColorUse)
struct tagBITMAPCOREHEADER BITMAPCOREHEADER
#define GDI_OBJECT_TYPE_METADC
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)
#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)
HBITMAP WINAPI GdiConvertBitmapV5(HBITMAP in_format_BitMap, HBITMAP src_BitMap, INT bpp, INT unuse)
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 ERROR_CALL_NOT_IMPLEMENTED
#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]