TPNGImage`LoadFromStream`在某些情况下不起作用

时间:2013-03-05 13:23:40

标签: delphi delphi-xe vcl

我正在使用VCL TPNGImage类来加载PNG图像。如果我使用TPNGImage创建FindClass(S).Create对象(SString且可能包含'TPNGImage'),那么当我尝试使用{加载png图像时{1}}我淡化了访问冲突异常。你有什么想法吗?

请注意,我使用以下代码创建新实例:

LoadFromStream

1 个答案:

答案 0 :(得分:6)

你说你通过调用来创建类:

P := TPNGImage(FindClass('tpngimage').NewInstance);

该代码将分配一个实例,但不会运行构造函数。那是你的问题。如果你没有正确构造它,你不能指望一个实例可以工作。

您需要使用

P := TPNGImage.Create;

现在,听起来好像您希望能够编写可以在各种TGraphic后代上运行的代码。你可以做到这一点。

首先声明您的变量属于TGraphic类型。

var
  Image: TGraphic;

然后获取课程参考。

var
  Cls: TPersistentClass;
....
Cls := FindClass('TPNGImage');

然后在类引用兼容的情况下实例化对象。

if Cls.InheritsFrom(TGraphic) then
  Image := TGraphicClass(Cls).Create;

因为TGraphic使用将运行TPNGImage构造函数的虚构造函数。您可以使用相同的代码构建JPEG,BMP,GIF等。

相关问题