Разширена семантика на изобразяването

Изобразяването на заредени страници запазва състоянието на вложените Form XObject, като прилага групи за прозрачност, меки маски, глифови процедури от Type 3 и декодиране на видими области от изображения според разделителната способност

Пунктирани щрихи по пътища

Нативното рисуване на пътища запазва пълните dash масиви и фазата им, включително масиви с нечетна дължина, дробни дължини и нуледължини изрисувани тирета с round или square капачета; dash шаблонът се рестартира във всеки подпът

Щрихите с плътен цвят и clip-овете на gradient-pattern щрихи споделят един ограничен геометричен път за dash, запазват съединенията вътре в непрекъснатите изрисувани участъци и съединяват изрисуваните участъци през началната точка на затворен контур

Dash дължините запазват средния мащаб на текущата трансформация на renderer-а, докато разцепването на криви ползва адаптивно изглаждане в device пространство; запълването и чакащото клипиране продължават да ползват оригиналния неразцепен път

Групи за прозрачност

Меки маски

Функции за прехвърляне и дискретизирани функции

/TR2 има предимство пред /TR, единична функция се прилага към всеки RGB изходен канал, а масив от четири функции прилага първите си три елемента независимо един от друг, като записите /Identity и /Default се запазват

Прилагането на ново състояние за прехвърляне заменя атомарно всеки канал, така че записите за идентичност не могат да наследят стойности от таблицата за търсене от по-ранно графично състояние

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

Декодираните байтове на извадките, валидираните измерения, съпоставянията и кубичните производни споделят осемзаписен LRU, ограничен до 64 MiB за нишка за изобразяване, докато прекомерно големите или неправилно форматираните функции се провалят, без частично да заменят активната таблица за търсене при прехвърляне

Полутонови растери

Праговите масиви от Type 6, Type 10 и Type 16 се изпълняват директно с точни декодирани дължини, 16-битови прагове в big-endian ред, сравнение на адитивни компоненти и компактни периодични ивици, които избягват разширяването на наклонени или двуправоъгълни растери

Речниците Type 5 избират независими растери /Red, /Green и /Blue с резервни варианти /Gray и изисквания /Default, докато всеки избран растер може да замени глобалната функция за прехвърляне

Валидираните прагови байтове и нормализираната им геометрия споделят 64-записен LRU, ограничен до 64 MiB за изобразяващ модул, а неправилните измерения, прекомерно големите разпределяния, вложените речници Type 5 или несъответствията в дължината на полезния товар оставят цялото активно състояние на растера в режим на непрекъснат тон

Глифове Type 3

CharProcs от Type 3 се изпълняват чрез пълния механизъм за оператори на съдържание с текущия обхват на ресурсите от речника на шрифта, поддръжка на Form, изрязване, изображения, шарки и ограничена рекурсия

d0 и d1 предоставят метриките на глифа, докато процедура d1 запазва избрания от извикващата страна цвят, както се изисква от модела за изобразяване на PDF

Повтарящите се CharProcs използват повторно декодирани и токенизирани списъци за показване, когато шрифтът, глифът, линейната матрица на устройството и състоянието на цвета съвпадат; транслацията остава динамична, така че повтарящите се знаци на различни позиции споделят един запис

LRU за всеки изобразяващ модул съхранява най-много 256 записа и 131,072 токена, пропуска всеки CharProc над 16,384 токена и отчита поведението си чрез GetLastType3GlyphCacheStats

Изрязани и намалени области от изображения

Изображенията XObject с подравнени по осите граници заявяват само видимите граници на източника и предават размера на видимите пиксели на устройството към пътя за декодиране

Изображение с мека маска се декодира цяло с размера, с който се рисува, а маската му със същия размер, така че маската остава подравнена с изображението, докато изрязването ограничава това, което се рисува; 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