mirror of
https://github.com/reactos/reactos.git
synced 2025-06-05 17:30:32 +00:00
- implement CreateBitmapIndirect, calling NtGdicreateBitmap
- NtGdiCreateBitmap: directly do the job instead of calling IntCreateBitmapIndirect - remove IntCreateBitmapIndirect - remove NtGdiCreateBitmapIndirect - update ntgdibad.h svn path=/trunk/; revision=27851
This commit is contained in:
parent
bc4b14c9c4
commit
ca6fc5cff9
5 changed files with 42 additions and 73 deletions
|
@ -48,7 +48,7 @@ CopyEnhMetaFileW@8
|
||||||
CopyMetaFileA@8
|
CopyMetaFileA@8
|
||||||
CopyMetaFileW@8
|
CopyMetaFileW@8
|
||||||
CreateBitmap@20=NtGdiCreateBitmap@20
|
CreateBitmap@20=NtGdiCreateBitmap@20
|
||||||
CreateBitmapIndirect@4=NtGdiCreateBitmapIndirect@4
|
CreateBitmapIndirect@4
|
||||||
CreateBrushIndirect@4
|
CreateBrushIndirect@4
|
||||||
CreateColorSpaceA@4
|
CreateColorSpaceA@4
|
||||||
CreateColorSpaceW@4
|
CreateColorSpaceW@4
|
||||||
|
|
|
@ -84,3 +84,20 @@ StretchBlt(
|
||||||
return NtGdiBitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest,
|
return NtGdiBitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest,
|
||||||
nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, dwRop, 0, 0);
|
nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, dwRop, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
HBITMAP WINAPI
|
||||||
|
CreateBitmapIndirect(const BITMAP *pbm)
|
||||||
|
{
|
||||||
|
if (pbm)
|
||||||
|
{
|
||||||
|
return NtGdiCreateBitmap(pbm->bmWidth,
|
||||||
|
pbm->bmHeight,
|
||||||
|
pbm->bmPlanes,
|
||||||
|
pbm->bmBitsPixel,
|
||||||
|
pbm->bmBits);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -194,13 +194,6 @@ NtGdiCopyMetaFile (
|
||||||
LPCWSTR File
|
LPCWSTR File
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Use NtGdiCreateBitmap and expand the pbm-> */
|
|
||||||
HBITMAP
|
|
||||||
STDCALL
|
|
||||||
NtGdiCreateBitmapIndirect (
|
|
||||||
CONST BITMAP * BM
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Use NtGdiCreateDIBitmapInternal */
|
/* Use NtGdiCreateDIBitmapInternal */
|
||||||
HBITMAP
|
HBITMAP
|
||||||
STDCALL
|
STDCALL
|
||||||
|
|
|
@ -400,36 +400,42 @@ done:
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HBITMAP
|
HBITMAP STDCALL
|
||||||
IntCreateBitmapIndirect(CONST BITMAP *BM)
|
NtGdiCreateBitmap(
|
||||||
|
INT Width,
|
||||||
|
INT Height,
|
||||||
|
UINT Planes,
|
||||||
|
UINT BitsPixel,
|
||||||
|
IN OPTIONAL LPBYTE Bits)
|
||||||
{
|
{
|
||||||
PBITMAPOBJ bmp;
|
PBITMAPOBJ bmp;
|
||||||
HBITMAP hBitmap;
|
HBITMAP hBitmap;
|
||||||
SIZEL Size;
|
SIZEL Size;
|
||||||
UINT BitsPixel;
|
LONG WidthBytes;
|
||||||
|
|
||||||
/* NOTE: Windows also doesn't store nr. of planes separately! */
|
/* NOTE: Windows also doesn't store nr. of planes separately! */
|
||||||
BitsPixel = BM->bmBitsPixel * BM->bmPlanes;
|
BitsPixel = BitsPixel * Planes;
|
||||||
|
WidthBytes = BITMAPOBJ_GetWidthBytes(Width, BitsPixel);
|
||||||
|
|
||||||
/* Check parameters */
|
/* Check parameters */
|
||||||
if (0 == BM->bmHeight || 0 == BM->bmWidth)
|
if (0 == Height || 0 == Width)
|
||||||
{
|
{
|
||||||
Size.cx = Size.cy = 1;
|
Size.cx = Size.cy = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Size.cx = abs(BM->bmWidth);
|
Size.cx = abs(Width);
|
||||||
Size.cy = abs(BM->bmHeight);
|
Size.cy = abs(Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the bitmap object. */
|
/* Create the bitmap object. */
|
||||||
hBitmap = IntCreateBitmap(Size, BM->bmWidthBytes,
|
hBitmap = IntCreateBitmap(Size, WidthBytes,
|
||||||
BitmapFormat(BitsPixel, BI_RGB),
|
BitmapFormat(BitsPixel, BI_RGB),
|
||||||
(BM->bmHeight < 0 ? BMF_TOPDOWN : 0) |
|
(Height < 0 ? BMF_TOPDOWN : 0) |
|
||||||
(NULL == BM->bmBits ? 0 : BMF_NOZEROINIT), NULL);
|
(NULL == Bits ? 0 : BMF_NOZEROINIT), NULL);
|
||||||
if (!hBitmap)
|
if (!hBitmap)
|
||||||
{
|
{
|
||||||
DPRINT("NtGdiCreateBitmap: IntCreateBitmap returned 0\n");
|
DPRINT("NtGdiCreateBitmap: returned 0\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,35 +458,14 @@ IntCreateBitmapIndirect(CONST BITMAP *BM)
|
||||||
* to us it should be safe.
|
* to us it should be safe.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (NULL != BM->bmBits)
|
if (NULL != Bits)
|
||||||
{
|
{
|
||||||
NtGdiSetBitmapBits(hBitmap, bmp->SurfObj.cjBits, BM->bmBits);
|
NtGdiSetBitmapBits(hBitmap, bmp->SurfObj.cjBits, Bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hBitmap;
|
return hBitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
HBITMAP STDCALL
|
|
||||||
NtGdiCreateBitmap(
|
|
||||||
INT Width,
|
|
||||||
INT Height,
|
|
||||||
UINT Planes,
|
|
||||||
UINT BitsPixel,
|
|
||||||
IN OPTIONAL LPBYTE Bits)
|
|
||||||
{
|
|
||||||
BITMAP BM;
|
|
||||||
|
|
||||||
BM.bmType = 0;
|
|
||||||
BM.bmWidth = Width;
|
|
||||||
BM.bmHeight = Height;
|
|
||||||
BM.bmWidthBytes = BITMAPOBJ_GetWidthBytes(Width, Planes * BitsPixel);
|
|
||||||
BM.bmPlanes = Planes;
|
|
||||||
BM.bmBitsPixel = BitsPixel;
|
|
||||||
BM.bmBits = Bits;
|
|
||||||
|
|
||||||
return IntCreateBitmapIndirect(&BM);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL INTERNAL_CALL
|
BOOL INTERNAL_CALL
|
||||||
BITMAP_Cleanup(PVOID ObjectBody)
|
BITMAP_Cleanup(PVOID ObjectBody)
|
||||||
{
|
{
|
||||||
|
@ -569,35 +554,6 @@ NtGdiCreateCompatibleBitmap(
|
||||||
return Bmp;
|
return Bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
HBITMAP STDCALL
|
|
||||||
NtGdiCreateBitmapIndirect(CONST BITMAP *UnsafeBM)
|
|
||||||
{
|
|
||||||
BITMAP BM;
|
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
|
||||||
|
|
||||||
_SEH_TRY
|
|
||||||
{
|
|
||||||
ProbeForRead(UnsafeBM, sizeof(BITMAP), 1);
|
|
||||||
BM = *UnsafeBM;
|
|
||||||
if (NULL != BM.bmBits)
|
|
||||||
{
|
|
||||||
ProbeForRead(BM.bmBits, BM.bmWidthBytes * abs(BM.bmHeight), 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_SEH_HANDLE
|
|
||||||
{
|
|
||||||
Status = _SEH_GetExceptionCode();
|
|
||||||
}
|
|
||||||
_SEH_END;
|
|
||||||
if(!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
SetLastNtError(Status);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return IntCreateBitmapIndirect(&BM);
|
|
||||||
}
|
|
||||||
|
|
||||||
HBITMAP STDCALL
|
HBITMAP STDCALL
|
||||||
NtGdiCreateDiscardableBitmap(
|
NtGdiCreateDiscardableBitmap(
|
||||||
HDC hDC,
|
HDC hDC,
|
||||||
|
@ -1546,7 +1502,11 @@ BITMAPOBJ_CopyBitmap(HBITMAP hBitmap)
|
||||||
if (Bitmap->SurfObj.lDelta >= 0)
|
if (Bitmap->SurfObj.lDelta >= 0)
|
||||||
bm.bmHeight = -bm.bmHeight;
|
bm.bmHeight = -bm.bmHeight;
|
||||||
|
|
||||||
res = IntCreateBitmapIndirect(&bm);
|
res = NtGdiCreateBitmap(bm.bmWidth,
|
||||||
|
bm.bmHeight,
|
||||||
|
bm.bmPlanes,
|
||||||
|
bm.bmBitsPixel,
|
||||||
|
bm.bmBits);
|
||||||
if(res)
|
if(res)
|
||||||
{
|
{
|
||||||
PBYTE buf;
|
PBYTE buf;
|
||||||
|
|
|
@ -21,7 +21,6 @@ NtGdiCombineTransform 3
|
||||||
NtGdiCopyEnhMetaFile 2
|
NtGdiCopyEnhMetaFile 2
|
||||||
NtGdiCopyMetaFile 2
|
NtGdiCopyMetaFile 2
|
||||||
NtGdiCreateBitmap 5
|
NtGdiCreateBitmap 5
|
||||||
NtGdiCreateBitmapIndirect 1
|
|
||||||
NtGdiCreateColorSpace 1
|
NtGdiCreateColorSpace 1
|
||||||
NtGdiCreateCompatibleBitmap 3
|
NtGdiCreateCompatibleBitmap 3
|
||||||
NtGdiCreateCompatibleDC 1
|
NtGdiCreateCompatibleDC 1
|
||||||
|
|
Loading…
Reference in a new issue