我正在使用VCL TPNGImage
类加载PNG图像。如果我使用TPNGImage
创建FindClass(S).Create
对象(S
是String
,并且可能包含'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/