|
Packit |
a4058c |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
|
Packit |
a4058c |
/* GdkPixbuf library - Win32 GDI+ Pixbuf Loader
|
|
Packit |
a4058c |
*
|
|
Packit |
a4058c |
* Copyright (C) 2007 Google (Evan Stade)
|
|
Packit |
a4058c |
* Copyright (C) 2008 Alberto Ruiz <aruiz@gnome.org>
|
|
Packit |
a4058c |
*
|
|
Packit |
a4058c |
* This library is free software; you can redistribute it and/or
|
|
Packit |
a4058c |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
a4058c |
* License as published by the Free Software Foundation; either
|
|
Packit |
a4058c |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
a4058c |
*
|
|
Packit |
a4058c |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
a4058c |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
a4058c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
a4058c |
* Lesser General Public License for more details.
|
|
Packit |
a4058c |
*
|
|
Packit |
a4058c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
a4058c |
* License along with this library; if not, write to the Free Software
|
|
Packit |
a4058c |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
Packit |
a4058c |
*/
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#ifndef _HAVE_IO_GDIP_NATIVE_H
|
|
Packit |
a4058c |
#define _HAVE_IO_GDIP_NATIVE_H
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#include <windows.h>
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#include <glib.h>
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
/* //////////// Native API ///////////// */
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#define WINGDIPAPI __stdcall
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
typedef gulong ARGB;
|
|
Packit |
a4058c |
typedef gint PixelFormat;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
typedef enum {
|
|
Packit |
a4058c |
EncoderParameterValueTypeByte = 1,
|
|
Packit |
a4058c |
EncoderParameterValueTypeASCII = 2,
|
|
Packit |
a4058c |
EncoderParameterValueTypeShort = 3,
|
|
Packit |
a4058c |
EncoderParameterValueTypeLong = 4,
|
|
Packit |
a4058c |
EncoderParameterValueTypeRational = 5,
|
|
Packit |
a4058c |
EncoderParameterValueTypeLongRange = 6,
|
|
Packit |
a4058c |
EncoderParameterValueTypeUndefined = 7,
|
|
Packit |
a4058c |
EncoderParameterValueTypeRationalRange = 8,
|
|
Packit |
a4058c |
EncoderParameterValueTypePointer = 9
|
|
Packit |
a4058c |
} EncoderParameterValueType;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#define PixelFormatIndexed 0x00010000
|
|
Packit |
a4058c |
#define PixelFormatGDI 0x00020000
|
|
Packit |
a4058c |
#define PixelFormatAlpha 0x00040000
|
|
Packit |
a4058c |
#define PixelFormatPAlpha 0x00080000
|
|
Packit |
a4058c |
#define PixelFormatExtended 0x00100000
|
|
Packit |
a4058c |
#define PixelFormatCanonical 0x00200000
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#define PixelFormatUndefined 0
|
|
Packit |
a4058c |
#define PixelFormatDontCare 0
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended)
|
|
Packit |
a4058c |
#define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
|
|
Packit |
a4058c |
#define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)
|
|
Packit |
a4058c |
#define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended)
|
|
Packit |
a4058c |
#define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended)
|
|
Packit |
a4058c |
#define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended)
|
|
Packit |
a4058c |
#define PixelFormatMax 15
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
enum _Status
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
Ok = 0,
|
|
Packit |
a4058c |
GenericError = 1,
|
|
Packit |
a4058c |
InvalidParameter = 2,
|
|
Packit |
a4058c |
OutOfMemory = 3,
|
|
Packit |
a4058c |
ObjectBusy = 4,
|
|
Packit |
a4058c |
InsufficientBuffer = 5,
|
|
Packit |
a4058c |
NotImplemented = 6,
|
|
Packit |
a4058c |
Win32Error = 7,
|
|
Packit |
a4058c |
WrongState = 8,
|
|
Packit |
a4058c |
Aborted = 9,
|
|
Packit |
a4058c |
FileNotFound = 10,
|
|
Packit |
a4058c |
ValueOverflow = 11,
|
|
Packit |
a4058c |
AccessDenied = 12,
|
|
Packit |
a4058c |
UnknownImageFormat = 13,
|
|
Packit |
a4058c |
FontFamilyNotFound = 14,
|
|
Packit |
a4058c |
FontStyleNotFound = 15,
|
|
Packit |
a4058c |
NotTrueTypeFont = 16,
|
|
Packit |
a4058c |
UnsupportedGdiplusVersion = 17,
|
|
Packit |
a4058c |
GdiplusNotInitialized = 18,
|
|
Packit |
a4058c |
PropertyNotFound = 19,
|
|
Packit |
a4058c |
PropertyNotSupported = 20,
|
|
Packit |
a4058c |
ProfileNotFound = 21
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef enum _Status Status;
|
|
Packit |
a4058c |
typedef enum _Status GpStatus;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
typedef enum {
|
|
Packit |
a4058c |
ImageFlagsNone = 0,
|
|
Packit |
a4058c |
ImageFlagsScalable = 0x0001,
|
|
Packit |
a4058c |
ImageFlagsHasAlpha = 0x0002,
|
|
Packit |
a4058c |
ImageFlagsHasTranslucent = 0x0004,
|
|
Packit |
a4058c |
ImageFlagsPartiallyScalable = 0x0008,
|
|
Packit |
a4058c |
ImageFlagsColorSpaceRGB = 0x0010,
|
|
Packit |
a4058c |
ImageFlagsColorSpaceCMYK = 0x0020,
|
|
Packit |
a4058c |
ImageFlagsColorSpaceGRAY = 0x0040,
|
|
Packit |
a4058c |
ImageFlagsColorSpaceYCBCR = 0x0080,
|
|
Packit |
a4058c |
ImageFlagsColorSpaceYCCK = 0x0100,
|
|
Packit |
a4058c |
ImageFlagsHasRealDPI = 0x1000,
|
|
Packit |
a4058c |
ImageFlagsHasRealPixelSize = 0x2000,
|
|
Packit |
a4058c |
ImageFlagsReadOnly = 0x00010000,
|
|
Packit |
a4058c |
ImageFlagsCaching = 0x00020000
|
|
Packit |
a4058c |
} ImageFlags;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
enum _ImageLockMode
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
ImageLockModeRead = 1,
|
|
Packit |
a4058c |
ImageLockModeWrite = 2,
|
|
Packit |
a4058c |
ImageLockModeUserInputBuf = 4
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef enum _ImageLockMode ImageLockMode;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
enum _ImageType
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
ImageTypeUnknown,
|
|
Packit |
a4058c |
ImageTypeBitmap,
|
|
Packit |
a4058c |
ImageTypeMetafile
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef enum _ImageType ImageType;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
typedef struct _GpImage GpImage;
|
|
Packit |
a4058c |
typedef struct _GpBitmap GpBitmap;
|
|
Packit |
a4058c |
typedef struct _GpGraphics GpGraphics;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _GdiplusStartupInput
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
UINT32 GdiplusVersion;
|
|
Packit |
a4058c |
gpointer DebugEventCallback;
|
|
Packit |
a4058c |
BOOL SuppressBackgroundThread;
|
|
Packit |
a4058c |
BOOL SuppressExternalCodecs;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _GdiplusStartupInput GdiplusStartupInput;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _PropItem
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
ULONG id;
|
|
Packit |
a4058c |
ULONG length;
|
|
Packit |
a4058c |
WORD type;
|
|
Packit |
a4058c |
VOID *value;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _PropItem PropertyItem;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _EncoderParameter
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
GUID Guid;
|
|
Packit |
a4058c |
ULONG NumberOfValues;
|
|
Packit |
a4058c |
ULONG Type;
|
|
Packit |
a4058c |
VOID* Value;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _EncoderParameter EncoderParameter;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _EncoderParameters
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
UINT Count; /* Number of parameters in this structure */
|
|
Packit |
a4058c |
EncoderParameter Parameter[1]; /* Parameter values */
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _EncoderParameters EncoderParameters;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _ImageCodecInfo
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
CLSID Clsid;
|
|
Packit |
a4058c |
GUID FormatID;
|
|
Packit |
a4058c |
const WCHAR* CodecName;
|
|
Packit |
a4058c |
const WCHAR* DllName;
|
|
Packit |
a4058c |
const WCHAR* FormatDescription;
|
|
Packit |
a4058c |
const WCHAR* FilenameExtension;
|
|
Packit |
a4058c |
const WCHAR* MimeType;
|
|
Packit |
a4058c |
DWORD Flags;
|
|
Packit |
a4058c |
DWORD Version;
|
|
Packit |
a4058c |
DWORD SigCount;
|
|
Packit |
a4058c |
DWORD SigSize;
|
|
Packit |
a4058c |
const BYTE* SigPattern;
|
|
Packit |
a4058c |
const BYTE* SigMask;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _ImageCodecInfo ImageCodecInfo;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _BitmapData
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
UINT Width;
|
|
Packit |
a4058c |
UINT Height;
|
|
Packit |
a4058c |
INT Stride;
|
|
Packit |
a4058c |
PixelFormat PixelFormat;
|
|
Packit |
a4058c |
VOID* Scan0;
|
|
Packit |
a4058c |
UINT_PTR Reserved;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _BitmapData BitmapData;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
struct _GpRect
|
|
Packit |
a4058c |
{
|
|
Packit |
a4058c |
INT X;
|
|
Packit |
a4058c |
INT Y;
|
|
Packit |
a4058c |
INT Width;
|
|
Packit |
a4058c |
INT Height;
|
|
Packit |
a4058c |
};
|
|
Packit |
a4058c |
typedef struct _GpRect GpRect;
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#ifndef IStream_Release
|
|
Packit |
a4058c |
#define IStream_Release(This) (This)->lpVtbl->Release(This)
|
|
Packit |
a4058c |
#endif
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#ifndef IStream_Seek
|
|
Packit |
a4058c |
#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
|
|
Packit |
a4058c |
#endif
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#ifndef IStream_Read
|
|
Packit |
a4058c |
#define IStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
|
|
Packit |
a4058c |
#endif
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#ifndef IStream_SetSize
|
|
Packit |
a4058c |
#define IStream_SetSize(This,size) (This)->lpVtbl->SetSize(This,size)
|
|
Packit |
a4058c |
#endif
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdiplusStartup (gpointer, const gpointer, gpointer);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipCreateBitmapFromStream (gpointer, GpBitmap**);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipBitmapGetPixel (GpBitmap*, gint x, gint y, ARGB*);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageWidth (GpImage*, guint*);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageHeight (GpImage*, guint*);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipDisposeImage (GpImage*);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageFlags (GpImage *, guint*);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipImageGetFrameCount (GpImage *image, const GUID* dimensionID, UINT* count);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipImageSelectActiveFrame (GpImage *image, const GUID* dimensionID, UINT frameIndex);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetPropertyItemSize (GpImage *image, int propId, guint* size);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetPropertyItem (GpImage *image, int propId, guint propSize, PropertyItem* buffer);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipCreateBitmapFromScan0 (INT width, INT height, INT stride, PixelFormat format, BYTE* scan0,
|
|
Packit |
a4058c |
GpBitmap** bitmap);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipSaveImageToStream (GpImage *image, IStream* stream, const CLSID* clsidEncoder,
|
|
Packit |
a4058c |
const EncoderParameters* encoderParams);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageEncoders (UINT numEncoders, UINT size, ImageCodecInfo *encoders);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageEncodersSize (UINT *numEncoders, UINT *size);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipBitmapSetPixel (GpBitmap* bitmap, INT x, INT y, ARGB color);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipDrawImageI (GpGraphics *graphics, GpImage *image, INT x, INT y);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageGraphicsContext (GpImage *image, GpGraphics **graphics);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipFlush (GpGraphics *graphics, INT intention);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGraphicsClear (GpGraphics *graphics, ARGB color);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipBitmapSetResolution (GpBitmap* bitmap, float xdpi, float ydpi);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageHorizontalResolution (GpImage *image, float *resolution);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipGetImageVerticalResolution (GpImage *image, float *resolution);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipLoadImageFromStream (IStream* stream, GpImage **image);
|
|
Packit |
a4058c |
GpStatus WINGDIPAPI GdipDeleteGraphics (GpGraphics *graphics);
|
|
Packit |
a4058c |
|
|
Packit |
a4058c |
#endif
|