Загрузить TGPBitmap из MemoryStream - PullRequest
0 голосов
/ 30 марта 2020

Меня попросили исправить проблему (не связанную с этим вопросом) в устаревшей программе Delphi. После исправления некоторых проблем с отсутствующими компонентами, я застрял с некоторыми функциями GDI Plus, которые мешают мне компилировать программу. Одна из функций, где это используется:

function TDownLoadItem.LoadRawBitmapFromStream(var bm: TBitmap): Boolean;
var
  image: TGPBitmap;
begin
  Result := False;
  if Content.Size = 0 then
    exit;

  // NOTE: Content is a TMemoryStream, declared globally.
  image := GDIPlusHelper.LoadBitmapFromStream(Content); // <== This is where the problem is....

  try
    bm.Width := image.GetWidth;
    bm.Height := image.GetHeight;
    with TGPGraphics.Create(bm.Canvas.Handle) do
      try
        DrawImage(image, 0, 0, image.GetWidth, image.GetHeight);
        Result := True;
      finally
        Free;
      end;
  finally
    image.Free;
  end;
end;

Я думаю (не уверен), что последняя использованная версия Delphi была 2006, я на Delphi Rio 10.3.

В сети Мне удалось найти GDI + 1.2, но это не решает проблему. Процедура LoadBitmapFromStream не завершается в этих библиотеках. GDIPlusHelper был переименован в GDIPlusHelpers, и большая часть кода изменилась с классов на интерфейсы. Я подозреваю, что использовались более старые версии библиотек GDI Plus, но я не могу их найти.

Переработка кода была бы слишком сложной, так как требовало бы, чтобы Content был IStream вместо TMemoryStream. Кроме того, простое использование TBitmap также невозможно, так как другой код (не показан) использует функциональность, указанную c для TGPBitmap (например, RotateFlip).

Есть предложения, как это исправить? Заранее спасибо!

...