在Delphi中自定义JPEG图像处理

Joh*_*mas 1 delphi graphics firemonkey

我们使用Delphi XE6构建一个跨平台的FireMonkey应用程序,我们想稍微调整一下JPG编码器.实际上我们想要子类化,更改JPEG签名,在文件中添加一些参数并更改文件扩展名.在实际的JPEG引擎中什么都不会改变.

此外,我们希望支持LoadThumbnailFromFile哪些仍将使用实际的JPG代码.

但是,我们很难找到JPG编码器在源代码中声明的位置以及如何子类化/派生它.

Rem*_*eau 7

FireMonkey处理图形的方式与VCL处理图形的方式截然不同.

在VCL中,图形使用派生自的特殊类来处理Vcl.Graphics.TGraphic,例如Vcl.Graphics.TBitmapVcl.Imaging.jpeg.TJPEGImage.如果要加载/保存特定图形类型,可以创建特定类.

在FireMonkey中,使用从类FMX.Graphics.TCustomBitmapCodec中注册的专用类来处理图形FMX.Graphics.TBitmapCodecManager.您可以使用通用FMX.Graphics.TBitmap类来处理所有图形.加载图形时,它使用相应的注册编解码器(如果可以找到),但保存时必须指定要使用的编解码器.

FireMonkey为每个平台使用不同的编解码器实现,因此没有单个类可以子类化,就像在VCL中一样.因此,为了在FireMonkey中自定义JPEG处理,您必须创建自己的TCustomBitmapCodec衍生编解码器并对其进行TBitmapCodecManager注册(取消注册现有的类.jpg.jpeg文件扩展名).以下是FireMonkey当前实现的编解码器类:

  1. Windows:TBitmapCodecWICinFMX.Canvas.D2D.pas
  2. OSX:TBitmapCodecQuartzinFMX.Canvas.Mac.pas
  3. iOS:TBitmapCodecQuartzinFMX.Canvas.iOS.pas
  4. Android:TBitmapCodecAndroidinFMX.Canvas.Android.pas

使用{$IFDEF}语句,您可以根据需要利用自定义编解码器中的现有类.