Розширена семантика рендерингу
Рендеринг завантаженої сторінки зберігає вкладений стан Form XObject, застосовуючи групи прозорості, м'які маски, процедури гліфів Type 3 і декодування видимих ділянок зображення з урахуванням роздільної здатності
Штрихові обводки контурів
Нативний рендеринг контурів зберігає повні масиви штрихів та їхню фазу, зокрема масиви непарної довжини, дробові довжини та зафарбовані штрихи нульової довжини з круглими чи квадратними наконечниками; візерунок штрихів перезапускається на кожному підконтурі
Обводки суцільним кольором і відсікання обводок градієнтними патернами спільно використовують один обмежений шлях геометрії штрихів, зберігають з'єднання всередині неперервних зафарбованих ділянок та з'єднують зафарбовані ділянки через початкову точку замкненого контуру
Довжини штрихів зберігають середній масштаб поточного перетворення рендерера, тоді як розбиття кривих використовує адаптивне сплощення у просторі пристрою; заливання та відкладене відсікання продовжують використовувати початковий нерозбитий контур
Групи прозорості
- Значення
/MatrixForm XObject об'єднуються з поточною матрицею перетворення до виконання вмісту групи - Ізольовані групи використовують окрему площину альфи, тому чорний вміст залишається відмінним від прозорих пікселів
- Групи Knockout замінюють попередній внесок групи в областях суміжного відмалювання
- Вміст групи починається з нормального режиму блендингу: режим блендингу, постійна альфа та м'яка маска, чинні на момент
Do, застосовуються до групи як цілого - Група, відмалювана з іншим режимом блендингу, змішує власний колір і альфу з фоном; неізольовану групу, чиї власні стани графіки блендяться нормально, відмальовано на чорному та на білому, щоб відновити її альфу
- Групи розбиваються на обмежені тайли розміром 768 пікселів, тоді як відмалювання GDI, фаза растрування, вкладені групи, м'які маски та композитинг зберігають абсолютні координати пристрою
- Байти форми декодуються та токенізуються один раз до виконання тайлів, а тимчасові локальні маски тайлів звільняються до наступного тайла
- Вкладені групи підтримуються з обмеженою рекурсією та повним відновленням стану графіки після кожного виклику Form
М'які маски
- Маски
/S /Alphaі/S /Luminosityобчислюються з групи маски - Групу маски відмальовано з нормальним блендингом, який би режим блендингу не ніс стан графіки, що встановлює маску
- Маски Luminosity визначають
/CSгрупи прозорості та зважують визначений колір за наближенням DeviceGray PDF, як роблять типові переглядачі; щоб натомість брати колориметричний CIE Y для просторів на основі CIE, установітьRenderColorimetricLuminosityMasks /BCперевіряється щодо точного числа компонентів простору блендингу та надає перетворену яскравість поза відмальованим вмістом маски- Фарба Separation і DeviceN перетворюється через її альтернативний простір Lab або ICCBased, тому компоненти спеціальних кольорів ніколи не потрапляють у м'яку маску
- Функції передачі
/TRпідтримують дискретизовані, експоненційні, зшиті та калькуляторні функції PostScript через спільний обчислювач функцій /SMask /Noneскидає активну маску, аqчиQзберігають стан маски у звичайному режимі- Скомпільовані маски повторно використовуються лише тоді, коли збігаються словник джерела, поточна матриця перетворення та намір рендерингу
Функції передачі та дискретизовані функції
/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;