Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 将PNG资源加载到TGPImage_Delphi_Png_Gdi+_Embedded Resource - Fatal编程技术网

Delphi 将PNG资源加载到TGPImage

Delphi 将PNG资源加载到TGPImage,delphi,png,gdi+,embedded-resource,Delphi,Png,Gdi+,Embedded Resource,我想将PNG资源加载到TGPImage 我找到的所有示例都使用位图绘制,这样会失去透明度 以下示例仅显示黑色图片: _shipImage := TGPImage.Create(); ms := TMemoryStream.Create(); png := TPngImage.Create; try png.LoadFromResourceName(HInstance, 'SHIP_RIGHT'); ms.Position := 0; png.SaveToStream(ms); m

我想将PNG资源加载到TGPImage

我找到的所有示例都使用位图绘制,这样会失去透明度

以下示例仅显示黑色图片:

_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);

问题在于
Winapi.GDIPOBJ
单元中
TGPImage.FromStream
的实现

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

尽管此方法是一个实例方法,但它不处理
TGPImage
实例,只调用
Create

然后尝试使用图像的颜色管理信息,即调用
\u shipmimage.FromStream(sa,True)。一些线索(但会创建TBitmap):
http://melander.dk/articles/alphasplash2/2/