PDFium Delphi Component Docs

מתודת RenderPageBandedToEncoder

Component: TPdf  ·  Unit: PDFium
מרנדר את העמוד הנוכחי בפסים אופקיים חתוכים ומעביר כל מפת סיביות של פס אל מקודד תמונות בפסים שסיפק הקורא

Syntax

function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
  Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
  Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;

Width, HeightInteger. גודל תמונת העמוד המלאה בפיקסלים, כאילו רונדרה בפעם אחת
BandHeightInteger. גובה כל פס בפיקסלים. הפס האחרון קצר יותר כאשר Height אינו כפולה שלו
EncoderTPdfBandedImageEncoder. מופע מקודד בבעלות הקורא שמקבל את זרם הפסים
RotationTRotation. סיבוב התצוגה שיוחל על העמוד: ro0, ro90, ro180 או ro270
OptionsTRenderOptions. דגלי רינדור
ColorTColor. מילוי הרקע שיוחל על כל פס לפני הרינדור
ResultTPdfBandedImageReport. מספרי פסים, שורות שקודדו, שיא בייטי פס, בייטי פלט ודגל השלמה

Description

המתודה מניעה את אותה לולאת פסים כמו 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

אחסון הפיקסלים בשיא נשאר בגודל של מפת סיביות אחת של פס, כך שפוסטרים ושרטוטים הנדסיים אפשר לייצא ברזולוציית הדפסה מבלי להקצות אי פעם את תמונת היעד המלאה

Remarks

העברת מקודד nil, ממדים שאינם חיוביים, או גובה פס שאינו חיובי זורקת EPdfError

המכפלה של Width ו־Min(BandHeight, Height) חייבת להישאר בתוך רבע מטווח ה־Integer הניתן למיפוי, אחרת EPdfError מדווח שחוצץ הפס חורג מהגודל הניתן למיפוי

דרסו את GetBytesWritten ביורש של המקודד כדי לדווח על טלמטריית פלט ספציפית למקודד אל OutputBytes; המימוש הבסיסי מחזיר 0

Example

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;

See Also

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile