【发布时间】:2020-02-27 04:42:28
【问题描述】:
在 Delphi 10.1 Berlin 中,我试图通过从资源加载 PNG 图像来更改表单上的图片。 我遵循了这个: Load image from embedded resource 并使用 TWICImage 自动处理不同的可能图像格式。 在这种情况下,我特别想使用 PNG 来实现透明度。
由于某种原因,我创建的函数什么都不返回。
但是,如果我在函数中调用result.savetofile('test.png'),则资源被成功保存,这将验证资源是否存在于EXE中并且已被找到。
function LoadImageResource(NativeInstance: NativeUInt; ImageResource: string): TWICImage;
var
Strm: TResourceStream;
WICImage: TWICImage;
begin
Strm := TResourceStream.Create(NativeInstance, ImageResource, RT_RCDATA);
try
Strm.Position := 0;
WICImage := TWICImage.Create;
try
WICImage.LoadFromStream(Strm);
result := WICImage; //these return empty
result.savetofile('test.png'); //this succesfully saves the resource to disk
finally
WICImage.Free;
end;
finally
Strm.Free;
end;
end;
在函数之外,如果我尝试通过调用 Image1.picture.assign(LoadFromResource(...)) 或 Image1.picture.graphic := LoadFromResource(...) 来分配图像,则不会分配任何内容。如果我再打电话给Image1.savetofile('test.png'),我会收到访问冲突错误。
我可能缺少什么?
【问题讨论】:
-
您正在释放作为结果返回的 WICImage。我很惊讶您的应用没有因此崩溃。