{******************************************************************} { GDI+ Util } { } { home page : http://www.progdigy.com } { email : hgourvest@progdigy.com } { } { date : 15-02-2002 } { } { The contents of this file are used with permission, subject to } { the Mozilla Public License Version 1.1 (the "License"); you may } { not use this file except in compliance with the License. You may } { obtain a copy of the License at } { http://www.mozilla.org/MPL/MPL-1.1.html } { } { Software distributed under the License is distributed on an } { "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or } { implied. See the License for the specific language governing } { rights and limitations under the License. } { } { *****************************************************************} unit GDIPUTIL; interface uses Windows, GDIPAPI, GDIPOBJ; function ValueTypeFromULONG(Type_: ULONG): String; function GetMetaDataIDString(id: ULONG): string; function GetEncoderClsid(format: String; out pClsid: TGUID): integer; function GetStatus(Stat: TStatus): string; function PixelFormatString(PixelFormat: TPixelFormat): string; {from WinNT.h} // creates a language identifier from a primary language identifier and a // sublanguage identifier for the TStringFormat & TFontFamily class. function MakeLangID(PrimaryLanguage, SubLanguage: LANGID): WORD; implementation function ValueTypeFromULONG(Type_: ULONG): String; begin case Type_ of 0 : result := 'Nothing'; 1 : result := 'PropertyTagTypeByte'; 2 : result := 'PropertyTagTypeASCII'; 3 : result := 'PropertyTagTypeShort'; 4 : result := 'PropertyTagTypeLong'; 5 : result := 'PropertyTagTypeRational'; 6 : result := 'Nothing'; 7 : result := 'PropertyTagTypeUndefined'; 8 : result := 'Nothing'; 9 : result := 'PropertyTagTypeSLONG'; 10: result := 'PropertyTagTypeSRational'; else result := ''; end; end; function GetMetaDataIDString(id: ULONG): string; begin case id of PropertyTagExifIFD : result := 'PropertyTagExifIFD'; PropertyTagGpsIFD : result := 'PropertyTagGpsIFD'; PropertyTagNewSubfileType : result := 'PropertyTagNewSubfileType'; PropertyTagSubfileType : result := 'PropertyTagSubfileType'; PropertyTagImageWidth : result := 'PropertyTagImageWidth'; PropertyTagImageHeight : result := 'PropertyTagImageHeight'; PropertyTagBitsPerSample : result := 'PropertyTagBitsPerSample'; PropertyTagCompression : result := 'PropertyTagCompression'; PropertyTagPhotometricInterp : result := 'PropertyTagPhotometricInterp'; PropertyTagThreshHolding : result := 'PropertyTagThreshHolding'; PropertyTagCellWidth : result := 'PropertyTagCellWidth'; PropertyTagCellHeight : result := 'PropertyTagCellHeight'; PropertyTagFillOrder : result := 'PropertyTagFillOrder'; PropertyTagDocumentName : result := 'PropertyTagDocumentName'; PropertyTagImageDescription : result := 'PropertyTagImageDescription'; PropertyTagEquipMake : result := 'PropertyTagEquipMake'; PropertyTagEquipModel : result := 'PropertyTagEquipModel'; PropertyTagStripOffsets : result := 'PropertyTagStripOffsets'; PropertyTagOrientation : result := 'PropertyTagOrientation'; PropertyTagSamplesPerPixel : result := 'PropertyTagSamplesPerPixel'; PropertyTagRowsPerStrip : result := 'PropertyTagRowsPerStrip'; PropertyTagStripBytesCount : result := 'PropertyTagStripBytesCount'; PropertyTagMinSampleValue : result := 'PropertyTagMinSampleValue'; PropertyTagMaxSampleValue : result := 'PropertyTagMaxSampleValue'; PropertyTagXResolution : result := 'PropertyTagXResolution'; PropertyTagYResolution : result := 'PropertyTagYResolution'; PropertyTagPlanarConfig : result := 'PropertyTagPlanarConfig'; PropertyTagPageName : result := 'PropertyTagPageName'; PropertyTagXPosition : result := 'PropertyTagXPosition'; PropertyTagYPosition : result := 'PropertyTagYPosition'; PropertyTagFreeOffset : result := 'PropertyTagFreeOffset'; PropertyTagFreeByteCounts : result := 'PropertyTagFreeByteCounts'; PropertyTagGrayResponseUnit : result := 'PropertyTagGrayResponseUnit'; PropertyTagGrayResponseCurve : result := 'PropertyTagGrayResponseCurve'; PropertyTagT4Option : result := 'PropertyTagT4Option'; PropertyTagT6Option : result := 'PropertyTagT6Option'; PropertyTagResolutionUnit : result := 'PropertyTagResolutionUnit'; PropertyTagPageNumber : result := 'PropertyTagPageNumber'; PropertyTagTransferFuncition : result := 'PropertyTagTransferFuncition'; PropertyTagSoftwareUsed : result := 'PropertyTagSoftwareUsed'; PropertyTagDateTime : result := 'PropertyTagDateTime'; PropertyTagArtist : result := 'PropertyTagArtist'; PropertyTagHostComputer : result := 'PropertyTagHostComputer'; PropertyTagPredictor : result := 'PropertyTagPredictor'; PropertyTagWhitePoint : result := 'PropertyTagWhitePoint'; PropertyTagPrimaryChromaticities : result := 'PropertyTagPrimaryChromaticities'; PropertyTagColorMap : result := 'PropertyTagColorMap'; PropertyTagHalftoneHints : result := 'PropertyTagHalftoneHints'; PropertyTagTileWidth : result := 'PropertyTagTileWidth'; PropertyTagTileLength : result := 'PropertyTagTileLength'; PropertyTagTileOffset : result := 'PropertyTagTileOffset'; PropertyTagTileByteCounts : result := 'PropertyTagTileByteCounts'; PropertyTagInkSet : result := 'PropertyTagInkSet'; PropertyTagInkNames : result := 'PropertyTagInkNames'; PropertyTagNumberOfInks : result := 'PropertyTagNumberOfInks'; PropertyTagDotRange : result := 'PropertyTagDotRange'; PropertyTagTargetPrinter : result := 'PropertyTagTargetPrinter'; PropertyTagExtraSamples : result := 'PropertyTagExtraSamples'; PropertyTagSampleFormat : result := 'PropertyTagSampleFormat'; PropertyTagSMinSampleValue : result := 'PropertyTagSMinSampleValue'; PropertyTagSMaxSampleValue : result := 'PropertyTagSMaxSampleValue'; PropertyTagTransferRange : result := 'PropertyTagTransferRange'; PropertyTagJPEGProc : result := 'PropertyTagJPEGProc'; PropertyTagJPEGInterFormat : result := 'PropertyTagJPEGInterFormat'; PropertyTagJPEGInterLength : result := 'PropertyTagJPEGInterLength'; PropertyTagJPEGRestartInterval : result := 'PropertyTagJPEGRestartInterval'; PropertyTagJPEGLosslessPredictors : result := 'PropertyTagJPEGLosslessPredictors'; PropertyTagJPEGPointTransforms : result := 'PropertyTagJPEGPointTransforms'; PropertyTagJPEGQTables : result := 'PropertyTagJPEGQTables'; PropertyTagJPEGDCTables : result := 'PropertyTagJPEGDCTables'; PropertyTagJPEGACTables : result := 'PropertyTagJPEGACTables'; PropertyTagYCbCrCoefficients : result := 'PropertyTagYCbCrCoefficients'; PropertyTagYCbCrSubsampling : result := 'PropertyTagYCbCrSubsampling'; PropertyTagYCbCrPositioning : result := 'PropertyTagYCbCrPositioning'; PropertyTagREFBlackWhite : result := 'PropertyTagREFBlackWhite'; PropertyTagICCProfile : result := 'PropertyTagICCProfile'; PropertyTagGamma : result := 'PropertyTagGamma'; PropertyTagICCProfileDescriptor : result := 'PropertyTagICCProfileDescriptor'; PropertyTagSRGBRenderingIntent : result := 'PropertyTagSRGBRenderingIntent'; PropertyTagImageTitle : result := 'PropertyTagImageTitle'; PropertyTagCopyright : result := 'PropertyTagCopyright'; PropertyTagResolutionXUnit : result := 'PropertyTagResolutionXUnit'; PropertyTagResolutionYUnit : result := 'PropertyTagResolutionYUnit'; PropertyTagResolutionXLengthUnit : result := 'PropertyTagResolutionXLengthUnit'; PropertyTagResolutionYLengthUnit : result := 'PropertyTagResolutionYLengthUnit'; PropertyTagPrintFlags : result := 'PropertyTagPrintFlags'; PropertyTagPrintFlagsVersion : result := 'PropertyTagPrintFlagsVersion'; PropertyTagPrintFlagsCrop : result := 'PropertyTagPrintFlagsCrop'; PropertyTagPrintFlagsBleedWidth : result := 'PropertyTagPrintFlagsBleedWidth'; PropertyTagPrintFlagsBleedWidthScale : result := 'PropertyTagPrintFlagsBleedWidthScale'; PropertyTagHalftoneLPI : result := 'PropertyTagHalftoneLPI'; PropertyTagHalftoneLPIUnit : result := 'PropertyTagHalftoneLPIUnit'; PropertyTagHalftoneDegree : result := 'PropertyTagHalftoneDegree'; PropertyTagHalftoneShape : result := 'PropertyTagHalftoneShape'; PropertyTagHalftoneMisc : result := 'PropertyTagHalftoneMisc'; PropertyTagHalftoneScreen : result := 'PropertyTagHalftoneScreen'; PropertyTagJPEGQuality : result := 'PropertyTagJPEGQuality'; PropertyTagGridSize : result := 'PropertyTagGridSize'; PropertyTagThumbnailFormat : result := 'PropertyTagThumbnailFormat'; PropertyTagThumbnailWidth : result := 'PropertyTagThumbnailWidth'; PropertyTagThumbnailHeight : result := 'PropertyTagThumbnailHeight'; PropertyTagThumbnailColorDepth : result := 'PropertyTagThumbnailColorDepth'; PropertyTagThumbnailPlanes : result := 'PropertyTagThumbnailPlanes'; PropertyTagThumbnailRawBytes : result := 'PropertyTagThumbnailRawBytes'; PropertyTagThumbnailSize : result := 'PropertyTagThumbnailSize'; PropertyTagThumbnailCompressedSize : result := 'PropertyTagThumbnailCompressedSize'; PropertyTagColorTransferFunction : result := 'PropertyTagColorTransferFunction'; PropertyTagThumbnailData : result := 'PropertyTagThumbnailData'; PropertyTagThumbnailImageWidth : result := 'PropertyTagThumbnailImageWidth'; PropertyTagThumbnailImageHeight : result := 'PropertyTagThumbnailImageHeight'; PropertyTagThumbnailBitsPerSample : result := 'PropertyTagThumbnailBitsPerSample'; PropertyTagThumbnailCompression : result := 'PropertyTagThumbnailCompression'; PropertyTagThumbnailPhotometricInterp : result := 'PropertyTagThumbnailPhotometricInterp'; PropertyTagThumbnailImageDescription : result := 'PropertyTagThumbnailImageDescription'; PropertyTagThumbnailEquipMake : result := 'PropertyTagThumbnailEquipMake'; PropertyTagThumbnailEquipModel : result := 'PropertyTagThumbnailEquipModel'; PropertyTagThumbnailStripOffsets : result := 'PropertyTagThumbnailStripOffsets'; PropertyTagThumbnailOrientation : result := 'PropertyTagThumbnailOrientation'; PropertyTagThumbnailSamplesPerPixel : result := 'PropertyTagThumbnailSamplesPerPixel'; PropertyTagThumbnailRowsPerStrip : result := 'PropertyTagThumbnailRowsPerStrip'; PropertyTagThumbnailStripBytesCount : result := 'PropertyTagThumbnailStripBytesCount'; PropertyTagThumbnailResolutionX : result := 'PropertyTagThumbnailResolutionX'; PropertyTagThumbnailResolutionY : result := 'PropertyTagThumbnailResolutionY'; PropertyTagThumbnailPlanarConfig : result := 'PropertyTagThumbnailPlanarConfig'; PropertyTagThumbnailResolutionUnit : result := 'PropertyTagThumbnailResolutionUnit'; PropertyTagThumbnailTransferFunction : result := 'PropertyTagThumbnailTransferFunction'; PropertyTagThumbnailSoftwareUsed : result := 'PropertyTagThumbnailSoftwareUsed'; PropertyTagThumbnailDateTime : result := 'PropertyTagThumbnailDateTime'; PropertyTagThumbnailArtist : result := 'PropertyTagThumbnailArtist'; PropertyTagThumbnailWhitePoint : result := 'PropertyTagThumbnailWhitePoint'; PropertyTagThumbnailPrimaryChromaticities : result := 'PropertyTagThumbnailPrimaryChromaticities'; PropertyTagThumbnailYCbCrCoefficients : result := 'PropertyTagThumbnailYCbCrCoefficients'; PropertyTagThumbnailYCbCrSubsampling : result := 'PropertyTagThumbnailYCbCrSubsampling'; PropertyTagThumbnailYCbCrPositioning : result := 'PropertyTagThumbnailYCbCrPositioning'; PropertyTagThumbnailRefBlackWhite : result := 'PropertyTagThumbnailRefBlackWhite'; PropertyTagThumbnailCopyRight : result := 'PropertyTagThumbnailCopyRight'; PropertyTagLuminanceTable : result := 'PropertyTagLuminanceTable'; PropertyTagChrominanceTable : result := 'PropertyTagChrominanceTable'; PropertyTagFrameDelay : result := 'PropertyTagFrameDelay'; PropertyTagLoopCount : result := 'PropertyTagLoopCount'; PropertyTagPixelUnit : result := 'PropertyTagPixelUnit'; PropertyTagPixelPerUnitX : result := 'PropertyTagPixelPerUnitX'; PropertyTagPixelPerUnitY : result := 'PropertyTagPixelPerUnitY'; PropertyTagPaletteHistogram : result := 'PropertyTagPaletteHistogram'; PropertyTagExifExposureTime : result := 'PropertyTagExifExposureTime'; PropertyTagExifFNumber : result := 'PropertyTagExifFNumber'; PropertyTagExifExposureProg : result := 'PropertyTagExifExposureProg'; PropertyTagExifSpectralSense : result := 'PropertyTagExifSpectralSense'; PropertyTagExifISOSpeed : result := 'PropertyTagExifISOSpeed'; PropertyTagExifOECF : result := 'PropertyTagExifOECF'; PropertyTagExifVer : result := 'PropertyTagExifVer'; PropertyTagExifDTOrig : result := 'PropertyTagExifDTOrig'; PropertyTagExifDTDigitized : result := 'PropertyTagExifDTDigitized'; PropertyTagExifCompConfig : result := 'PropertyTagExifCompConfig'; PropertyTagExifCompBPP : result := 'PropertyTagExifCompBPP'; PropertyTagExifShutterSpeed : result := 'PropertyTagExifShutterSpeed'; PropertyTagExifAperture : result := 'PropertyTagExifAperture'; PropertyTagExifBrightness : result := 'PropertyTagExifBrightness'; PropertyTagExifExposureBias : result := 'PropertyTagExifExposureBias'; PropertyTagExifMaxAperture : result := 'PropertyTagExifMaxAperture'; PropertyTagExifSubjectDist : result := 'PropertyTagExifSubjectDist'; PropertyTagExifMeteringMode : result := 'PropertyTagExifMeteringMode'; PropertyTagExifLightSource : result := 'PropertyTagExifLightSource'; PropertyTagExifFlash : result := 'PropertyTagExifFlash'; PropertyTagExifFocalLength : result := 'PropertyTagExifFocalLength'; PropertyTagExifMakerNote : result := 'PropertyTagExifMakerNote'; PropertyTagExifUserComment : result := 'PropertyTagExifUserComment'; PropertyTagExifDTSubsec : result := 'PropertyTagExifDTSubsec'; PropertyTagExifDTOrigSS : result := 'PropertyTagExifDTOrigSS'; PropertyTagExifDTDigSS : result := 'PropertyTagExifDTDigSS'; PropertyTagExifFPXVer : result := 'PropertyTagExifFPXVer'; PropertyTagExifColorSpace : result := 'PropertyTagExifColorSpace'; PropertyTagExifPixXDim : result := 'PropertyTagExifPixXDim'; PropertyTagExifPixYDim : result := 'PropertyTagExifPixYDim'; PropertyTagExifRelatedWav : result := 'PropertyTagExifRelatedWav'; PropertyTagExifInterop : result := 'PropertyTagExifInterop'; PropertyTagExifFlashEnergy : result := 'PropertyTagExifFlashEnergy'; PropertyTagExifSpatialFR : result := 'PropertyTagExifSpatialFR'; PropertyTagExifFocalXRes : result := 'PropertyTagExifFocalXRes'; PropertyTagExifFocalYRes : result := 'PropertyTagExifFocalYRes'; PropertyTagExifFocalResUnit : result := 'PropertyTagExifFocalResUnit'; PropertyTagExifSubjectLoc : result := 'PropertyTagExifSubjectLoc'; PropertyTagExifExposureIndex : result := 'PropertyTagExifExposureIndex'; PropertyTagExifSensingMethod : result := 'PropertyTagExifSensingMethod'; PropertyTagExifFileSource : result := 'PropertyTagExifFileSource'; PropertyTagExifSceneType : result := 'PropertyTagExifSceneType'; PropertyTagExifCfaPattern : result := 'PropertyTagExifCfaPattern'; PropertyTagGpsVer : result := 'PropertyTagGpsVer'; PropertyTagGpsLatitudeRef : result := 'PropertyTagGpsLatitudeRef'; PropertyTagGpsLatitude : result := 'PropertyTagGpsLatitude'; PropertyTagGpsLongitudeRef : result := 'PropertyTagGpsLongitudeRef'; PropertyTagGpsLongitude : result := 'PropertyTagGpsLongitude'; PropertyTagGpsAltitudeRef : result := 'PropertyTagGpsAltitudeRef'; PropertyTagGpsAltitude : result := 'PropertyTagGpsAltitude'; PropertyTagGpsGpsTime : result := 'PropertyTagGpsGpsTime'; PropertyTagGpsGpsSatellites : result := 'PropertyTagGpsGpsSatellites'; PropertyTagGpsGpsStatus : result := 'PropertyTagGpsGpsStatus'; PropertyTagGpsGpsMeasureMode : result := 'PropertyTagGpsGpsMeasureMode'; PropertyTagGpsGpsDop : result := 'PropertyTagGpsGpsDop'; PropertyTagGpsSpeedRef : result := 'PropertyTagGpsSpeedRef'; PropertyTagGpsSpeed : result := 'PropertyTagGpsSpeed'; PropertyTagGpsTrackRef : result := 'PropertyTagGpsTrackRef'; PropertyTagGpsTrack : result := 'PropertyTagGpsTrack'; PropertyTagGpsImgDirRef : result := 'PropertyTagGpsImgDirRef'; PropertyTagGpsImgDir : result := 'PropertyTagGpsImgDir'; PropertyTagGpsMapDatum : result := 'PropertyTagGpsMapDatum'; PropertyTagGpsDestLatRef : result := 'PropertyTagGpsDestLatRef'; PropertyTagGpsDestLat : result := 'PropertyTagGpsDestLat'; PropertyTagGpsDestLongRef : result := 'PropertyTagGpsDestLongRef'; PropertyTagGpsDestLong : result := 'PropertyTagGpsDestLong'; PropertyTagGpsDestBearRef : result := 'PropertyTagGpsDestBearRef'; PropertyTagGpsDestBear : result := 'PropertyTagGpsDestBear'; PropertyTagGpsDestDistRef : result := 'PropertyTagGpsDestDistRef'; PropertyTagGpsDestDist : result := 'PropertyTagGpsDestDist'; else result := ''; end; end; function GetEncoderClsid(format: String; out pClsid: TGUID): integer; var num, size, j: UINT; ImageCodecInfo: PImageCodecInfo; Type ArrIMgInf = array of TImageCodecInfo; begin num := 0; // number of image encoders size := 0; // size of the image encoder array in bytes result := -1; GetImageEncodersSize(num, size); if (size = 0) then exit; GetMem(ImageCodecInfo, size); if(ImageCodecInfo = nil) then exit; GetImageEncoders(num, size, ImageCodecInfo); for j := 0 to num - 1 do begin if( ArrIMgInf(ImageCodecInfo)[j].MimeType = format) then begin pClsid := ArrIMgInf(ImageCodecInfo)[j].Clsid; result := j; // Success end; end; FreeMem(ImageCodecInfo, size); end; function GetStatus(Stat: TStatus): string; begin case Stat of Ok : result := 'Ok'; GenericError : result := 'GenericError'; InvalidParameter : result := 'InvalidParameter'; OutOfMemory : result := 'OutOfMemory'; ObjectBusy : result := 'ObjectBusy'; InsufficientBuffer : result := 'InsufficientBuffer'; NotImplemented : result := 'NotImplemented'; Win32Error : result := 'Win32Error'; WrongState : result := 'WrongState'; Aborted : result := 'Aborted'; FileNotFound : result := 'FileNotFound'; ValueOverflow : result := 'ValueOverflow'; AccessDenied : result := 'AccessDenied'; UnknownImageFormat : result := 'UnknownImageFormat'; FontFamilyNotFound : result := 'FontFamilyNotFound'; FontStyleNotFound : result := 'FontStyleNotFound'; NotTrueTypeFont : result := 'NotTrueTypeFont'; UnsupportedGdiplusVersion : result := 'UnsupportedGdiplusVersion'; GdiplusNotInitialized : result := 'GdiplusNotInitialized'; PropertyNotFound : result := 'PropertyNotFound'; PropertyNotSupported : result := 'PropertyNotSupported'; else result := ''; end; end; function PixelFormatString(PixelFormat: TPixelFormat): string; begin case PixelFormat of PixelFormatIndexed : result := 'PixelFormatIndexed'; PixelFormatGDI : result := 'PixelFormatGDI'; PixelFormatAlpha : result := 'PixelFormatAlpha'; PixelFormatPAlpha : result := 'PixelFormatPAlpha'; PixelFormatExtended : result := 'PixelFormatExtended'; PixelFormatCanonical : result := 'PixelFormatCanonical'; PixelFormatUndefined : result := 'PixelFormatUndefined'; PixelFormat1bppIndexed : result := 'PixelFormat1bppIndexed'; PixelFormat4bppIndexed : result := 'PixelFormat4bppIndexed'; PixelFormat8bppIndexed : result := 'PixelFormat8bppIndexed'; PixelFormat16bppGrayScale : result := 'PixelFormat16bppGrayScale'; PixelFormat16bppRGB555 : result := 'PixelFormat16bppRGB555'; PixelFormat16bppRGB565 : result := 'PixelFormat16bppRGB565'; PixelFormat16bppARGB1555 : result := 'PixelFormat16bppARGB1555'; PixelFormat24bppRGB : result := 'PixelFormat24bppRGB'; PixelFormat32bppRGB : result := 'PixelFormat32bppRGB'; PixelFormat32bppARGB : result := 'PixelFormat32bppARGB'; PixelFormat32bppPARGB : result := 'PixelFormat32bppPARGB'; PixelFormat48bppRGB : result := 'PixelFormat48bppRGB'; PixelFormat64bppARGB : result := 'PixelFormat64bppARGB'; PixelFormat64bppPARGB : result := 'PixelFormat64bppPARGB'; PixelFormatMax : result := 'PixelFormatMax'; else result := ''; end; end; function MakeLangID(PrimaryLanguage, SubLanguage: LANGID): Word; begin result := (SubLanguage shl 10) or PrimaryLanguage; end; end.