Интерфейс IHPDFDecodedBitmapHandle

Даёт неизменяемый доступ с подсчётом ссылок к хранилищу декодированного изображения, которое разделяют cache загруженных изображений, ожидающие singleflight и рендереры

Объявление

IHPDFDecodedBitmapHandle = interface
  function GetWidth: Integer;
  function GetHeight: Integer;
  function GetPixelFormat: TPixelFormat;
  function GetByteSize: Int64;
  function CreateBitmapCopy: TBitmap;
  procedure StretchDraw(DestinationDC: HDC;
    const Destination: TRect; StretchMode: Integer);
end;

Владение

Интерфейс удерживает декодированное хранилище живым независимо от вытеснения и инвалидации cache и уничтожения документа

Подсчёт ссылок потокобезопасен, а общий изменяемый TBitmap наружу не выдаётся

Отрисовка и копии

StretchDraw рисует из неизменяемого общего хранилища, не создавая bitmap во владении вызывающего, и сериализует доступ к базовому GDI-ресурсу

CreateBitmapCopy возвращает изолированный TBitmap во владении вызывающего для API, которым нужны изменяемые пиксели

Связанные API

THotPDF.AcquireLoadedImageStream · THotPDF.AcquireLoadedImageRegionAtResolution · Шардированный cache декодирования загруженных изображений