סמנטיקות רינדור מתקדמות
רינדור עמוד טעון משמר על מצב Form XObject מקונן תוך החלת קבוצות transparency, מסכות רכות, פרוצדורות glyph מסוג Type 3, ופענוח אזורי תמונה גלויים לפי רזולוציה
קווי מתאר מקווקוים
עיבוד נתיבים native שומר על מערכי dash מלאים ועל הפאזה שלהם, לרבות מערכים באורך אי-זוגי, אורכים שבריים וקווים מקווקוים באורך אפס עם קצוות עגולים או מרובעים; תבנית ה-dash מתחילה מחדש בכל תת-נתיב
קווי מתאר בצבע אחיד וקליפים של קווי מתאר בתבנית מעבר-צבע חולקים נתיב גיאומטריית dash מתוחם אחד, שומרים על חיבורים בתוך קטעי צביעה רציפים ומחברים קטעי צביעה דרך נקודת ההתחלה של מתאר סגור
אורכי dash שומרים על סקלת הטרנספורמציה הנוכחית הממוצעת של ה-renderer, בעוד פיצול עקומות משתמש בשיטוח adaptive במרחב המכשיר; צביעת fill ו-clipping ממתין ממשיכים להשתמש בנתיב המקורי שלא פוצל
קבוצות transparency
- ערכי
/Matrixשל Form XObject מולחמים עם מטריצת הטרנספורמציה הנוכחית לפני הפעלת תוכן הקבוצה - קבוצות מבודדות משתמשות במישור alpha נפרד כך שתוכן שחור נשאר ניתן להבחנה מפיקסלים שקופים
- קבוצות knockout מחליפות את תרומת הקבוצה הקודמת באזורי צביעה חופפים
- תוכן הקבוצה מתחיל ממצב הערבוב Normal: מצב הערבוב, ה-alpha הקבוע והמסכה הרכה שבתוקף ב-
Doחלים על הקבוצה כולה - קבוצה שנצבעת במצב ערבוב אחר מערבבת את הצבע וה-alpha שלה עם הרקע; קבוצה לא מבודדת שמצבי הגרפיקה שלה מתערבבים רגילה מצוירת על שחור ועל לבן כדי לשחזר את ה-alpha שלה
- קבוצות מפוצלות לאריחים חסומים של 768 פיקסלים בעוד צביעת GDI, שלב halftone, קבוצות מקוננות, מסכות רכות ומיזוג שומרים על קואורדינטות מכשיר מוחלטות
- בתי הצורה מפוענחים וממורקזים פעם אחת לפני ביצוע האריח, ומסכות מקומיות זמניות של אריח משוחררות לפני האריח הבא
- קבוצות מקוננות נתמכות עם רקורסיה חסומה ושחזור מלא של מצב הגרפיקה אחרי כל הזמנת Form
מסכות רכות
- מסכות
/S /Alphaו-/S /Luminosityמוערכות מקבוצת המסכה - קבוצת המסכה מצוירת עם ערבוב Normal, בכל מצב ערבוב שהוא נושא בידי מצב הגרפיקה שמגדיר את המסכה
- מסכות Luminosity פותרות את
/CSשל קבוצת ה-transparency ומשקלות את הצבע הנפתר בקירוב PDF DeviceGray, כפי שצופים מודרניים עושים; הגדירו אתRenderColorimetricLuminosityMasksכדי לקחת במקום זאת ערך CIE Y קולורימטרי עבור מרחבי CIE /BCמאומת מול ספירת רכיבי מרחב ה-blending המדויקת ומספק את luminosity המומר מחוץ לתוכן המסכה הצבוע- צבעי Separation ו-DeviceN מומרים דרך מרחב Lab או ICCBased החלופי שלהם כך שרכיבי spot לעולם אינם דולפים אל תוך מסכה רכה
- פונקציות
/TRהעברה תומכות בפונקציות sampled, exponential, stitching ופונקציות PostScript calculator דרך המעריך המשותף של פונקציות /SMask /Noneמצמצם מסכה פעילה וצמודqאוQמשמר מצב מסכה כרגיל- מסכות מורכבות משומשות מחדש רק כשמילון המקור, מטריצת הטרנספורמציה הנוכחית וכוונת הרינדור כולם תואמים
Transfer ופונקציות sampled
/TR2 מקדם את /TR, פונקציה יחידה חלה על כל ערוץ פלט RGB, ומערך של ארבע פונקציות מפעיל את שלוש הרשומות הראשונות שלו באופן עצמאי תוך שימור רשומות /Identity ו-/Default
החלת מצב transfer חדש מחליפה כל ערוץ אטומית, כך שרשומות identity אינן יכולות לרשת ערכי אחזור ממצב גרפי קודם
פונקציות sampled מסוג Type 0 תומכות בממד קלט ופלט אחד עד ארבעה, ערכי /BitsPerSample 1, 2, 4, 8, 12, 16, 24 ו-32, מיפויי /Encode הפוכים או קדימה, טווחי /Decode עצמאיים, אינטרפולציה multilinear, אינטרפולציה קובית רב-ממדית וקוולים קוביים טבעיים עבור נתוני /Order 3 חד-ממדיים
בתי דגימה מפוענחים, ממדים מאומתים, מיפויים ונגזרות קוביות חולקים LRU של שמונה רשומות capped ב-64 MiB לכל Thread רינדור, בעוד פונקציות גדולות מדי או פגומות נכשלות מבלי להחליף חלקית את טבלת האחזור של transfer הפעיל
מסכי halftone
מערכי threshold מסוג Type 6, Type 10 ו-Type 16 מתבצעים ישירות עם אורכים מדויקים מפוענחים, threshold של 16 סיביות big-endian, השוואת רכיבים אדיטיבית ופסים תקופתיים קומפקטיים הנמנעים מהרחבת מסכים זוויתיים או דו-מלבניים
מילוני Type 5 בוחרים מסכי /Red, /Green ו-/Blue עצמאיים עם פל-חזרה של /Gray ו-/Default נדרשים, בעוד כל מסך נבחר יכול לעקוף את פונקציית ה-transfer הגלובלית
בתי threshold מאומתים והגיאומטריה המנורמלת שלהם חולקים LRU של 64 רשומות capped ב-64 MiB לכל renderer, וממדים פגומים, הקצאות גדולות מדי, מילוני Type 5 מקוננים או אי-התאמות באורך המטען מותירים את מצב המסך הפעיל המלא במצב continuous-tone
גליפים מסוג Type 3
CharProcs מסוג Type 3 רצים דרך מנוע אופרטורי התוכן המלא עם היקף המשאבים הנוכחי של מילון הגופן, תמיכת Form, קליפינג, תמונות, דוגמאות ורקורסיה חסומה
d0 ו-d1 מספקים מטריקות glyph בעוד פרוצדורת d1 שומרת על הצבע שנבחר בידי הקורא כפי שדורש מודל ההדמיה של PDF
CharProcs חוזרים עושים שימוש חוזר ברשימות תצוגה מפוענחות וממורקזות כשהגופן, ה-glyph, מטריצת המכשיר הלינארית ומצב הצבע תואמים; התרגום נשאר דינמי כך שתווים חוזרים במיקומים שונים חולקים רשומה אחת
ה-LRU לכל renderer שומר על 256 רשומות לכל היותר ו-131,072 token , עוקף כל CharProc מעל 16,384 token , ומדווח על התנהגותו דרך GetLastType3GlyphCacheStats
אזורי תמונה מקוטעים ומוקטנים
תמונות XObject מיושרות לציר מבקשות רק גבולות מקור גלויים ומעבירות את גודל הפיקסל הגלוי של המכשיר אל נתיב הפענוח
תמונה עם מסכה רכה מפוענחת במלואה בגודל שבו היא מצוירת, והמסכה שלה באותו גודל, כך שהמסכה נשארת מיושרת עם התמונה בעוד החתיכה מגבילה את מה שנצבע; מסכות JPEG משתמשות במפענח ה-DCT בגודל מקוטן
בעת רינדור, אזור מפוענח שגודלו לפחות כפולי מהגודל המצויר בשני הכיוון מוקטן לבדיוק לגודל המצויר באמצעות ממוצע שטחי לפני שיוצר או נשמר במטמון; תמונה גדולה שמצוירת קטנה נכנסת אז למטמון הפענוח, כך שקבוצה שמצוירת פעמיים או עמוד חוזר משתמשים בו שוב, והמסכה הרכה שלו מוחלת פיקסל מול פיקסל בגודל הזה. מסכות תמונת-stencil שומרות על הרזולוציה המלאה שלהן, ושיטות פענוח האזורים הציבוריות מחזירות את הגדלים המתועדים שלהן
JPEG 2000 משלב את ממשק האזור המקורי של ה-decoder עם רמת רזולוציה של חזקה-בשתיים שנבחרה לעמוד בשני ממדי היעד לפני שחזור wavelet והרחבת raster
זרמי codestream של JPEG 2000 הניתנים לכתובת אריחים יכולים גם לפענח אריח מאומת אחד ישירות דרך THPDFJpeg2000Decoder.LoadTileFromByteArray, כשמטא-נתוני רשת האריחים ומגבלות בתי הפלט חשופים על ידי ה-decoder
כשאזור מקורי מצטלב עם מספר אריחים עצמאיים, LoadRegionFromByteArrayParallel מקצה מצב OpenJPEG פרטי לכל עובד ומרכיב rasters מושלמים בסדר row-major דטרמיניסטי; ביטול, מגבלות פלט ותקציב שיא הזיכרון האפקטיבי יכולים להפסיק את התזמון או לבחור בפלתל הרציף
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;