Розширена семантика рендерингу

Рендеринг завантаженої сторінки зберігає вкладений стан Form XObject, застосовуючи групи прозорості, м'які маски, процедури гліфів Type 3 і декодування видимих ділянок зображення з урахуванням роздільної здатності

Штрихові обводки контурів

Нативний рендеринг контурів зберігає повні масиви штрихів та їхню фазу, зокрема масиви непарної довжини, дробові довжини та зафарбовані штрихи нульової довжини з круглими чи квадратними наконечниками; візерунок штрихів перезапускається на кожному підконтурі

Обводки суцільним кольором і відсікання обводок градієнтними патернами спільно використовують один обмежений шлях геометрії штрихів, зберігають з'єднання всередині неперервних зафарбованих ділянок та з'єднують зафарбовані ділянки через початкову точку замкненого контуру

Довжини штрихів зберігають середній масштаб поточного перетворення рендерера, тоді як розбиття кривих використовує адаптивне сплощення у просторі пристрою; заливання та відкладене відсікання продовжують використовувати початковий нерозбитий контур

Групи прозорості

М'які маски

Функції передачі та дискретизовані функції

/TR2 має пріоритет над /TR, одна функція застосовується до кожного вихідного каналу RGB, а масив із чотирьох функцій застосовує перші три елементи незалежно, зберігаючи записи /Identity і /Default

Застосування нового стану передачі атомарно замінює кожен канал, тому записи ідентичності не можуть успадковувати значення пошуку з ранішого стану графіки

Дискретизовані функції Type 0 підтримують від одного до чотирьох вимірів введення та виводу, значення /BitsPerSample 1, 2, 4, 8, 12, 16, 24 і 32, обернені або прямі відображення /Encode, незалежні діапазони /Decode, багатолінійну інтерполяцію, багатовимірну кубічну інтерполяцію та природні кубічні сплайни для одновимірних даних /Order 3

Декодовані байти зразків, перевірені розмірності, відображення та кубічні похідні поділяють LRU із восьми записів із межею 64 МіБ на потік рендерингу, тоді як надмірно великі або пошкоджені функції не вдаються без часткової заміни активного пошуку передачі

Растрові екрани

Масиви порогів Type 6, Type 10 і Type 16 виконуються безпосередньо з точними декодованими довжинами, 16-бітними порогами зі старшим байтом першим, порівнянням адитивних компонентів та компактними періодичними смугами, що уникають розширення повернутих або прямокутних екранів

Словники Type 5 обирають незалежні екрани /Red, /Green і /Blue з резервними варіантами /Gray і обов'язковим /Default, тоді як кожен обраний екран може замінити глобальну функцію передачі

Перевірені байти порогів та їхня нормалізована геометрія поділяють LRU із 64 записів із межею 64 МіБ на рендерер, а пошкоджені розмірності, надмірні розподілення, вкладені словники Type 5 або невідповідності довжини корисного навантаження залишають повний активний стан екрана в режимі безперервного тону

Гліфи Type 3

Підпрограми Type 3 CharProc виконуються через повний двигун операторів вмісту з поточним обсягом ресурсів словника шрифту, підтримкою Form, обрізанням, зображеннями, шаблонами та обмеженою рекурсією

d0 і d1 надають метрики гліфа, а процедура d1 зберігає обраний викликаючим кодом колір, як вимагає модель зображення PDF

Повторювані CharProc повторно використовують декодовані та токенізовані списки відмальовування, коли збігаються шрифт, гліф, лінійна матриця пристрою та стан кольору; переклад залишається динамічним, тому повторювані символи в різних позиціях поділяють один запис

LRU на рендерер зберігає щонайбільше 256 записів і 131072 токенів, обходить будь-яку CharProc понад 16384 токенів і повідомляє про свою поведінку через GetLastType3GlyphCacheStats

Обрізані та зменшені ділянки зображення

XObjects зображень, вирівняні за осями, запитують лише видимі межі джерела та передають видимий розмір пікселів пристрою в шлях декодування

Зображення з м'якою маскою декодується цілим у розмірі, в якому воно відмальовується, а його маска — у тому самому розмірі, тож маска залишається вирівняною із зображенням, поки обрізання обмежує відмальоване; маски JPEG використовують DCT-декодер зменшеного розміру

Під час рендерингу декодовану ділянку, яка щонайменше вдвічі перевищує розмір відмальовування в обох напрямах, стискають до точного розміру відмальовування усередненням по площі перед відмальовуванням або кешуванням; тоді велике зображення, відмальоване зменшеним, вміщується в кеш декодування, тож група, відмальована двічі, або повторювана сторінка перевикористовує його, а його м'яка маска застосовується піксель до пікселя в цьому розмірі. Маски трафаретних зображень зберігають повну роздільну здатність, а публічні методи декодування ділянок повертають задокументовані розміри

JPEG 2000 поєднує власний API ділянок декодера з рівнем роздільної здатності, обраним як степінь двійки, щоб задовольнити обидва цільові розміри до реконструкції вейвлетів і розширення растра

Кодестрими JPEG 2000 з адресованими тайлами можуть також декодувати один перевірений тайл безпосередньо через THPDFJpeg2000Decoder.LoadTileFromByteArray, а метадані сітки тайлів і межі виводу байтів надаються декодером

Коли власна ділянка перетинає кілька незалежних тайлів, LoadRegionFromByteArrayParallel призначає приватний стан OpenJPEG кожному робочому потокові та компонує завершені растери в детермінованому порядку по рядках; скасування, межі виводу та ефективний бюджет пікової пам'яті можуть зупинити планування або обрати послідовний резервний варіант

Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
  Canvas.Draw(0, 0, Region);
finally
  Region.Free;
end;

Пов'язані API