Delphi 2007使用Windows Imaging Component(WIC)
发布时间:2020-12-15 09:32:03 所属栏目:大数据 来源:网络整理
导读:我需要在Delphi 2007中阅读并将一些图片从jpg转换为bmb到bmp. 转换后,某些图片被剪切,灰度或最差. 我搜索过,但在任何情况下我都找不到在delphi 2007中添加像TWICImage这样的WIC例程的技巧. 我在某处读到可以通过COM轻松添加,但我不知道如何导入文件或文件.
我需要在Delphi 2007中阅读并将一些图片从jpg转换为bmb到bmp.
转换后,某些图片被剪切,灰度或最差. 我搜索过,但在任何情况下我都找不到在delphi 2007中添加像TWICImage这样的WIC例程的技巧. 我在某处读到可以通过COM轻松添加,但我不知道如何导入文件或文件. 谢谢. 解决方法
以下是如何使用WIC将JPEG转换为位图的示例:
unit Unit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,StdCtrls,Dialogs,ComObj,ActiveX; const WICBitmapCacheOnLoad = $2; 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |