Загрузить ресурс PNG в TGPImage - PullRequest
       26

Загрузить ресурс PNG в TGPImage

0 голосов
/ 27 августа 2018

Я бы хотел загрузить ресурс 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);

1 Ответ

0 голосов
/ 30 августа 2018

Проблема заключалась в реализации TGPImage.FromStream в Winapi.GDIPOBJ единице.

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

Хотя этот метод является методом экземпляра, он ничего не делает с TGPImage экземпляром и вызывает только Create !!!

...