/**************************************************************************\ * * Copyright (c) 1999-2000 Microsoft Corporation * * Module Name: * * GdiplusImaging.h * * Abstract: * * GDI+ Imaging GUIDs * \**************************************************************************/ #ifndef _GDIPLUSIMAGING_H #define _GDIPLUSIMAGING_H //--------------------------------------------------------------------------- // Image file format identifiers //--------------------------------------------------------------------------- DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatBMP, 0xb96b3cab,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatEMF, 0xb96b3cac,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatWMF, 0xb96b3cad,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatPNG, 0xb96b3caf,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); //--------------------------------------------------------------------------- // Predefined multi-frame dimension IDs //--------------------------------------------------------------------------- DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d,0x3fb5,0x418a,0x83,0xa6,0x7f,0x45,0x22,0x9d,0xc8,0x72); DEFINE_GUID(FrameDimensionResolution, 0x84236f7b,0x3bd3,0x428f,0x8d,0xab,0x4e,0xa1,0x43,0x9c,0xa3,0x15); DEFINE_GUID(FrameDimensionPage, 0x7462dc86,0x6180,0x4c7e,0x8e,0x3f,0xee,0x73,0x33,0xa7,0xa4,0x83); //--------------------------------------------------------------------------- // Property sets //--------------------------------------------------------------------------- DEFINE_GUID(FormatIDImageInformation, 0xe5836cbe,0x5eef,0x4f1d,0xac,0xde,0xae,0x4c,0x43,0xb6,0x08,0xce); DEFINE_GUID(FormatIDJpegAppHeaders, 0x1c4afdcd,0x6177,0x43cf,0xab,0xc7,0x5f,0x51,0xaf,0x39,0xee,0x85); //--------------------------------------------------------------------------- // Encoder parameter sets //--------------------------------------------------------------------------- DEFINE_GUID(EncoderCompression, 0xe09d739d,0xccd4,0x44ee,0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58); DEFINE_GUID(EncoderColorDepth, 0x66087055,0xad66,0x4c7c,0x9a,0x18,0x38,0xa2,0x31,0x0b,0x83,0x37); DEFINE_GUID(EncoderScanMethod, 0x3a4e2661,0x3109,0x4e56,0x85,0x36,0x42,0xc1,0x56,0xe7,0xdc,0xfa); DEFINE_GUID(EncoderVersion, 0x24d18c76,0x814a,0x41a4,0xbf,0x53,0x1c,0x21,0x9c,0xcc,0xf7,0x97); DEFINE_GUID(EncoderRenderMethod, 0x6d42c53a,0x229a,0x4825,0x8b,0xb7,0x5c,0x99,0xe2,0xb9,0xa8,0xb8); DEFINE_GUID(EncoderQuality, 0x1d5be4b5,0xfa4a,0x452d,0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb); DEFINE_GUID(EncoderTransformation,0x8d0eb2d1,0xa58e,0x4ea8,0xaa,0x14,0x10,0x80,0x74,0xb7,0xb6,0xf9); DEFINE_GUID(EncoderLuminanceTable,0xedb33bce,0x0266,0x4a77,0xb9,0x04,0x27,0x21,0x60,0x99,0xe7,0x17); DEFINE_GUID(EncoderChrominanceTable,0xf2e455dc,0x09b3,0x4316,0x82,0x60,0x67,0x6a,0xda,0x32,0x48,0x1c); DEFINE_GUID(EncoderSaveFlag,0x292266fc,0xac40,0x47bf,0x8c, 0xfc, 0xa8, 0x5b, 0x89, 0xa6, 0x55, 0xde); DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc); MIDL_INTERFACE("025D1823-6C7D-447B-BBDB-A3CBC3DFA2FC") IImageBytes : public IUnknown { public: // Return total number of bytes in the IStream STDMETHOD(CountBytes)( OUT UINT *pcb ) = 0; // Locks "cb" bytes, starting from "ulOffset" in the stream, and returns the // pointer to the beginning of the locked memory chunk in "ppvBytes" STDMETHOD(LockBytes)( IN UINT cb, IN ULONG ulOffset, OUT const VOID ** ppvBytes ) = 0; // Unlocks "cb" bytes, pointed by "pvBytes", starting from "ulOffset" in the // stream STDMETHOD(UnlockBytes)( IN const VOID *pvBytes, IN UINT cb, IN ULONG ulOffset ) = 0; }; //-------------------------------------------------------------------------- // ImageCodecInfo structure //-------------------------------------------------------------------------- class ImageCodecInfo { public: CLSID Clsid; GUID FormatID; const WCHAR* CodecName; const WCHAR* DllName; const WCHAR* FormatDescription; const WCHAR* FilenameExtension; const WCHAR* MimeType; DWORD Flags; DWORD Version; DWORD SigCount; DWORD SigSize; const BYTE* SigPattern; const BYTE* SigMask; }; //-------------------------------------------------------------------------- // Information flags about image codecs //-------------------------------------------------------------------------- enum ImageCodecFlags { ImageCodecFlagsEncoder = 0x00000001, ImageCodecFlagsDecoder = 0x00000002, ImageCodecFlagsSupportBitmap = 0x00000004, ImageCodecFlagsSupportVector = 0x00000008, ImageCodecFlagsSeekableEncode = 0x00000010, ImageCodecFlagsBlockingDecode = 0x00000020, ImageCodecFlagsBuiltin = 0x00010000, ImageCodecFlagsSystem = 0x00020000, ImageCodecFlagsUser = 0x00040000 }; //--------------------------------------------------------------------------- // Access modes used when calling Image::LockBits //--------------------------------------------------------------------------- enum ImageLockMode { ImageLockModeRead = 0x0001, ImageLockModeWrite = 0x0002, ImageLockModeUserInputBuf= 0x0004 }; //--------------------------------------------------------------------------- // Information about image pixel data //--------------------------------------------------------------------------- class BitmapData { public: UINT Width; UINT Height; INT Stride; PixelFormat PixelFormat; VOID* Scan0; UINT_PTR Reserved; }; //--------------------------------------------------------------------------- // Image flags //--------------------------------------------------------------------------- enum ImageFlags { ImageFlagsNone = 0, // Low-word: shared with SINKFLAG_x ImageFlagsScalable = 0x0001, ImageFlagsHasAlpha = 0x0002, ImageFlagsHasTranslucent = 0x0004, ImageFlagsPartiallyScalable = 0x0008, // Low-word: color space definition ImageFlagsColorSpaceRGB = 0x0010, ImageFlagsColorSpaceCMYK = 0x0020, ImageFlagsColorSpaceGRAY = 0x0040, ImageFlagsColorSpaceYCBCR = 0x0080, ImageFlagsColorSpaceYCCK = 0x0100, // Low-word: image size info ImageFlagsHasRealDPI = 0x1000, ImageFlagsHasRealPixelSize = 0x2000, // High-word ImageFlagsReadOnly = 0x00010000, ImageFlagsCaching = 0x00020000 }; enum RotateFlipType { RotateNoneFlipNone = 0, Rotate90FlipNone = 1, Rotate180FlipNone = 2, Rotate270FlipNone = 3, RotateNoneFlipX = 4, Rotate90FlipX = 5, Rotate180FlipX = 6, Rotate270FlipX = 7, RotateNoneFlipY = Rotate180FlipX, Rotate90FlipY = Rotate270FlipX, Rotate180FlipY = RotateNoneFlipX, Rotate270FlipY = Rotate90FlipX, RotateNoneFlipXY = Rotate180FlipNone, Rotate90FlipXY = Rotate270FlipNone, Rotate180FlipXY = RotateNoneFlipNone, Rotate270FlipXY = Rotate90FlipNone }; //--------------------------------------------------------------------------- // Encoder Parameter structure //--------------------------------------------------------------------------- class EncoderParameter { public: GUID Guid; // GUID of the parameter ULONG NumberOfValues; // Number of the parameter values ULONG Type; // Value type, like ValueTypeLONG etc. VOID* Value; // A pointer to the parameter values }; //--------------------------------------------------------------------------- // Encoder Parameters structure //--------------------------------------------------------------------------- class EncoderParameters { public: UINT Count; // Number of parameters in this structure EncoderParameter Parameter[1]; // Parameter values }; //--------------------------------------------------------------------------- // Property Item //--------------------------------------------------------------------------- class PropertyItem { public: PROPID id; // ID of this property ULONG length; // Length of the property value, in bytes WORD type; // Type of the value, as one of TAG_TYPE_XXX // defined above VOID* value; // property value }; //--------------------------------------------------------------------------- // Image property types //--------------------------------------------------------------------------- #define PropertyTagTypeByte 1 #define PropertyTagTypeASCII 2 #define PropertyTagTypeShort 3 #define PropertyTagTypeLong 4 #define PropertyTagTypeRational 5 #define PropertyTagTypeUndefined 7 #define PropertyTagTypeSLONG 9 #define PropertyTagTypeSRational 10 //--------------------------------------------------------------------------- // Image property ID tags //--------------------------------------------------------------------------- #define PropertyTagExifIFD 0x8769 #define PropertyTagGpsIFD 0x8825 #define PropertyTagNewSubfileType 0x00FE #define PropertyTagSubfileType 0x00FF #define PropertyTagImageWidth 0x0100 #define PropertyTagImageHeight 0x0101 #define PropertyTagBitsPerSample 0x0102 #define PropertyTagCompression 0x0103 #define PropertyTagPhotometricInterp 0x0106 #define PropertyTagThreshHolding 0x0107 #define PropertyTagCellWidth 0x0108 #define PropertyTagCellHeight 0x0109 #define PropertyTagFillOrder 0x010A #define PropertyTagDocumentName 0x010D #define PropertyTagImageDescription 0x010E #define PropertyTagEquipMake 0x010F #define PropertyTagEquipModel 0x0110 #define PropertyTagStripOffsets 0x0111 #define PropertyTagOrientation 0x0112 #define PropertyTagSamplesPerPixel 0x0115 #define PropertyTagRowsPerStrip 0x0116 #define PropertyTagStripBytesCount 0x0117 #define PropertyTagMinSampleValue 0x0118 #define PropertyTagMaxSampleValue 0x0119 #define PropertyTagXResolution 0x011A // Image resolution in width direction #define PropertyTagYResolution 0x011B // Image resolution in height direction #define PropertyTagPlanarConfig 0x011C // Image data arrangement #define PropertyTagPageName 0x011D #define PropertyTagXPosition 0x011E #define PropertyTagYPosition 0x011F #define PropertyTagFreeOffset 0x0120 #define PropertyTagFreeByteCounts 0x0121 #define PropertyTagGrayResponseUnit 0x0122 #define PropertyTagGrayResponseCurve 0x0123 #define PropertyTagT4Option 0x0124 #define PropertyTagT6Option 0x0125 #define PropertyTagResolutionUnit 0x0128 // Unit of X and Y resolution #define PropertyTagPageNumber 0x0129 #define PropertyTagTransferFuncition 0x012D #define PropertyTagSoftwareUsed 0x0131 #define PropertyTagDateTime 0x0132 #define PropertyTagArtist 0x013B #define PropertyTagHostComputer 0x013C #define PropertyTagPredictor 0x013D #define PropertyTagWhitePoint 0x013E #define PropertyTagPrimaryChromaticities 0x013F #define PropertyTagColorMap 0x0140 #define PropertyTagHalftoneHints 0x0141 #define PropertyTagTileWidth 0x0142 #define PropertyTagTileLength 0x0143 #define PropertyTagTileOffset 0x0144 #define PropertyTagTileByteCounts 0x0145 #define PropertyTagInkSet 0x014C #define PropertyTagInkNames 0x014D #define PropertyTagNumberOfInks 0x014E #define PropertyTagDotRange 0x0150 #define PropertyTagTargetPrinter 0x0151 #define PropertyTagExtraSamples 0x0152 #define PropertyTagSampleFormat 0x0153 #define PropertyTagSMinSampleValue 0x0154 #define PropertyTagSMaxSampleValue 0x0155 #define PropertyTagTransferRange 0x0156 #define PropertyTagJPEGProc 0x0200 #define PropertyTagJPEGInterFormat 0x0201 #define PropertyTagJPEGInterLength 0x0202 #define PropertyTagJPEGRestartInterval 0x0203 #define PropertyTagJPEGLosslessPredictors 0x0205 #define PropertyTagJPEGPointTransforms 0x0206 #define PropertyTagJPEGQTables 0x0207 #define PropertyTagJPEGDCTables 0x0208 #define PropertyTagJPEGACTables 0x0209 #define PropertyTagYCbCrCoefficients 0x0211 #define PropertyTagYCbCrSubsampling 0x0212 #define PropertyTagYCbCrPositioning 0x0213 #define PropertyTagREFBlackWhite 0x0214 #define PropertyTagICCProfile 0x8773 // This TAG is defined by ICC // for embedded ICC in TIFF #define PropertyTagGamma 0x0301 #define PropertyTagICCProfileDescriptor 0x0302 #define PropertyTagSRGBRenderingIntent 0x0303 #define PropertyTagImageTitle 0x0320 #define PropertyTagCopyright 0x8298 // Extra TAGs (Like Adobe Image Information tags etc.) #define PropertyTagResolutionXUnit 0x5001 #define PropertyTagResolutionYUnit 0x5002 #define PropertyTagResolutionXLengthUnit 0x5003 #define PropertyTagResolutionYLengthUnit 0x5004 #define PropertyTagPrintFlags 0x5005 #define PropertyTagPrintFlagsVersion 0x5006 #define PropertyTagPrintFlagsCrop 0x5007 #define PropertyTagPrintFlagsBleedWidth 0x5008 #define PropertyTagPrintFlagsBleedWidthScale 0x5009 #define PropertyTagHalftoneLPI 0x500A #define PropertyTagHalftoneLPIUnit 0x500B #define PropertyTagHalftoneDegree 0x500C #define PropertyTagHalftoneShape 0x500D #define PropertyTagHalftoneMisc 0x500E #define PropertyTagHalftoneScreen 0x500F #define PropertyTagJPEGQuality 0x5010 #define PropertyTagGridSize 0x5011 #define PropertyTagThumbnailFormat 0x5012 // 1 = JPEG, 0 = RAW RGB #define PropertyTagThumbnailWidth 0x5013 #define PropertyTagThumbnailHeight 0x5014 #define PropertyTagThumbnailColorDepth 0x5015 #define PropertyTagThumbnailPlanes 0x5016 #define PropertyTagThumbnailRawBytes 0x5017 #define PropertyTagThumbnailSize 0x5018 #define PropertyTagThumbnailCompressedSize 0x5019 #define PropertyTagColorTransferFunction 0x501A #define PropertyTagThumbnailData 0x501B// RAW thumbnail bits in // JPEG format or RGB format // depends on // PropertyTagThumbnailFormat // Thumbnail related TAGs #define PropertyTagThumbnailImageWidth 0x5020 // Thumbnail width #define PropertyTagThumbnailImageHeight 0x5021 // Thumbnail height #define PropertyTagThumbnailBitsPerSample 0x5022 // Number of bits per // component #define PropertyTagThumbnailCompression 0x5023 // Compression Scheme #define PropertyTagThumbnailPhotometricInterp 0x5024 // Pixel composition #define PropertyTagThumbnailImageDescription 0x5025 // Image Tile #define PropertyTagThumbnailEquipMake 0x5026 // Manufacturer of Image // Input equipment #define PropertyTagThumbnailEquipModel 0x5027 // Model of Image input // equipment #define PropertyTagThumbnailStripOffsets 0x5028 // Image data location #define PropertyTagThumbnailOrientation 0x5029 // Orientation of image #define PropertyTagThumbnailSamplesPerPixel 0x502A // Number of components #define PropertyTagThumbnailRowsPerStrip 0x502B // Number of rows per strip #define PropertyTagThumbnailStripBytesCount 0x502C // Bytes per compressed // strip #define PropertyTagThumbnailResolutionX 0x502D // Resolution in width // direction #define PropertyTagThumbnailResolutionY 0x502E // Resolution in height // direction #define PropertyTagThumbnailPlanarConfig 0x502F // Image data arrangement #define PropertyTagThumbnailResolutionUnit 0x5030 // Unit of X and Y // Resolution #define PropertyTagThumbnailTransferFunction 0x5031 // Transfer function #define PropertyTagThumbnailSoftwareUsed 0x5032 // Software used #define PropertyTagThumbnailDateTime 0x5033 // File change date and // time #define PropertyTagThumbnailArtist 0x5034 // Person who created the // image #define PropertyTagThumbnailWhitePoint 0x5035 // White point chromaticity #define PropertyTagThumbnailPrimaryChromaticities 0x5036 // Chromaticities of // primaries #define PropertyTagThumbnailYCbCrCoefficients 0x5037 // Color space transforma- // tion coefficients #define PropertyTagThumbnailYCbCrSubsampling 0x5038 // Subsampling ratio of Y // to C #define PropertyTagThumbnailYCbCrPositioning 0x5039 // Y and C position #define PropertyTagThumbnailRefBlackWhite 0x503A // Pair of black and white // reference values #define PropertyTagThumbnailCopyRight 0x503B // CopyRight holder #define PropertyTagLuminanceTable 0x5090 #define PropertyTagChrominanceTable 0x5091 #define PropertyTagFrameDelay 0x5100 #define PropertyTagLoopCount 0x5101 #define PropertyTagPixelUnit 0x5110 // Unit specifier for pixel/unit #define PropertyTagPixelPerUnitX 0x5111 // Pixels per unit in X #define PropertyTagPixelPerUnitY 0x5112 // Pixels per unit in Y #define PropertyTagPaletteHistogram 0x5113 // Palette histogram // EXIF specific tag #define PropertyTagExifExposureTime 0x829A #define PropertyTagExifFNumber 0x829D #define PropertyTagExifExposureProg 0x8822 #define PropertyTagExifSpectralSense 0x8824 #define PropertyTagExifISOSpeed 0x8827 #define PropertyTagExifOECF 0x8828 #define PropertyTagExifVer 0x9000 #define PropertyTagExifDTOrig 0x9003 // Date & time of original #define PropertyTagExifDTDigitized 0x9004 // Date & time of digital data generation #define PropertyTagExifCompConfig 0x9101 #define PropertyTagExifCompBPP 0x9102 #define PropertyTagExifShutterSpeed 0x9201 #define PropertyTagExifAperture 0x9202 #define PropertyTagExifBrightness 0x9203 #define PropertyTagExifExposureBias 0x9204 #define PropertyTagExifMaxAperture 0x9205 #define PropertyTagExifSubjectDist 0x9206 #define PropertyTagExifMeteringMode 0x9207 #define PropertyTagExifLightSource 0x9208 #define PropertyTagExifFlash 0x9209 #define PropertyTagExifFocalLength 0x920A #define PropertyTagExifMakerNote 0x927C #define PropertyTagExifUserComment 0x9286 #define PropertyTagExifDTSubsec 0x9290 // Date & Time subseconds #define PropertyTagExifDTOrigSS 0x9291 // Date & Time original subseconds #define PropertyTagExifDTDigSS 0x9292 // Date & TIme digitized subseconds #define PropertyTagExifFPXVer 0xA000 #define PropertyTagExifColorSpace 0xA001 #define PropertyTagExifPixXDim 0xA002 #define PropertyTagExifPixYDim 0xA003 #define PropertyTagExifRelatedWav 0xA004 // related sound file #define PropertyTagExifInterop 0xA005 #define PropertyTagExifFlashEnergy 0xA20B #define PropertyTagExifSpatialFR 0xA20C // Spatial Frequency Response #define PropertyTagExifFocalXRes 0xA20E // Focal Plane X Resolution #define PropertyTagExifFocalYRes 0xA20F // Focal Plane Y Resolution #define PropertyTagExifFocalResUnit 0xA210 // Focal Plane Resolution Unit #define PropertyTagExifSubjectLoc 0xA214 #define PropertyTagExifExposureIndex 0xA215 #define PropertyTagExifSensingMethod 0xA217 #define PropertyTagExifFileSource 0xA300 #define PropertyTagExifSceneType 0xA301 #define PropertyTagExifCfaPattern 0xA302 #define PropertyTagGpsVer 0x0000 #define PropertyTagGpsLatitudeRef 0x0001 #define PropertyTagGpsLatitude 0x0002 #define PropertyTagGpsLongitudeRef 0x0003 #define PropertyTagGpsLongitude 0x0004 #define PropertyTagGpsAltitudeRef 0x0005 #define PropertyTagGpsAltitude 0x0006 #define PropertyTagGpsGpsTime 0x0007 #define PropertyTagGpsGpsSatellites 0x0008 #define PropertyTagGpsGpsStatus 0x0009 #define PropertyTagGpsGpsMeasureMode 0x00A #define PropertyTagGpsGpsDop 0x000B // Measurement precision #define PropertyTagGpsSpeedRef 0x000C #define PropertyTagGpsSpeed 0x000D #define PropertyTagGpsTrackRef 0x000E #define PropertyTagGpsTrack 0x000F #define PropertyTagGpsImgDirRef 0x0010 #define PropertyTagGpsImgDir 0x0011 #define PropertyTagGpsMapDatum 0x0012 #define PropertyTagGpsDestLatRef 0x0013 #define PropertyTagGpsDestLat 0x0014 #define PropertyTagGpsDestLongRef 0x0015 #define PropertyTagGpsDestLong 0x0016 #define PropertyTagGpsDestBearRef 0x0017 #define PropertyTagGpsDestBear 0x0018 #define PropertyTagGpsDestDistRef 0x0019 #define PropertyTagGpsDestDist 0x001A #endif