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);
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");
284 if (0 == Width || 0 == Height)
296 Bpp ? Bpp : Dc->ppdev->gdiinfo.cBitsPixel,
300 DPRINT1(
"Failed to allocate a bitmap!\n");
323 PSURFACE psurf = Dc->dclevel.pSurface;
334 Bpp ? Bpp : dibs.
dsBm.bmBitsPixel,
384 PalGDI = psurf->
ppal;
420 if ((Width <= 0) || (Height <= 0) || ((Width * Height) > 0x3FFFFFFF))
431 DPRINT(
"NtGdiCreateCompatibleBitmap(%p,%d,%d, bpp:%u) = \n",
432 hDC, Width, Height, Dc->ppdev->gdiinfo.cBitsPixel);
459 if (psurfBmp ==
NULL)
508 LONG lDeltaDst, lDeltaSrc, lDeltaSrcAbs;
509 ULONG Y, iSrc, iDst, cbSrc, cbDst, nWidth, nHeight, cBitsPixel;
519 lDeltaSrcAbs =
labs(lDeltaSrc);
523 cbSrc = nHeight * lDeltaSrcAbs;
524 cbDst = nHeight * lDeltaDst;
528 for (
Y = 0;
Y < nHeight;
Y++)
530 if (iSrc + lDeltaSrcAbs > cbSrc || iDst + lDeltaDst >
Bytes)
543 iSrc += lDeltaSrcAbs;
581 if (pUnsafeBits ==
NULL)
637 DPRINT1(
"Invalid bitmap: iBitmapFormat = %lu, flags = 0x%lx\n",
719 if (psurfSrc ==
NULL)
778 pBitmap->bmPlanes = 1;
858 pBitmap->bmBits =
NULL;
#define ERROR_INVALID_PARAMETER
BOOL NTAPI GreSetObjectOwner(HGDIOBJ hobj, ULONG ulOwner)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
HBITMAP APIENTRY DIB_CreateDIBSection(PDC dc, CONST BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch)
FORCEINLINE PDC DC_LockDc(HDC hdc)
BITMAPINFOHEADER bmiHeader
#define WIDTH_BYTES_ALIGN32(cx, bpp)
#define SURFACE_ShareUnlockSurface(pBMObj)
INT APIENTRY BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer)
#define BitsPerFormat(Format)
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
_Notnull_ PSURFACE psurfDefaultBitmap
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetStockObject(_In_ INT iObject)
#define ERROR_INVALID_HANDLE
PALETTEENTRY * IndexedColors
struct _PALETTE *const ppal
IN PVOID IN PVOID IN USHORT IN USHORT Size
ULONG NTAPI GreGetObjectOwner(HGDIOBJ hobj)
HBITMAP FASTCALL IntCreateCompatibleBitmap(PDC Dc, INT Width, INT Height, UINT Planes, UINT Bpp)
#define SURFACE_ShareLockSurface(hBMObj)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
BOOL APIENTRY NtGdiGetBitmapDimension(HBITMAP hBitmap, LPSIZE psizDim)
GLenum GLuint GLenum GLsizei const GLchar * buf
BOOL NTAPI GreGetBitmapDimension(_In_ HBITMAP hBitmap, _Out_ LPSIZE psizDim)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define EXCEPTION_EXECUTE_HANDLER
#define GDI_HANDLE_IS_STOCKOBJ(h)
HBITMAP APIENTRY NtGdiCreateBitmap(IN INT nWidth, IN INT nHeight, IN UINT cPlanes, IN UINT cBitsPixel, IN OPTIONAL LPBYTE pUnsafeBits)
ULONG FASTCALL BitmapFormat(ULONG cBits, ULONG iCompression)
#define PALETTE_ShareLockPalette(hpal)
#define GDI_HANDLE_GET_TYPE(h)
LONG APIENTRY NtGdiGetBitmapBits(HBITMAP hBitmap, ULONG cjBuffer, OUT OPTIONAL PBYTE pUnsafeBits)
VOID NTAPI GDIOBJ_vDeleteObject(POBJ pobj)
#define _SEH2_YIELD(STMT_)
_In_ WDFCOLLECTION _In_ ULONG Index
#define WIDTH_BYTES_ALIGN16(cx, bpp)
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)
VOID DecompressBitmap(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta, ULONG iFormat, ULONG cjSizeImage)
FORCEINLINE VOID SURFACE_vSetPalette(_Inout_ PSURFACE psurf, _In_ PPALETTE ppal)
LONG APIENTRY NtGdiSetBitmapBits(HBITMAP hBitmap, DWORD Bytes, IN PBYTE pUnsafeBits)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
LONG FASTCALL UnsafeGetBitmapBits(PSURFACE psurf, DWORD Bytes, OUT PBYTE pvBits)
#define GDI_OBJ_HMGR_POWNED
_In_ SIZEL _In_ ULONG iFormat
#define SURFACE_UnlockSurface(pBMObj)
HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(HDC hDC, INT Width, INT Height)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
HBITMAP FASTCALL BITMAP_CopyBitmap(HBITMAP hBitmap)
#define PALETTE_ShareUnlockPalette(ppal)
#define GDI_OBJ_HMGR_PUBLIC
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 NTAPI GreSetBitmapOwner(_In_ HBITMAP hbmp, _In_ ULONG ulOwner)
HDC APIENTRY NtGdiGetDCforBitmap(IN HBITMAP hsurf)
#define GDI_OBJ_HMGR_NONE
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
_Check_return_ long __cdecl labs(_In_ long x)
#define _SEH2_EXCEPT(...)
struct tagDIBSECTION DIBSECTION
BOOL APIENTRY NtGdiSetBitmapDimension(HBITMAP hBitmap, INT Width, INT Height, LPSIZE Size)
LONG NTAPI UnsafeSetBitmapBits(_Inout_ PSURFACE psurf, _In_ ULONG cjBits, _In_ const VOID *pvBits)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
UCHAR gajBitsPerFormat[11]
HBITMAP NTAPI GreCreateBitmap(_In_ ULONG nWidth, _In_ ULONG nHeight, _In_ ULONG cPlanes, _In_ ULONG cBitsPixel, _In_opt_ PVOID pvBits)
PULONG MinorVersion OPTIONAL