เมธอด THotPDF.DecodeLoadedImageRegionAtResolution
decode สี่เหลี่ยมในพิกัดต้นทาง พร้อมอนุญาตให้ decoder เลือกระดับความละเอียดที่ต่ำกว่าได้ ขอแค่ยังตอบโจทย์ขนาด output ที่ขอมา
การประกาศ
function DecodeLoadedImageRegionAtResolution(
AImageStream: THPDFStreamObject;
RegionLeft, RegionTop, RegionRight, RegionBottom,
TargetPixelWidth, TargetPixelHeight: Integer): TBitmap;
ยูนิต
HPDFDoc
พารามิเตอร์
| ชื่อ | หน้าที่ |
|---|---|
AImageStream | loaded image XObject stream ที่จะ decode |
RegionLeft | พิกัดซ้ายของต้นทางแบบ inclusive |
RegionTop | พิกัดบนของต้นทางแบบ inclusive |
RegionRight | พิกัดขวาของต้นทางแบบ exclusive |
RegionBottom | พิกัดล่างของต้นทางแบบ exclusive |
TargetPixelWidth | ความกว้าง decode ขั้นต่ำที่ยังใช้งานได้จริง ก่อนการสเกลในการ render ขั้นสุดท้าย |
TargetPixelHeight | ความสูง decode ขั้นต่ำที่ยังใช้งานได้จริง ก่อนการสเกลในการ render ขั้นสุดท้าย |
ค่าที่ส่งกลับ
คืน bitmap ที่จองใหม่สำหรับ region ที่ clamp แล้วไม่ว่าง หรือ nil เมื่อ decode รูปหรือเรขาคณิตที่ขอมาไม่ได้
การเลือกความละเอียด
- JPEG 2000 จะเลือกการลดขนาดแบบ power-of-two ที่มากที่สุด ที่ความกว้างและความสูงหลัง decode ยังไม่ต่ำกว่าขนาด pixel ที่ขอมา
- การเลือกนี้ไม่มีทางลดความละเอียดของ dimension ใดจนเกินงาม จึงไม่ต้อง upscale โดยไม่จำเป็นก่อนการวาด
- การเลือก region ระดับ native และการเลือกความละเอียดถูกรวมกันก่อน wavelet reconstruction และการขยาย pixel
- JPEG 2000 workers แบบ crash-isolated ได้รับคำขอ reduction เดียวกัน และใช้ output budget ที่เล็กลงตามไปด้วย
- เมื่อ native fallback จัดการ region ที่ตัดผ่าน codestream tiles หลายชิ้น tile ที่เป็นอิสระต่อกันจะ decode พร้อมกันภายใต้ลิมิตของ cancellation, worker count, output และ peak memory
- ผลลัพธ์แบบขนานถูกประกอบกลับตามลำดับ row-major ที่นิ่ง และเมื่อ working budget ไม่พอ ระบบจะเลื่อนไปใช้เส้นทาง region แบบ sequential ให้เองอย่างไม่มีรอยต่อ
- ภาพ JPEG ที่เป็น DeviceRGB หรือ DeviceGray จะผ่านตัวถอดรหัส DCT ขนาดลดเมื่อ region หรือขนาดที่ขอไม่ตรงกับภาพเต็ม: มัน decode ที่ DCT scale ที่ลดลงซึ่งยังครอบคลุมคำขอ แล้วคืน region ที่ resample ให้พอดีขนาดที่ขอเป๊ะ
- image formats อื่นที่รองรับ และภาพ JPEG ใน color space อื่น จะ decode region ได้ตรงเป๊ะ และปล่อยให้ caller จัดการ scaling ขั้นสุดท้ายเอง
- caller เป็นเจ้าของ bitmap ที่ไม่ใช่ nil ที่ได้กลับมา และต้อง free มันเอง
ตัวอย่าง
Preview := PDF.DecodeLoadedImageRegionAtResolution(
ImageStream, 0, 0, SourceWidth, SourceHeight, 320, 200);
try
Canvas.StretchDraw(TargetRect, Preview);
finally
Preview.Free;
end;