将PNG资源加载到TGPImage

问题描述 投票:1回答:1

我想将PNG资源加载到TGPImage。

我找到的所有示例都使用Bitmap Draw,它会失去透明度。

以下示例结果仅为黑色图片:

_shipImage := TGPImage.Create();
ms := TMemoryStream.Create();
png := TPngImage.Create;
try
  png.LoadFromResourceName(HInstance, 'SHIP_RIGHT');
  ms.Position := 0;
  png.SaveToStream(ms);
  ms.Position := 0;
  sa := TStreamAdapter.Create(ms);
  _shipImage.FromStream(sa);
finally
  //sa.Free(); //Invalid pointer operation
  png.Free();
  ms.Free();
end;

以下也不起作用:

_shipImage := TGPImage.Create();
rs := TResourceStream.Create(HInstance, 'SHIP_RIGHT', RT_RCDATA);
rs.Position := 0;
sa := TStreamAdapter.Create(rs, soOwned);
_shipImage.FromStream(sa);
delphi png gdi+ embedded-resource
1个回答
0
投票

问题是在TGPImage.FromStream单位实施Winapi.GDIPOBJ

function TGPImage.FromStream(stream: IStream;
             useEmbeddedColorManagement: BOOL = FALSE): TGPImage;
begin
  result := TGPImage.Create(
      stream,
      useEmbeddedColorManagement
  );
end;

虽然这个方法是一个实例方法,但它对TGPImage实例没有任何作用,只调用Create

© www.soinside.com 2019 - 2024. All rights reserved.