Delphi 2007使用Windows Imaging Component(WIC)

Delphi 2007使用Windows Imaging Component(WIC),第1张

概述我需要在Delphi 2007中阅读并将一些图片从jpg转换为bmb到bmp. 转换后,某些图片被剪切,灰度或最差. 我搜索过,但在任何情况下我都找不到在delphi 2007中添加像TWICImage这样的WIC例程的技巧. 我在某处读到可以通过COM轻松添加,但我不知道如何导入文件或文件. 谢谢. 以下是如何使用WIC将JPEG转换为位图的示例: unit Unit1;interface 我需要在Delphi 2007中阅读并将一些图片从jpg转换为bmb到bmp.

转换后,某些图片被剪切,灰度或最差.

我搜索过,但在任何情况下我都找不到在delphi 2007中添加像TWICImage这样的WIC例程的技巧.

我在某处读到可以通过COM轻松添加,但我不知道如何导入文件或文件.

谢谢.

解决方法 以下是如何使用WIC将JPEG转换为位图的示例:

unit Unit1;interfaceuses  windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,StdCtrls,Dialogs,ComObj,ActiveX;const  WICBitmapCacheOnLoad = ;  WICDecodeMetadataCacheondemand = 0;  SID_Ipropertybag2 = '{22F55882-280B-11d0-A8A9-00A0C90C2004}';  SID_IWICComponentInfo = '{23BC3F0A-698B-4357-886B-F24D50671334}';  SID_IWICBitmapSource = '{00000120-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmap = '{00000121-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmapLock = '{00000123-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmapCodecInfo = '{E87A44C4-B76E-4c47-8B09-298EB12A2714}';  SID_IWICBitmapEncoder = '{00000103-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmapDecoder = '{9EDDE9E7-8DEE-47ea-99DF-E6FAF2ED44BF}';  SID_IWICBitmapEncoderInfo = '{94C9B4EE-A09F-4f92-8A1E-4A9BCE7E76FB}';  SID_IWICBitmapDecoderInfo = '{D8CD007F-D08F-4191-9BFC-236EA7F0E4B5}';  SID_IWICBitmapFrameEncode = '{00000105-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmapFrameDecode = '{3B16811B-6A43-4ec9-A813-3D930C13B940}';  SID_IWICBitmapScaler = '{00000302-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICBitmapClipper = '{E4FBCF03-223D-4e81-9333-D635556DD1B5}';  SID_IWICBitmapFliprotator = '{5009834F-2D6A-41ce-9E1B-17C5AFF7A782}';  SID_IWICPalette = '{00000040-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICcolorContext = '{3C613A02-34B2-44ea-9A7C-45AEA9C6FD6D}';  SID_IWICcolortransform = '{B66F034F-D0E2-40ab-B436-6DE39E321A94}';  SID_IWICMetadataqueryReader = '{30989668-E1C9-4597-B395-458EEDB808DF}';  SID_IWICMetadataqueryWriter = '{A721791A-0DEF-4d06-BD91-2118BF1DB10B}';  SID_IWICFastMetadataEncoder = '{B84E2C09-78C9-4AC4-8BD3-524AE1663A2F}';  SID_IWICStream = '{135FF860-22B7-4ddf-B0F6-218F4F299A43}';  SID_IWICFormatConverter = '{00000301-a8f2-4877-ba0a-fd2b6645fb94}';  SID_IWICImagingFactory = '{ec5ec8a9-c395-4314-9c77-54d7a935ff70}';  CLSID_WICImagingFactory: TGUID = '{CACAF262-9370-4615-A13B-9F5539DA4C0A}';  GUID_WICPixelFormat32bppBGRA: TGUID = '{6FDDC324-4E03-4BFE-B185-3D77768DC90F}';type  PWICcolor = ^TWiccolor;  TWICcolor = Cardinal;  PWICRect = ^TWICRect;  TWICRect = record    X: Integer;    Y: Integer;    WIDth: Integer;    Height: Integer;  end;  PIWICcolorContext = ^IWICcolorContext;  PWICBitmapPattern = ^TWICBitmapPattern;  TWICBitmapPattern = record    position: ulARGE_INTEGER;    Length: ulONG;    Pattern: PByte;    Mask: PByte;    EndOfStream: BOol;  end;  PPropBag2 = ^TPropBag2;  TPropBag2 = record    DWType: DWORD;    vt: tvarType;    cfType: TClipformat;    DWHint: DWORD;    pstrname: PoleStr;    clsID: TCLSID;  end;  TWICInProcPointer = ^Byte;  TWICPixelFormatGUID = TGUID;  TREFWICPixelFormatGUID = PGUID;  TWICComponentType = type Integer;  TWICDecodeOptions = type Integer;  TWICcolorContextType = type Integer;  TWICBitmapDitherType = type Integer;  TWICBitmapPaletteType = type Integer;  TWICBitmAPInterpolationMode = type Integer;  TWICBitmapEncoderCacheOption = type Integer;  TWICBitmaptransformOptions = type Integer;  TWICBitmapCreateCacheOption = type Integer;  TWICBitmapAlphaChannelOption = type Integer;  Ipropertybag2 = interface;  IWICPalette = interface;  IWICcolorContext = interface;  IWICcolortransform = interface;  IWICBitmap = interface;  IWICBitmapLock = interface;  IWICBitmapSource = interface;  IWICBitmapCodecInfo = interface;  IWICBitmapEncoder = interface;  IWICBitmapDecoder = interface;  IWICBitmapEncoderInfo = interface;  IWICBitmapDecoderInfo = interface;  IWICBitmapFrameEncode = interface;  IWICBitmapFrameDecode = interface;  IWICBitmapScaler = interface;  IWICBitmapClipper = interface;  IWICBitmapFliprotator = interface;  IWICMetadataqueryReader = interface;  IWICMetadataqueryWriter = interface;  IWICFastMetadataEncoder = interface;  IWICStream = interface;  IWICComponentInfo = interface;  IWICFormatConverter = interface;  IWICImagingFactory = interface;  Ipropertybag2 = interface(IUnkNown)    [SID_Ipropertybag2]    function Read(pPropBag: PPropBag2; pErrLog: IErrorLog; pvarValue: PVariant; phrError: PHResult): HRESulT; stdcall;    function Write(cPropertIEs: ulONG; pPropBag: PPropBag2; pvarValue: PVariant): HRESulT; stdcall;    function CountPropertIEs(var pcPropertIEs: ulONG): HRESulT; stdcall;    function GetPropertyInfo(iProperty,cPropertIEs: ulONG; pPropBag: PPropBag2; var pcPropertIEs: ulONG): HRESulT; stdcall;    function Loadobject(pstrname:PoleStr; DWHint: DWORD; pUnkObject: IUnkNown; pErrLog: IErrorLog): HRESulT; stdcall;  end;  IWICComponentInfo = interface(IUnkNown)    [SID_IWICComponentInfo]    function GetComponentType(var pType: TWICComponentType): HRESulT; stdcall;    function GetCLSID(var pclsID: TGUID): HRESulT; stdcall;    function GetSigningStatus(var pStatus: DWORD): HRESulT; stdcall;    function GetAuthor(cchAuthor: UINT; wzAuthor: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetvendorGUID(var pguIDvendor: TGUID): HRESulT; stdcall;    function GetVersion(cchVersion: UINT; wzVersion: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetSpecVersion(cchSpecVersion: UINT; wzSpecVersion: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetFrIEndlyname(cchFrIEndlyname: UINT; wzFrIEndlyname: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;  end;  IWICBitmapSource = interface(IUnkNown)    [SID_IWICBitmapSource]    function GetSize(var puiWIDth: UINT; var puiHeight: UINT): HRESulT; stdcall;    function GetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESulT; stdcall;    function GetResolution(var pDpiX: Double; var pDpiY: Double): HRESulT; stdcall;    function copyPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function copyPixels(prc: PWICRect; cbStrIDe: UINT; cbBufferSize: UINT; pbBuffer: PByte): HRESulT; stdcall;  end;  IWICBitmap = interface(IWICBitmapSource)    [SID_IWICBitmap]    function Lock(const prcLock: TWICRect; flags: DWORD; out ppILock: IWICBitmapLock): HRESulT; stdcall;    function SetPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function SetResolution(dpiX: Double; dpiY: Double): HRESulT; stdcall;  end;  IWICBitmapLock = interface(IUnkNown)    [SID_IWICBitmapLock]    function GetSize(var puiWIDth: UINT; var puiHeight: UINT): HRESulT; stdcall;    function GetStrIDe(var pcbStrIDe: UINT): HRESulT; stdcall;    function GetDataPointer(var pcbBufferSize: UINT; var ppbData: TWICInProcPointer): HRESulT; stdcall;    function GetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESulT; stdcall;  end;  IWICBitmapCodecInfo = interface(IWICComponentInfo)    [SID_IWICBitmapCodecInfo]    function GetContainerFormat(var pguIDContainerFormat: TGUID): HRESulT; stdcall;    function GetPixelFormats(cFormats: UINT; var guIDPixelFormats: PGUID; var pcActual: UINT): HRESulT; stdcall;    function GetcolorManagementVersion(cchcolorManagementVersion: UINT; wzcolorManagementVersion: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetDeviceManufacturer(cchDeviceManufacturer: UINT; wzDeviceManufacturer: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetDeviceModels(cchDeviceModels: UINT; wzDeviceModels: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetMimeTypes(cchMimeTypes: UINT; wzMimeTypes: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function GetfileExtensions(cchfileExtensions: UINT; wzfileExtensions: PWCHAR; var pcchActual: UINT): HRESulT; stdcall;    function DoesSupportAnimation(var pfSupportAnimation: BOol): HRESulT; stdcall;    function DoesSupportChromakey(var pfSupportChromakey: BOol): HRESulT; stdcall;    function DoesSupportLossless(var pfSupportLossless: BOol): HRESulT; stdcall;    function DoesSupportMultiframe(var pfSupportMultiframe: BOol): HRESulT; stdcall;    function MatchesMimeType(wzMimeType: LPCWSTR; var pfMatches: BOol): HRESulT; stdcall;  end;  IWICBitmapEncoder = interface(IUnkNown)    [SID_IWICBitmapEncoder]    function Initialize(pIStream: IStream; cacheOption: TWICBitmapEncoderCacheOption): HRESulT; stdcall;    function GetContainerFormat(var pguIDContainerFormat: TGUID): HRESulT; stdcall;    function GetEncoderInfo(out ppIEncoderInfo: IWICBitmapEncoderInfo): HRESulT; stdcall;    function SetcolorContexts(cCount: UINT; ppIcolorContext: PIWICcolorContext): HRESulT; stdcall;    function SetPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function Setthumbnail(pIthumbnail: IWICBitmapSource): HRESulT; stdcall;    function SetPrevIEw(pIPrevIEw: IWICBitmapSource): HRESulT; stdcall;    function CreateNewFrame(out ppiframeEncode: IWICBitmapFrameEncode; var ppIEncoderOptions: Ipropertybag2): HRESulT; stdcall;    function Commit: HRESulT; stdcall;    function GetMetadataqueryWriter(out ppIMetadataqueryWriter: IWICMetadataqueryWriter): HRESulT; stdcall;  end;  IWICBitmapDecoder = interface(IUnkNown)    [SID_IWICBitmapDecoder]    function queryCapability(pIStream: IStream; var pDWCapability: DWORD): HRESulT; stdcall;    function Initialize(pIStream: IStream; cacheOptions: TWICDecodeOptions): HRESulT; stdcall;    function GetContainerFormat(var pguIDContainerFormat: TGUID): HRESulT; stdcall;    function GetDecoderInfo(out ppIDecoderInfo: IWICBitmapDecoderInfo): HRESulT; stdcall;    function copyPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function GetMetadataqueryReader(out ppIMetadataqueryReader: IWICMetadataqueryReader): HRESulT; stdcall;    function GetPrevIEw(out ppIBitmapSource: IWICBitmapSource): HRESulT; stdcall;    function GetcolorContexts(cCount: UINT; ppIcolorContexts: PIWICcolorContext; var pcActualCount : UINT): HRESulT; stdcall;    function Getthumbnail(out ppIthumbnail: IWICBitmapSource): HRESulT; stdcall;    function GetFrameCount(var pCount: UINT): HRESulT; stdcall;    function GetFrame(index: UINT; out ppIBitmapFrame: IWICBitmapFrameDecode): HRESulT; stdcall;  end;  IWICBitmapEncoderInfo = interface(IWICBitmapCodecInfo)    [SID_IWICBitmapEncoderInfo]    function CreateInstance(out ppIBitmapEncoder: IWICBitmapEncoder): HRESulT; stdcall;  end;  IWICBitmapDecoderInfo = interface(IWICBitmapCodecInfo)    [SID_IWICBitmapDecoderInfo]    function GetPatterns(cbSizePatterns: UINT; pPatterns: PWICBitmapPattern; var pcPatterns: UINT; var pcbPatternsActual: UINT): HRESulT; stdcall;    function MatchesPattern(pIStream: IStream; var pfMatches: BOol): HRESulT; stdcall;    function CreateInstance(out ppIBitmapDecoder: IWICBitmapDecoder): HRESulT; stdcall;  end;  IWICBitmapFrameEncode = interface(IUnkNown)    [SID_IWICBitmapFrameEncode]    function Initialize(pIEncoderOptions: Ipropertybag2): HRESulT; stdcall;    function SetSize(uiWIDth: UINT; uiHeight: UINT): HRESulT; stdcall;    function SetResolution(dpiX: Double; dpiY: Double): HRESulT; stdcall;    function SetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESulT; stdcall;    function SetcolorContexts(cCount: UINT; ppIcolorContext: PIWICcolorContext): HRESulT; stdcall;    function SetPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function Setthumbnail(pIthumbnail: IWICBitmapSource): HRESulT; stdcall;    function WritePixels(lineCount: UINT; cbStrIDe: UINT; cbBufferSize: UINT; pbPixels: PByte): HRESulT; stdcall;    function WriteSource(pIBitmapSource: IWICBitmapSource; prc: PWICRect): HRESulT; stdcall;    function Commit: HRESulT; stdcall;    function GetMetadataqueryWriter(out ppIMetadataqueryWriter: IWICMetadataqueryWriter): HRESulT; stdcall;  end;  IWICBitmapFrameDecode = interface(IWICBitmapSource)    [SID_IWICBitmapFrameDecode]    function GetMetadataqueryReader(out ppIMetadataqueryReader: IWICMetadataqueryReader): HRESulT; stdcall;    function GetcolorContexts(cCount: UINT; ppIcolorContexts: PIWICcolorContext; var pcActualCount : UINT): HRESulT; stdcall;    function Getthumbnail(out ppIthumbnail: IWICBitmapSource): HRESulT; stdcall;  end;  IWICBitmapScaler = interface(IWICBitmapSource)    [SID_IWICBitmapScaler]    function Initialize(pISource: IWICBitmapSource; uiWIDth: UINT; uiHeight: UINT; mode: TWICBitmAPInterpolationMode): HRESulT; stdcall;  end;  IWICBitmapClipper = interface(IWICBitmapSource)    [SID_IWICBitmapClipper]    function Initialize(pISource: IWICBitmapSource; var prc: TWICRect): HRESulT; stdcall;  end;  IWICBitmapFliprotator = interface(IWICBitmapSource)    [SID_IWICBitmapFliprotator]    function Initialize(pISource: IWICBitmapSource; options: TWICBitmaptransformOptions): HRESulT; stdcall;  end;  IWICPalette = interface(IUnkNown)    [SID_IWICPalette]    function InitializePredefined(ePaletteType: TWICBitmapPaletteType; fAddtransparentcolor: BOol): HRESulT; stdcall;    function InitializeCustom(pcolors: PWICcolor; cCount: UINT): HRESulT; stdcall;    function InitializefromBitmap(pISurface: IWICBitmapSource; cCount: UINT; fAddtransparentcolor: BOol): HRESulT; stdcall;    function InitializefromPalette(pIPalette: IWICPalette): HRESulT; stdcall;    function GetType(var pePaletteType: TWICBitmapPaletteType): HRESulT; stdcall;    function GetcolorCount(var pcCount: UINT): HRESulT; stdcall;    function Getcolors(cCount: UINT; pcolors: PWICcolor; var pcActualcolors: UINT): HRESulT; stdcall;    function IsBlackWhite(var pfIsBlackWhite: BOol): HRESulT; stdcall;    function IsGrayscale(var pfIsGrayscale: BOol): HRESulT; stdcall;    function HasAlpha(var pfHasAlpha: BOol): HRESulT; stdcall;  end;  IWICcolorContext = interface(IUnkNown)    [SID_IWICcolorContext]    function Initializefromfilename(wzfilename: LPCWSTR): HRESulT; stdcall;    function InitializefromMemory(const pbBuffer: PByte; cbBufferSize: UINT): HRESulT; stdcall;    function InitializefromExifcolorSpace(value: UINT): HRESulT; stdcall;    function GetType(var pType: TWICcolorContextType): HRESulT; stdcall;    function GetProfileBytes(cbBuffer: UINT; pbBuffer: PByte; var pcbActual: UINT): HRESulT; stdcall;    function GetExifcolorSpace(var pValue: UINT): HRESulT; stdcall;  end;  IWICcolortransform = interface(IWICBitmapSource)    [SID_IWICcolortransform]    function Initialize(pIBitmapSource: IWICBitmapSource; pIContextSource: IWICcolorContext; pIContextDest: IWICcolorContext; pixelFmtDest: TREFWICPixelFormatGUID): HRESulT; stdcall;  end;  IWICMetadataqueryReader = interface(IUnkNown)    [SID_IWICMetadataqueryReader]    function GetContainerFormat(var pguIDContainerFormat: TGUID): HRESulT; stdcall;    function GetLocation(cchMaxLength: UINT; wznamespace: PWCHAR; var pcchActualLength: UINT): HRESulT; stdcall;    function GetMetadataByname(wzname: LPCWSTR; var pvarValue: PROPVARIANT): HRESulT; stdcall;    function GetEnumerator(out ppIEnumString: IEnumString): HRESulT; stdcall;  end;  IWICMetadataqueryWriter = interface(IWICMetadataqueryReader)    [SID_IWICMetadataqueryWriter]    function SetMetadataByname(wzname: LPCWSTR; const pvarValue: TPropVariant): HRESulT; stdcall;    function RemoveMetadataByname(wzname: LPCWSTR): HRESulT; stdcall;  end;  IWICFastMetadataEncoder = interface(IUnkNown)    [SID_IWICFastMetadataEncoder]    function Commit: HRESulT; stdcall;    function GetMetadataqueryWriter(out ppIMetadataqueryWriter: IWICMetadataqueryWriter): HRESulT; stdcall;  end;  IWICStream = interface(IStream)    [SID_IWICStream]    function InitializefromIStream(pIStream: IStream): HRESulT; stdcall;    function Initializefromfilename(wzfilename: LPCWSTR; DWDesiredAccess: DWORD): HRESulT; stdcall;    function InitializefromMemory(pbBuffer: TWICInProcPointer; cbBufferSize: DWORD): HRESulT; stdcall;    function InitializefromIStreamRegion(pIStream: IStream; ulOffset: ulARGE_INTEGER; ulMaxSize: ulARGE_INTEGER): HRESulT; stdcall;  end;  IWICFormatConverter = interface(IWICBitmapSource)    [SID_IWICFormatConverter]    function Initialize(pISource: IWICBitmapSource; const dstFormat: TWICPixelFormatGUID; dither: TWICBitmapDitherType; const pIPalette: IWICPalette; AlphaThresholdPercent: Double; paletteTranslate: TWICBitmapPaletteType): HRESulT; stdcall;    function CanConvert(srcPixelFormat: TREFWICPixelFormatGUID; dstPixelFormat: TREFWICPixelFormatGUID; var pfCanConvert: BOol): HRESulT; stdcall;  end;  IWICImagingFactory = interface(IUnkNown)    [SID_IWICImagingFactory]    function CreateDecoderFromfilename(wzfilename: LPCWSTR; const pguIDvendor: TGUID; DWDesiredAccess: DWORD; MetadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESulT; stdcall;    function CreateDecoderFromStream(pIStream: IStream; const pguIDvendor: TGUID; MetadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESulT; stdcall;    function CreateDecoderFromfileHandle(hfile: ulONG_PTR; const pguIDvendor: TGUID; MetadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESulT; stdcall;    function CreateComponentInfo(const clsIDComponent: TGUID; out ppIInfo: IWICComponentInfo): HRESulT; stdcall;    function CreateDecoder(const guIDContainerFormat: TGUID; const pguIDvendor: TGUID; out ppIDecoder: IWICBitmapDecoder): HRESulT; stdcall;    function CreateEncoder(const guIDContainerFormat: TGUID; const pguIDvendor: TGUID; out ppIEncoder: IWICBitmapEncoder): HRESulT; stdcall;    function CreatePalette(out ppIPalette: IWICPalette): HRESulT; stdcall;    function CreateFormatConverter(out ppIFormatConverter: IWICFormatConverter): HRESulT; stdcall;    function CreateBitmapScaler(out ppIBitmapScaler: IWICBitmapScaler): HRESulT; stdcall;    function CreateBitmapClipper(out ppIBitmapClipper: IWICBitmapClipper): HRESulT; stdcall;    function CreateBitmapFliprotator(out ppIBitmapFliprotator: IWICBitmapFliprotator): HRESulT; stdcall;    function CreateStream(out ppIWICStream: IWICStream): HRESulT; stdcall;    function CreatecolorContext(out ppIWICcolorContext: IWICcolorContext): HRESulT; stdcall;    function Createcolortransformer(out ppIWICcolortransform: IWICcolortransform): HRESulT; stdcall;    function CreateBitmap(uiWIDth: UINT; uiHeight: UINT; pixelFormat: TREFWICPixelFormatGUID; option: TWICBitmapCreateCacheOption; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateBitmapFromSource(pIBitmapSource: IWICBitmapSource; option: TWICBitmapCreateCacheOption; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateBitmapFromSourceRect(pIBitmapSource: IWICBitmapSource; x: UINT; y: UINT; wIDth: UINT; height: UINT; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateBitmapFromMemory(uiWIDth: UINT; uiHeight: UINT; const pixelFormat: TWICPixelFormatGUID; cbStrIDe: UINT; cbBufferSize: UINT; pbBuffer: PByte; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateBitmapFromHBITMAP(hBitmap: HBITMAP; hPalette: HPALETTE; options: TWICBitmapAlphaChannelOption; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateBitmapFromHICON(hIcon: HICON; out ppIBitmap: IWICBitmap): HRESulT; stdcall;    function CreateComponentEnumerator(componentTypes: DWORD; options: DWORD; out ppIEnumUnkNown: IEnumUnkNown): HRESulT; stdcall;    function CreateFastMetadataEncoderFromDecoder(pIDecoder: IWICBitmapDecoder; out ppIFastEncoder: IWICFastMetadataEncoder): HRESulT; stdcall;    function CreateFastMetadataEncoderFromFrameDecode(piframeDecoder: IWICBitmapFrameDecode; out ppIFastEncoder: IWICFastMetadataEncoder): HRESulT; stdcall;    function createqueryWriter(const guIDMetadataFormat: TGUID; const pguIDvendor: TGUID; out ppIqueryWriter: IWICMetadataqueryWriter): HRESulT; stdcall;    function createqueryWriterFromreader(pIqueryReader: IWICMetadataqueryReader; const pguIDvendor: TGUID; out ppIqueryWriter: IWICMetadataqueryWriter): HRESulT; stdcall;  end;  function WICConvertBitmapSource(const dstFormat: TWICPixelFormatGUID; pISrc: IWICBitmapSource; out ppIDst: IWICBitmapSource): HRESulT; stdcall;    external 'windowscodecs.dll' name 'WICConvertBitmapSource';type  TForm1 = class(TForm)    button1: Tbutton;    procedure button1Click(Sender: TObject);  private    FImagingFactory: IWICImagingFactory;    procedure JpegToBitmap(const ASource,ATarget: string);  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.JpegToBitmap(const ASource,ATarget: string);var  fileStream: TfileStream;  StreamAdapter: TStreamAdapter;  BitmAPInfo: TBitmAPInfo;  BitmapBits: array of Byte;  BitmapWIDth: Cardinal;  BitmapHeight: Cardinal;  BitmapOutput: TBitmap;  BitmapObject: IWICBitmap;  BitmapSource: IWICBitmapSource;  BitmapDecoder: IWICBitmapDecoder;  BitmapFrame: IWICBitmapFrameDecode;begin  if not Assigned(FImagingFactory) then    CoCreateInstance(CLSID_WICImagingFactory,nil,CLSCTX_INPROC_SERVER or      CLSCTX_LOCAL_SERVER,IUnkNown,FImagingFactory);  fileStream := TfileStream.Create(ASource,fmOpenRead or fmShareDenyWrite);  try    fileStream.position := 0;    StreamAdapter := TStreamAdapter.Create(fileStream);    oleCheck(FImagingFactory.CreateDecoderFromStream(StreamAdapter,GUID_NulL,WICDecodeMetadataCacheondemand,BitmapDecoder));    oleCheck(BitmapDecoder.GetFrame(0,BitmapFrame));    oleCheck(FImagingFactory.CreateBitmapFromSource(BitmapFrame,WICBitmapCacheOnLoad,BitmapObject));    oleCheck(BitmapObject.GetSize(BitmapWIDth,BitmapHeight));    SetLength(BitmapBits,BitmapWIDth * BitmapHeight * 4);    oleCheck(WICConvertBitmapSource(GUID_WICPixelFormat32bppBGRA,BitmapObject,BitmapSource));    oleCheck(BitmapSource.copyPixels(nil,BitmapWIDth * 4,Length(BitmapBits),@BitmapBits[0]));    FillChar(BitmAPInfo,SizeOf(BitmAPInfo),0);    BitmAPInfo.bmiheader.biSize := SizeOf(BitmAPInfo);    BitmAPInfo.bmiheader.biWIDth := BitmapWIDth;    BitmAPInfo.bmiheader.biHeight := -BitmapHeight;    BitmAPInfo.bmiheader.biPlanes := 1;    BitmAPInfo.bmiheader.biBitCount := 32;    BitmapOutput := TBitmap.Create;    try      BitmapOutput.PixelFormat := pf32bit;      BitmapOutput.SetSize(BitmapWIDth,BitmapHeight);      SetDIBits(0,BitmapOutput.Handle,BitmapHeight,@BitmapBits[0],BitmAPInfo,DIB_RGB_colorS);      BitmapOutput.AlphaFormat := afdefined;      BitmapOutput.Savetofile(ATarget);    finally      BitmapOutput.Free;    end;  finally    fileStream.Free;  end;end;procedure TForm1.button1Click(Sender: TObject);begin  JpegToBitmap('d:\SourceImage.jpg','d:\Targetimage.bmp');end;end.
总结

以上是内存溢出为你收集整理的Delphi 2007使用Windows Imaging Component(WIC)全部内容,希望文章能够帮你解决Delphi 2007使用Windows Imaging Component(WIC)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1265398.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存