38 DPRINT1(
"Cannot change owner for non-powned hbmp\n");
55 LONG lDeltaDst, lDeltaSrc, lDeltaDstAbs;
56 ULONG Y, iSrc, iDst, cbSrc, cbDst, nWidth, nHeight, cBitsPixel;
61 nWidth = psurf->SurfObj.sizlBitmap.cx;
62 nHeight = psurf->SurfObj.sizlBitmap.cy;
65 pjDst = psurf->SurfObj.pvScan0;
67 lDeltaDst = psurf->SurfObj.lDelta;
68 lDeltaDstAbs =
labs(lDeltaDst);
72 cbDst = lDeltaDstAbs * nHeight;
73 cbSrc = lDeltaSrc * nHeight;
74 cjBits =
min(cjBits, cbSrc);
77 for (
Y = 0;
Y < nHeight;
Y++)
79 if (iSrc + lDeltaSrc > cjBits || iDst + lDeltaDstAbs > cbDst)
81 LONG lDelta =
min(cjBits - iSrc, cbDst - iDst);
116 if (iFormat < BMF_1BPP || iFormat >
BMF_PNG)
return NULL;
121 pvCompressedBits = pvBits;
133 pvCompressedBits ? 0 : cjSizeImage,
137 DPRINT1(
"SURFACE_AllocSurface failed.\n");
142 if (pvCompressedBits)
213 if ((
iFormat == 0) || (nWidth <= 0) || (nWidth >= 0x8000000) || (nHeight <= 0) ||
214 (cBitsPixel > 32) || (cPlanes > 32) || (
cjSize >= 0x100000000ULL))
216 DPRINT1(
"Invalid bitmap format! Width=%d, Height=%d, Bpp=%u, Planes=%u\n",
217 nWidth, nHeight, cBitsPixel, cPlanes);
233 DPRINT1(
"SURFACE_AllocSurface failed.\n");
296 Bpp ? Bpp : Dc->ppdev->gdiinfo.cBitsPixel,
300 DPRINT1(
"Failed to allocate a bitmap!\n");
323 PSURFACE psurf = Dc->dclevel.pSurface;
338 DPRINT1(
"Failed to allocate a bitmap!\n");
389 PalGDI = psurf->
ppal;
436 DPRINT(
"NtGdiCreateCompatibleBitmap(%p,%d,%d, bpp:%u) = \n",
464 if (psurfBmp ==
NULL)
513 LONG lDeltaDst, lDeltaSrc, lDeltaSrcAbs;
514 ULONG Y, iSrc, iDst, cbSrc, cbDst, nWidth, nHeight, cBitsPixel;
524 lDeltaSrcAbs =
labs(lDeltaSrc);
528 cbSrc = nHeight * lDeltaSrcAbs;
529 cbDst = nHeight * lDeltaDst;
533 for (
Y = 0;
Y < nHeight;
Y++)
535 if (iSrc + lDeltaSrcAbs > cbSrc || iDst + lDeltaDst >
Bytes)
548 iSrc += lDeltaSrcAbs;
586 if (pUnsafeBits ==
NULL)
642 DPRINT1(
"Invalid bitmap: iBitmapFormat = %lu, flags = 0x%lx\n",
724 if (psurfSrc ==
NULL)
783 pBitmap->bmPlanes = 1;
863 pBitmap->bmBits =
NULL;
INT APIENTRY BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer)
LONG APIENTRY NtGdiGetBitmapBits(HBITMAP hBitmap, ULONG cjBuffer, OUT OPTIONAL PBYTE pUnsafeBits)
LONG FASTCALL UnsafeGetBitmapBits(PSURFACE psurf, DWORD Bytes, OUT PBYTE pvBits)
HBITMAP FASTCALL IntCreateCompatibleBitmap(PDC Dc, INT Width, INT Height, UINT Planes, UINT Bpp)
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)
BOOL APIENTRY NtGdiGetBitmapDimension(HBITMAP hBitmap, LPSIZE psizDim)
HBITMAP FASTCALL BITMAP_CopyBitmap(HBITMAP hBitmap)
BOOL NTAPI GreSetBitmapOwner(_In_ HBITMAP hbmp, _In_ ULONG ulOwner)
HDC APIENTRY NtGdiGetDCforBitmap(IN HBITMAP hsurf)
HBITMAP APIENTRY NtGdiCreateBitmap(IN INT nWidth, IN INT nHeight, IN UINT cPlanes, IN UINT cBitsPixel, IN OPTIONAL LPBYTE pUnsafeBits)
HBITMAP NTAPI GreCreateBitmap(_In_ ULONG nWidth, _In_ ULONG nHeight, _In_ ULONG cPlanes, _In_ ULONG cBitsPixel, _In_opt_ PVOID pvBits)
BOOL NTAPI GreGetBitmapDimension(_In_ HBITMAP hBitmap, _Out_ LPSIZE psizDim)
BOOL APIENTRY NtGdiSetBitmapDimension(HBITMAP hBitmap, INT Width, INT Height, LPSIZE Size)
LONG NTAPI UnsafeSetBitmapBits(_Inout_ PSURFACE psurf, _In_ ULONG cjBits, _In_ const VOID *pvBits)
LONG APIENTRY NtGdiSetBitmapBits(HBITMAP hBitmap, DWORD Bytes, IN PBYTE pUnsafeBits)
HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(HDC hDC, INT Width, INT Height)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
_Notnull_ PSURFACE psurfDefaultBitmap
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
VOID DecompressBitmap(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta, ULONG iFormat, ULONG cjSizeImage)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
#define GDI_HANDLE_GET_TYPE(h)
#define GDI_HANDLE_IS_STOCKOBJ(h)
@ GDILoObjType_LO_BITMAP_TYPE
GLenum GLuint GLenum GLsizei const GLchar * buf
_Check_return_ long __cdecl labs(_In_ long x)
#define EXCEPTION_EXECUTE_HANDLER
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetStockObject(_In_ INT iObject)
#define GDI_OBJ_HMGR_POWNED
#define GDI_OBJ_HMGR_PUBLIC
#define GDI_OBJ_HMGR_NONE
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
PULONG MinorVersion OPTIONAL
PALETTEENTRY * IndexedColors
struct _PALETTE *const ppal
BITMAPINFOHEADER bmiHeader
#define WIDTH_BYTES_ALIGN32(cx, bpp)
#define WIDTH_BYTES_ALIGN16(cx, bpp)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
UCHAR gajBitsPerFormat[11]
ULONG FASTCALL BitmapFormat(ULONG cBits, ULONG iCompression)
PSURFACE NTAPI SURFACE_AllocSurface(_In_ USHORT iType, _In_ ULONG cx, _In_ ULONG cy, _In_ ULONG iFormat, _In_ ULONG fjBitmap, _In_opt_ ULONG cjWidth, _In_opt_ ULONG cjBufSize, _In_opt_ PVOID pvBits)
#define SURFACE_ShareUnlockSurface(pBMObj)
FORCEINLINE VOID SURFACE_vSetPalette(_Inout_ PSURFACE psurf, _In_ PPALETTE ppal)
#define SURFACE_ShareLockSurface(hBMObj)
#define SURFACE_UnlockSurface(pBMObj)
#define BitsPerFormat(Format)
HBITMAP APIENTRY DIB_CreateDIBSection(PDC dc, CONST BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch)
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
ULONG NTAPI GreGetObjectOwner(HGDIOBJ hobj)
VOID NTAPI GDIOBJ_vDeleteObject(POBJ pobj)
#define PALETTE_ShareLockPalette(hpal)
#define PALETTE_ShareUnlockPalette(ppal)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
_In_ SIZEL _In_ ULONG iFormat
struct tagDIBSECTION DIBSECTION