繁体   English   中英

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

[英]TPNGImage `LoadFromStream` is not working in some cases

我正在使用VCL TPNGImage类加载PNG图像。 如果我使用FindClass(S).Create创建TPNGImage对象( 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等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM