mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 19:26:16 +00:00
sync gdiplus with wine 1.1.35
svn path=/trunk/; revision=44905
This commit is contained in:
@@ -213,6 +213,10 @@ struct GpImage{
|
||||
ImageType type;
|
||||
GUID format;
|
||||
UINT flags;
|
||||
UINT palette_flags;
|
||||
UINT palette_count;
|
||||
UINT palette_size;
|
||||
ARGB *palette_entries;
|
||||
};
|
||||
|
||||
struct GpMetafile{
|
||||
|
||||
@@ -1256,6 +1256,10 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
|
||||
|
||||
(*metafile)->image.type = ImageTypeMetafile;
|
||||
memcpy(&(*metafile)->image.format, &ImageFormatWMF, sizeof(GUID));
|
||||
(*metafile)->image.palette_flags = 0;
|
||||
(*metafile)->image.palette_count = 0;
|
||||
(*metafile)->image.palette_size = 0;
|
||||
(*metafile)->image.palette_entries = NULL;
|
||||
(*metafile)->bounds.X = ((REAL) placeable->BoundingBox.Left) / ((REAL) placeable->Inch);
|
||||
(*metafile)->bounds.Y = ((REAL) placeable->BoundingBox.Right) / ((REAL) placeable->Inch);
|
||||
(*metafile)->bounds.Width = ((REAL) (placeable->BoundingBox.Right
|
||||
@@ -4157,6 +4161,7 @@ GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region)
|
||||
/* free everything except root node and header */
|
||||
delete_element(®ion->node);
|
||||
memcpy(region, clip, sizeof(GpRegion));
|
||||
GdipFree(clip);
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
@@ -607,17 +607,73 @@ GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap* bitmap,
|
||||
GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL x, REAL y, REAL width, REAL height,
|
||||
PixelFormat format, GpBitmap* srcBitmap, GpBitmap** dstBitmap)
|
||||
{
|
||||
FIXME("(%f,%f,%f,%f,%i,%p,%p): stub\n", x, y, width, height, format, srcBitmap, dstBitmap);
|
||||
BitmapData lockeddata_src, lockeddata_dst;
|
||||
int i;
|
||||
UINT row_size;
|
||||
Rect area;
|
||||
GpStatus stat;
|
||||
|
||||
return NotImplemented;
|
||||
TRACE("(%f,%f,%f,%f,%i,%p,%p)\n", x, y, width, height, format, srcBitmap, dstBitmap);
|
||||
|
||||
if (!srcBitmap || !dstBitmap || srcBitmap->image.type != ImageTypeBitmap ||
|
||||
x < 0 || y < 0 ||
|
||||
x + width > srcBitmap->width || y + height > srcBitmap->height)
|
||||
{
|
||||
TRACE("<-- InvalidParameter\n");
|
||||
return InvalidParameter;
|
||||
}
|
||||
|
||||
if (format == PixelFormatDontCare)
|
||||
format = srcBitmap->format;
|
||||
|
||||
area.X = roundr(x);
|
||||
area.Y = roundr(y);
|
||||
area.Width = roundr(width);
|
||||
area.Height = roundr(height);
|
||||
|
||||
stat = GdipBitmapLockBits(srcBitmap, &area, ImageLockModeRead, format,
|
||||
&lockeddata_src);
|
||||
if (stat != Ok) return stat;
|
||||
|
||||
stat = GdipCreateBitmapFromScan0(lockeddata_src.Width, lockeddata_src.Height,
|
||||
0, lockeddata_src.PixelFormat, NULL, dstBitmap);
|
||||
if (stat == Ok)
|
||||
{
|
||||
stat = GdipBitmapLockBits(*dstBitmap, NULL, ImageLockModeWrite,
|
||||
lockeddata_src.PixelFormat, &lockeddata_dst);
|
||||
|
||||
if (stat == Ok)
|
||||
{
|
||||
/* copy the image data */
|
||||
row_size = (lockeddata_src.Width * PIXELFORMATBPP(lockeddata_src.PixelFormat) +7)/8;
|
||||
for (i=0; i<lockeddata_src.Height; i++)
|
||||
memcpy((BYTE*)lockeddata_dst.Scan0+lockeddata_dst.Stride*i,
|
||||
(BYTE*)lockeddata_src.Scan0+lockeddata_src.Stride*i,
|
||||
row_size);
|
||||
|
||||
GdipBitmapUnlockBits(*dstBitmap, &lockeddata_dst);
|
||||
}
|
||||
|
||||
if (stat != Ok)
|
||||
GdipDisposeImage((GpImage*)*dstBitmap);
|
||||
}
|
||||
|
||||
GdipBitmapUnlockBits(srcBitmap, &lockeddata_src);
|
||||
|
||||
if (stat != Ok)
|
||||
{
|
||||
*dstBitmap = NULL;
|
||||
}
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT x, INT y, INT width, INT height,
|
||||
PixelFormat format, GpBitmap* srcBitmap, GpBitmap** dstBitmap)
|
||||
{
|
||||
FIXME("(%i,%i,%i,%i,%i,%p,%p): stub\n", x, y, width, height, format, srcBitmap, dstBitmap);
|
||||
TRACE("(%i,%i,%i,%i,%i,%p,%p)\n", x, y, width, height, format, srcBitmap, dstBitmap);
|
||||
|
||||
return NotImplemented;
|
||||
return GdipCloneBitmapArea(x, y, width, height, format, srcBitmap, dstBitmap);
|
||||
}
|
||||
|
||||
GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
|
||||
@@ -690,12 +746,14 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
|
||||
GdipBitmapUnlockBits((GpBitmap*)*cloneImage, &lockeddata_dst);
|
||||
}
|
||||
|
||||
GdipBitmapUnlockBits(bitmap, &lockeddata_src);
|
||||
if (stat != Ok)
|
||||
GdipDisposeImage(*cloneImage);
|
||||
}
|
||||
|
||||
GdipBitmapUnlockBits(bitmap, &lockeddata_src);
|
||||
|
||||
if (stat != Ok)
|
||||
{
|
||||
GdipDisposeImage(*cloneImage);
|
||||
*cloneImage = NULL;
|
||||
}
|
||||
else memcpy(&(*cloneImage)->format, &image->format, sizeof(GUID));
|
||||
@@ -1076,6 +1134,44 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON hicon, GpBitmap** bitmap)
|
||||
return Ok;
|
||||
}
|
||||
|
||||
static void generate_halftone_palette(ARGB *entries, UINT count)
|
||||
{
|
||||
static const BYTE halftone_values[6]={0x00,0x33,0x66,0x99,0xcc,0xff};
|
||||
UINT i;
|
||||
|
||||
for (i=0; i<8 && i<count; i++)
|
||||
{
|
||||
entries[i] = 0xff000000;
|
||||
if (i&1) entries[i] |= 0x800000;
|
||||
if (i&2) entries[i] |= 0x8000;
|
||||
if (i&4) entries[i] |= 0x80;
|
||||
}
|
||||
|
||||
if (8 < count)
|
||||
entries[i] = 0xffc0c0c0;
|
||||
|
||||
for (i=9; i<16 && i<count; i++)
|
||||
{
|
||||
entries[i] = 0xff000000;
|
||||
if (i&1) entries[i] |= 0xff0000;
|
||||
if (i&2) entries[i] |= 0xff00;
|
||||
if (i&4) entries[i] |= 0xff;
|
||||
}
|
||||
|
||||
for (i=16; i<40 && i<count; i++)
|
||||
{
|
||||
entries[i] = 0;
|
||||
}
|
||||
|
||||
for (i=40; i<256 && i<count; i++)
|
||||
{
|
||||
entries[i] = 0xff000000;
|
||||
entries[i] |= halftone_values[(i-40)%6];
|
||||
entries[i] |= halftone_values[((i-40)/6)%6] << 8;
|
||||
entries[i] |= halftone_values[((i-40)/36)%6] << 16;
|
||||
}
|
||||
}
|
||||
|
||||
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride,
|
||||
PixelFormat format, BYTE* scan0, GpBitmap** bitmap)
|
||||
{
|
||||
@@ -1143,6 +1239,10 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride,
|
||||
(*bitmap)->image.type = ImageTypeBitmap;
|
||||
memcpy(&(*bitmap)->image.format, &ImageFormatMemoryBMP, sizeof(GUID));
|
||||
(*bitmap)->image.flags = ImageFlagsNone;
|
||||
(*bitmap)->image.palette_flags = 0;
|
||||
(*bitmap)->image.palette_count = 0;
|
||||
(*bitmap)->image.palette_size = 0;
|
||||
(*bitmap)->image.palette_entries = NULL;
|
||||
(*bitmap)->width = width;
|
||||
(*bitmap)->height = height;
|
||||
(*bitmap)->format = format;
|
||||
@@ -1152,6 +1252,36 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride,
|
||||
(*bitmap)->bits = bits;
|
||||
(*bitmap)->stride = dib_stride;
|
||||
|
||||
if (format == PixelFormat1bppIndexed ||
|
||||
format == PixelFormat4bppIndexed ||
|
||||
format == PixelFormat8bppIndexed)
|
||||
{
|
||||
(*bitmap)->image.palette_size = (*bitmap)->image.palette_count = 1 << PIXELFORMATBPP(format);
|
||||
(*bitmap)->image.palette_entries = GdipAlloc(sizeof(ARGB) * ((*bitmap)->image.palette_size));
|
||||
|
||||
if (!(*bitmap)->image.palette_entries)
|
||||
{
|
||||
GdipDisposeImage(&(*bitmap)->image);
|
||||
*bitmap = NULL;
|
||||
return OutOfMemory;
|
||||
}
|
||||
|
||||
if (format == PixelFormat1bppIndexed)
|
||||
{
|
||||
(*bitmap)->image.palette_flags = PaletteFlagsGrayScale;
|
||||
(*bitmap)->image.palette_entries[0] = 0xff000000;
|
||||
(*bitmap)->image.palette_entries[1] = 0xffffffff;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (format == PixelFormat8bppIndexed)
|
||||
(*bitmap)->image.palette_flags = PaletteFlagsHalftone;
|
||||
|
||||
generate_halftone_palette((*bitmap)->image.palette_entries,
|
||||
(*bitmap)->image.palette_count);
|
||||
}
|
||||
}
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
@@ -1260,6 +1390,7 @@ GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
|
||||
GdipFree(((GpBitmap*)image)->bitmapbits);
|
||||
DeleteDC(((GpBitmap*)image)->hdc);
|
||||
}
|
||||
GdipFree(image->palette_entries);
|
||||
GdipFree(image);
|
||||
|
||||
return Ok;
|
||||
@@ -1402,12 +1533,19 @@ GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage *image, REAL *res)
|
||||
|
||||
GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage *image, INT *size)
|
||||
{
|
||||
FIXME("%p %p\n", image, size);
|
||||
TRACE("%p %p\n", image, size);
|
||||
|
||||
if(!image || !size)
|
||||
return InvalidParameter;
|
||||
|
||||
return NotImplemented;
|
||||
if (image->palette_count == 0)
|
||||
*size = sizeof(ColorPalette);
|
||||
else
|
||||
*size = sizeof(UINT)*2 + sizeof(ARGB)*image->palette_count;
|
||||
|
||||
TRACE("<-- %u\n", *size);
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
/* FIXME: test this function for non-bitmap types */
|
||||
@@ -1833,6 +1971,10 @@ static GpStatus decode_image_olepicture_metafile(IStream* stream, REFCLSID clsid
|
||||
(*image)->type = ImageTypeMetafile;
|
||||
(*image)->picture = pic;
|
||||
(*image)->flags = ImageFlagsNone;
|
||||
(*image)->palette_flags = 0;
|
||||
(*image)->palette_count = 0;
|
||||
(*image)->palette_size = 0;
|
||||
(*image)->palette_entries = NULL;
|
||||
|
||||
return Ok;
|
||||
}
|
||||
@@ -2168,15 +2310,22 @@ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream,
|
||||
*/
|
||||
GpStatus WINGDIPAPI GdipGetImagePalette(GpImage *image, ColorPalette *palette, INT size)
|
||||
{
|
||||
static int calls = 0;
|
||||
TRACE("(%p,%p,%i)\n", image, palette, size);
|
||||
|
||||
if(!image)
|
||||
if (!image || !palette)
|
||||
return InvalidParameter;
|
||||
|
||||
if(!(calls++))
|
||||
FIXME("not implemented\n");
|
||||
if (size < (sizeof(UINT)*2+sizeof(ARGB)*image->palette_count))
|
||||
{
|
||||
TRACE("<-- InsufficientBuffer\n");
|
||||
return InsufficientBuffer;
|
||||
}
|
||||
|
||||
return NotImplemented;
|
||||
palette->Flags = image->palette_flags;
|
||||
palette->Count = image->palette_count;
|
||||
memcpy(palette->Entries, image->palette_entries, sizeof(ARGB)*image->palette_count);
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -2185,15 +2334,28 @@ GpStatus WINGDIPAPI GdipGetImagePalette(GpImage *image, ColorPalette *palette, I
|
||||
GpStatus WINGDIPAPI GdipSetImagePalette(GpImage *image,
|
||||
GDIPCONST ColorPalette *palette)
|
||||
{
|
||||
static int calls;
|
||||
TRACE("(%p,%p)\n", image, palette);
|
||||
|
||||
if(!image || !palette)
|
||||
if(!image || !palette || palette->Count > 256)
|
||||
return InvalidParameter;
|
||||
|
||||
if(!(calls++))
|
||||
FIXME("not implemented\n");
|
||||
if (palette->Count > image->palette_size)
|
||||
{
|
||||
ARGB *new_palette;
|
||||
|
||||
return NotImplemented;
|
||||
new_palette = GdipAlloc(sizeof(ARGB) * palette->Count);
|
||||
if (!new_palette) return OutOfMemory;
|
||||
|
||||
GdipFree(image->palette_entries);
|
||||
image->palette_entries = new_palette;
|
||||
image->palette_size = palette->Count;
|
||||
}
|
||||
|
||||
image->palette_flags = palette->Flags;
|
||||
image->palette_count = palette->Count;
|
||||
memcpy(image->palette_entries, palette->Entries, sizeof(ARGB)*palette->Count);
|
||||
|
||||
return Ok;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -2497,7 +2659,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
|
||||
BITMAP bm;
|
||||
GpStatus retval;
|
||||
PixelFormat format;
|
||||
BYTE* bits;
|
||||
BitmapData lockeddata;
|
||||
INT y;
|
||||
|
||||
TRACE("%p %p %p\n", hbm, hpal, bitmap);
|
||||
|
||||
@@ -2538,16 +2701,75 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi
|
||||
return InvalidParameter;
|
||||
}
|
||||
|
||||
if (bm.bmBits)
|
||||
bits = (BYTE*)bm.bmBits + (bm.bmHeight - 1) * bm.bmWidthBytes;
|
||||
else
|
||||
{
|
||||
FIXME("can only get image data from DIB sections\n");
|
||||
bits = NULL;
|
||||
}
|
||||
retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, 0,
|
||||
format, NULL, bitmap);
|
||||
|
||||
retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, -bm.bmWidthBytes,
|
||||
format, bits, bitmap);
|
||||
if (retval == Ok)
|
||||
{
|
||||
retval = GdipBitmapLockBits(*bitmap, NULL, ImageLockModeWrite,
|
||||
format, &lockeddata);
|
||||
if (retval == Ok)
|
||||
{
|
||||
if (bm.bmBits)
|
||||
{
|
||||
for (y=0; y<bm.bmHeight; y++)
|
||||
{
|
||||
memcpy((BYTE*)lockeddata.Scan0+lockeddata.Stride*y,
|
||||
(BYTE*)bm.bmBits+bm.bmWidthBytes*(bm.bmHeight-1-y),
|
||||
bm.bmWidthBytes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
HDC hdc;
|
||||
HBITMAP oldhbm;
|
||||
BITMAPINFO *pbmi;
|
||||
INT src_height, dst_stride;
|
||||
BYTE *dst_bits;
|
||||
|
||||
hdc = CreateCompatibleDC(NULL);
|
||||
oldhbm = SelectObject(hdc, hbm);
|
||||
|
||||
pbmi = GdipAlloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD));
|
||||
|
||||
if (pbmi)
|
||||
{
|
||||
pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
pbmi->bmiHeader.biBitCount = 0;
|
||||
|
||||
GetDIBits(hdc, hbm, 0, 0, NULL, pbmi, DIB_RGB_COLORS);
|
||||
|
||||
src_height = abs(pbmi->bmiHeader.biHeight);
|
||||
|
||||
if (pbmi->bmiHeader.biHeight > 0)
|
||||
{
|
||||
dst_bits = (BYTE*)lockeddata.Scan0+lockeddata.Stride*(src_height-1);
|
||||
dst_stride = -lockeddata.Stride;
|
||||
}
|
||||
else
|
||||
{
|
||||
dst_bits = lockeddata.Scan0;
|
||||
dst_stride = lockeddata.Stride;
|
||||
}
|
||||
|
||||
for (y=0; y<src_height; y++)
|
||||
{
|
||||
GetDIBits(hdc, hbm, y, 1, dst_bits+dst_stride*y,
|
||||
pbmi, DIB_RGB_COLORS);
|
||||
}
|
||||
|
||||
GdipFree(pbmi);
|
||||
}
|
||||
else
|
||||
retval = OutOfMemory;
|
||||
|
||||
SelectObject(hdc, oldhbm);
|
||||
DeleteDC(hdc);
|
||||
}
|
||||
|
||||
GdipBitmapUnlockBits(*bitmap, &lockeddata);
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -249,6 +249,7 @@ GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, Combin
|
||||
if(mode == CombineModeReplace){
|
||||
delete_element(®ion->node);
|
||||
memcpy(region, path_region, sizeof(GpRegion));
|
||||
GdipFree(path_region);
|
||||
return Ok;
|
||||
}
|
||||
|
||||
@@ -295,6 +296,7 @@ GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *region,
|
||||
if(mode == CombineModeReplace){
|
||||
delete_element(®ion->node);
|
||||
memcpy(region, rect_region, sizeof(GpRegion));
|
||||
GdipFree(rect_region);
|
||||
return Ok;
|
||||
}
|
||||
|
||||
|
||||
@@ -291,6 +291,13 @@ enum HotkeyPrefix
|
||||
HotkeyPrefixHide = 2
|
||||
};
|
||||
|
||||
enum PaletteFlags
|
||||
{
|
||||
PaletteFlagsHasAlpha = 1,
|
||||
PaletteFlagsGrayScale = 2,
|
||||
PaletteFlagsHalftone = 4
|
||||
};
|
||||
|
||||
enum ImageCodecFlags
|
||||
{
|
||||
ImageCodecFlagsEncoder = 1,
|
||||
@@ -455,6 +462,7 @@ typedef enum FontStyle FontStyle;
|
||||
typedef enum StringFormatFlags StringFormatFlags;
|
||||
typedef enum HotkeyPrefix HotkeyPrefix;
|
||||
typedef enum PenAlignment GpPenAlignment;
|
||||
typedef enum PaletteFlags PaletteFlags;
|
||||
typedef enum ImageCodecFlags ImageCodecFlags;
|
||||
typedef enum CombineMode CombineMode;
|
||||
typedef enum FlushIntention FlushIntention;
|
||||
|
||||
@@ -45,6 +45,7 @@ GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);
|
||||
GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,
|
||||
PixelFormat,BitmapData*);
|
||||
GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);
|
||||
GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);
|
||||
GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);
|
||||
GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);
|
||||
GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);
|
||||
@@ -62,24 +63,35 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
|
||||
GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
|
||||
GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
|
||||
GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);
|
||||
GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,const VOID*,const UINT);
|
||||
|
||||
/* Brush */
|
||||
GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
|
||||
GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
|
||||
GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
|
||||
|
||||
/* CachedBitmap */
|
||||
GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,
|
||||
GpCachedBitmap**);
|
||||
GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);
|
||||
GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);
|
||||
|
||||
/* CustomLineCap */
|
||||
GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);
|
||||
GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,
|
||||
GpCustomLineCap**);
|
||||
GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);
|
||||
GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);
|
||||
GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,
|
||||
GpLineCap);
|
||||
GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
|
||||
GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
|
||||
|
||||
/* Font */
|
||||
GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);
|
||||
@@ -104,6 +116,8 @@ GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);
|
||||
GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);
|
||||
GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);
|
||||
GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*);
|
||||
GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,
|
||||
GDIPCONST void*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*);
|
||||
GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT,
|
||||
GpFontFamily*[], INT*);
|
||||
@@ -134,6 +148,7 @@ GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);
|
||||
GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);
|
||||
GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);
|
||||
GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);
|
||||
HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);
|
||||
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *);
|
||||
GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
|
||||
GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
|
||||
@@ -151,6 +166,8 @@ GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,RE
|
||||
GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
|
||||
GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
|
||||
GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
|
||||
GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
|
||||
GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);
|
||||
GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
|
||||
GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);
|
||||
GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);
|
||||
@@ -217,6 +234,8 @@ GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
|
||||
GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
|
||||
GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);
|
||||
GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);
|
||||
GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
|
||||
GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
|
||||
GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);
|
||||
@@ -238,9 +257,17 @@ GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);
|
||||
GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*,
|
||||
INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT,
|
||||
GpRegion**);
|
||||
GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
|
||||
GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);
|
||||
GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,
|
||||
GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);
|
||||
GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,
|
||||
GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
|
||||
GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,
|
||||
GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
|
||||
GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,
|
||||
MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
|
||||
GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);
|
||||
GpStatus WINGDIPAPI GdipResetClip(GpGraphics*);
|
||||
GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);
|
||||
@@ -249,6 +276,7 @@ GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
|
||||
GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
|
||||
GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);
|
||||
GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
|
||||
GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
|
||||
GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
|
||||
@@ -259,6 +287,7 @@ GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
|
||||
GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
|
||||
GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
|
||||
GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);
|
||||
GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
|
||||
GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);
|
||||
GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);
|
||||
@@ -336,6 +365,15 @@ GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);
|
||||
GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);
|
||||
GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);
|
||||
GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);
|
||||
GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,
|
||||
REAL,REAL,REAL,WarpMode,REAL);
|
||||
GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);
|
||||
|
||||
/* HatchBrush */
|
||||
GpStatus WINGDIPAPI GdipCreateHatchBrush(HatchStyle,ARGB,ARGB,GpHatch**);
|
||||
GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);
|
||||
GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);
|
||||
GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,HatchStyle*);
|
||||
|
||||
/* Image */
|
||||
GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**);
|
||||
@@ -352,6 +390,7 @@ GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
|
||||
GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);
|
||||
GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);
|
||||
GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);
|
||||
GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);
|
||||
GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
|
||||
@@ -363,6 +402,7 @@ GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
|
||||
GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
|
||||
GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
|
||||
GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);
|
||||
GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);
|
||||
GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
|
||||
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);
|
||||
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);
|
||||
@@ -382,11 +422,27 @@ GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);
|
||||
/* ImageAttributes */
|
||||
GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
|
||||
GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,
|
||||
BOOL);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,ARGB,ARGB);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,
|
||||
ColorMatrixFlags);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,ColorChannelFlags);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(
|
||||
GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,
|
||||
ColorAdjustType,BOOL,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,
|
||||
ColorAdjustType);
|
||||
GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,
|
||||
ARGB,BOOL);
|
||||
|
||||
@@ -412,11 +468,22 @@ GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,
|
||||
GDIPCONST REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);
|
||||
GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,
|
||||
GDIPCONST REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);
|
||||
GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);
|
||||
GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,
|
||||
GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);
|
||||
GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);
|
||||
GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);
|
||||
GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);
|
||||
GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);
|
||||
GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,
|
||||
GpMatrixOrder);
|
||||
|
||||
/* Matrix */
|
||||
GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);
|
||||
@@ -462,6 +529,10 @@ GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader
|
||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
|
||||
GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*);
|
||||
|
||||
/* Notification */
|
||||
GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*);
|
||||
void WINAPI GdiplusNotificationUnhook(ULONG_PTR);
|
||||
|
||||
/* PathGradientBrush */
|
||||
GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
|
||||
GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
|
||||
@@ -475,6 +546,8 @@ GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
|
||||
GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,
|
||||
GDIPCONST ARGB*,GDIPCONST REAL*,INT);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);
|
||||
GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,
|
||||
@@ -522,6 +595,8 @@ GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
|
||||
GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
|
||||
GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
|
||||
GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
|
||||
GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
|
||||
GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
|
||||
GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
|
||||
GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
|
||||
@@ -620,9 +695,15 @@ GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,
|
||||
INT,INT,INT,INT,GpTexture**);
|
||||
GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);
|
||||
GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*);
|
||||
GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,
|
||||
GDIPCONST GpMatrix*,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);
|
||||
GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
|
||||
GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*);
|
||||
GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode);
|
||||
GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,
|
||||
GpMatrixOrder);
|
||||
|
||||
/* Without wrapper methods */
|
||||
GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);
|
||||
|
||||
@@ -31,6 +31,10 @@ DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0
|
||||
DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
|
||||
DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
|
||||
|
||||
DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72);
|
||||
DEFINE_GUID(FrameDimensionPage, 0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83);
|
||||
DEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15);
|
||||
|
||||
enum ImageLockMode
|
||||
{
|
||||
ImageLockModeRead = 1,
|
||||
|
||||
Reference in New Issue
Block a user