首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向TBitmap添加Exif功能?

如何向TBitmap添加Exif功能?
EN

Stack Overflow用户
提问于 2016-03-20 19:25:51
回答 1查看 456关注 0票数 1

我希望创建一个通用函数,从磁盘加载“任意”类型的图像(gif、jpg、bmp、png等)并返回位图。

代码语言:javascript
复制
function LoadGraph(FileName: string): TBitmap;     {pseudocode}
begin
   if FileIsJpeg then 
     jpeg.LoadFromFile; 
     Bitmap.Exif.Assign(Jpeg.Exif);
end; 

问题是,当输入类型为Jpeg时,我需要访问Exif数据。所以,我想创建这样一个类助手:

代码语言:javascript
复制
TYPE
  TBitmapHelper = class helper for TBitmap
    public
      FExifData: TExif;
  end;

然而,Delphi编译器似乎没有这种能力(还没有?)当我得到这个编译错误时:

助手类型中不允许E2599字段定义

如何做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-03-20 22:23:25

Delphi中有非常复杂的图形对象层次结构,用于处理各种图像格式:TGraphic是抽象类,可以从文件加载、保存到文件并在画布上绘制。TPictureTGraphic的容器,允许您只编写一行代码:

代码语言:javascript
复制
Picture.LoadFromFile(Filename);

它将查找正确的图形类,创建它并加载您的图像。

因此,您需要的解决方案之一是使用TPicture而不是TBitmap。对于TBitmap及其后代,TPicture将包含Bitmap属性,而对于其他用户,您可以在画布上绘图或将Picture.Graphic分配给TBitmap (为TJPEGImage、TPNGImage工作,但仍然无法使用TIcon)。

例如,如果它太大了,您不仅需要在屏幕上显示图像,而且需要以某种方式修改它,而不是每次都考虑它的实际表示方式,我建议您创建TBitmap的后代,而不仅仅是助手,您可以在期望TBitmap的程序中到处传递这样的对象,但是现在您可以用新的字段扩展它。我将做类似的事情来添加ICC配置文件功能(在BitmapHeaderV5中支持)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36118409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档