我希望创建一个通用函数,从磁盘加载“任意”类型的图像(gif、jpg、bmp、png等)并返回位图。
function LoadGraph(FileName: string): TBitmap; {pseudocode}
begin
if FileIsJpeg then
jpeg.LoadFromFile;
Bitmap.Exif.Assign(Jpeg.Exif);
end; 问题是,当输入类型为Jpeg时,我需要访问Exif数据。所以,我想创建这样一个类助手:
TYPE
TBitmapHelper = class helper for TBitmap
public
FExifData: TExif;
end;然而,Delphi编译器似乎没有这种能力(还没有?)当我得到这个编译错误时:
助手类型中不允许E2599字段定义
如何做到这一点?
发布于 2016-03-20 22:23:25
Delphi中有非常复杂的图形对象层次结构,用于处理各种图像格式:TGraphic是抽象类,可以从文件加载、保存到文件并在画布上绘制。TPicture是TGraphic的容器,允许您只编写一行代码:
Picture.LoadFromFile(Filename);它将查找正确的图形类,创建它并加载您的图像。
因此,您需要的解决方案之一是使用TPicture而不是TBitmap。对于TBitmap及其后代,TPicture将包含Bitmap属性,而对于其他用户,您可以在画布上绘图或将Picture.Graphic分配给TBitmap (为TJPEGImage、TPNGImage工作,但仍然无法使用TIcon)。
例如,如果它太大了,您不仅需要在屏幕上显示图像,而且需要以某种方式修改它,而不是每次都考虑它的实际表示方式,我建议您创建TBitmap的后代,而不仅仅是助手,您可以在期望TBitmap的程序中到处传递这样的对象,但是现在您可以用新的字段扩展它。我将做类似的事情来添加ICC配置文件功能(在BitmapHeaderV5中支持)。
https://stackoverflow.com/questions/36118409
复制相似问题