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

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

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

最佳答案

您说您通过以下方式创建了该类:

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等。

关于delphi - TPNGImage`LoadFromStream`在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15224938/

10-17 01:29