Blame gdk-pixbuf/io-gdip-native.h

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