将 PNG 资源加载到 TGPImage
Load PNG resource to TGPImage
我想加载 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
!!!
我想加载 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
!!!