function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;
| Width, Height | Integer. גודל תמונת העמוד המלאה בפיקסלים, כאילו רונדרה בפעם אחת |
| BandHeight | Integer. גובה כל פס בפיקסלים. הפס האחרון קצר יותר כאשר Height אינו כפולה שלו |
| Encoder | TPdfBandedImageEncoder. מופע מקודד בבעלות הקורא שמקבל את זרם הפסים |
| Rotation | TRotation. סיבוב התצוגה שיוחל על העמוד: ro0, ro90, ro180 או ro270 |
| Options | TRenderOptions. דגלי רינדור |
| Color | TColor. מילוי הרקע שיוחל על כל פס לפני הרינדור |
| Result | TPdfBandedImageReport. מספרי פסים, שורות שקודדו, שיא בייטי פס, בייטי פלט ודגל השלמה |
המתודה מניעה את אותה לולאת פסים כמו RenderPageBanded, אך במקום callback של היישום היא דוחפת כל מפת סיביות טרייה בגודל Width x גובה־פס דרך גשר פנימי אל שלוש המתודות הווירטואליות של המקודד שסיפק הקורא: BeginImage(Width, Height) רצה ראשונה, WriteBand(BandIndex, BandTopY, Bitmap) מקבלת קריאה אחת לכל פס מלמעלה למטה, ו־EndImage(Completed) סוגרת את התמונה
BandIndex הוא מבוסס־אפס ו־BandTopY הוא היסט ה-y של ראש הפס בפיקסלים של העמוד המלא — בדיוק מה שכותב רצועות צריך כדי למקם את השורות בקובץ הפלט. מפת הסיביות שייכת ללולאת הרינדור ומשוחררת מיד אחרי ש־WriteBand חוזרת, כך שמקודד שצריך לשמור את הפיקסלים חייב להעתיק אותם
WriteBand מחזירה True להמשך או False לביטול נקי של שאר הפסים. EndImage(True) נקראת רק כאשר כל השורות המבוקשות קודדו; ריצה שבוטלה או נכשלה מקבלת EndImage(False), כאשר החריגות מנתיב הכישלון הזה מושתקות
הדוח שמוחזר נושא Format = pbifCustom, את מספר הפסים שרונדרו ואושרו ב־BandsRendered וב־BandsEncoded, את השורות שאושרו ב־RowsEncoded, את מפת הסיביות הגדולה ביותר של פס — Width x גובה פס x 4 בייטים — ב־PeakBandBytes, את ערך Encoder.GetBytesWritten ב־OutputBytes, ואת Completed = True בדיוק כאשר RowsEncoded = Height
אחסון הפיקסלים בשיא נשאר בגודל של מפת סיביות אחת של פס, כך שפוסטרים ושרטוטים הנדסיים אפשר לייצא ברזולוציית הדפסה מבלי להקצות אי פעם את תמונת היעד המלאה
העברת מקודד nil, ממדים שאינם חיוביים, או גובה פס שאינו חיובי זורקת EPdfError
המכפלה של Width ו־Min(BandHeight, Height) חייבת להישאר בתוך רבע מטווח ה־Integer הניתן למיפוי, אחרת EPdfError מדווח שחוצץ הפס חורג מהגודל הניתן למיפוי
דרסו את GetBytesWritten ביורש של המקודד כדי לדווח על טלמטריית פלט ספציפית למקודד אל OutputBytes; המימוש הבסיסי מחזיר 0
type
TRawStripEncoder = class(TPdfBandedImageEncoder)
public
procedure BeginImage(Width, Height: Integer); override;
function WriteBand(BandIndex, BandTopY: Integer;
Bitmap: TBitmap): Boolean; override;
procedure EndImage(Completed: Boolean); override;
end;
Encoder := TRawStripEncoder.Create;
try
Report := Pdf.RenderPageBandedToEncoder(4960, 7016, 512, Encoder);
LogBandedExport(Report.BandsEncoded, Report.PeakBandBytes);
finally
Encoder.Free;
end;