Метод THotPDF.DecodeLoadedImageRegionAtResolution
Декодирует прямоугольник в исходных координатах, позволяя декодеру выбрать более низкий уровень разрешения, который всё ещё удовлетворяет запрошенному размеру вывода
Объявление
function DecodeLoadedImageRegionAtResolution(
AImageStream: THPDFStreamObject;
RegionLeft, RegionTop, RegionRight, RegionBottom,
TargetPixelWidth, TargetPixelHeight: Integer): TBitmap;
Модуль
HPDFDoc
Параметры
| Имя | Назначение |
|---|---|
AImageStream | Загруженный image XObject stream для декодирования |
RegionLeft | Левая исходная координата, включительно |
RegionTop | Верхняя исходная координата, включительно |
RegionRight | Правая исходная координата, не включается |
RegionBottom | Нижняя исходная координата, не включается |
TargetPixelWidth | Минимальная полезная ширина декодирования до финального масштаба отрисовки |
TargetPixelHeight | Минимальная полезная высота декодирования до финального масштаба отрисовки |
Возвращаемое значение
Возвращает вновь выделенный bitmap для обрезанной непустой области или nil, если изображение либо запрошенная геометрия не декодируются
Выбор разрешения
- JPEG 2000 выбирает наибольшее сокращение степени двойки, при котором декодированные ширина и высота остаются не меньше запрошенного размера в пикселях
- Выбор никогда не занижает ни одно из измерений и потому избавляет от ненужного апскейла перед отрисовкой
- Нативный выбор области и выбор разрешения объединяются до вейвлет-реконструкции и разворачивания пикселей
- Изолированные от сбоев JPEG 2000 workers получают тот же запрос на сокращение и используют соответственно меньший бюджет вывода
- Если нативный fallback обрабатывает область, пересекающую несколько codestream tile, независимые tile декодируются параллельно в пределах лимитов на отмену, число workers, вывод и пиковую память
- Параллельные результаты складываются в стабильном порядке «по строкам», а нехватка рабочего бюджета прозрачно переключает на последовательный путь обработки области
- JPEG-изображение в DeviceRGB или DeviceGray при несовпадении области или запрошенного размера с полным изображением идёт через DCT-декодер уменьшенного размера: оно декодируется в пониженном DCT-масштабе, который всё же покрывает запрос, и возвращает область, передискретизированную точно до запрошенного размера
- Остальные поддерживаемые форматы изображений, а также JPEG-изображения в других цветовых пространствах, сохраняют точное декодирование области, а финальное масштабирование оставляют вызывающему коду
- Возвращённый bitmap (не nil) принадлежит вызывающему коду и должен быть освобождён
Пример
Preview := PDF.DecodeLoadedImageRegionAtResolution(
ImageStream, 0, 0, SourceWidth, SourceHeight, 320, 200);
try
Canvas.StretchDraw(TargetRect, Preview);
finally
Preview.Free;
end;