Files
pdfcraft/docs
kronbiiandClaude Opus 5.5 ff227b770c M2: area-average shrunk scans and smooth enlarged ones
Scanned pages looked thin and broken at screen size. An image that does not
ask for /Interpolate (most scans) was pre-shrunk with nearest-neighbour since
about one sample in ten and dropped most strokes of its text, and the nearest
sampler then read the shrunk raster again at a fractional offset.

- Shrinking (vendored hayro patch 21): non-interpolated images outside Type 3
  glyphs are area-averaged (area_shrink: each device pixel the
  coverage-weighted mean of the samples it covers, 16.16 fixed point whose
  weights sum to exactly one, premultiplied when masked) to their snapped
  device rectangle and drawn 1:1. /Interpolate governs smoothing when an image
  is enlarged (ISO 32000-2 8.9.5.3); averaging adds nothing between samples
  and drops none. PicScale's Box/Area filters were not usable: shrinking, they
  average a window four target pixels wide.
- Enlarging (patch 28): an image of page-scan size (512+ samples on its
  shorter side) is drawn bilinearly when enlarged, so a zoomed scan has no
  staircase edges; icons, QR codes and pixel art keep their hard pixels.
- A snapped image whose shrink failed keeps the full transform instead of
  being drawn at its source size (latent in the interpolated path too).

Measured on a 13-page 300 dpi scan at 96, 120 and 192 dpi: every rendered
sample is within 1 of the exact area average (it was up to 255 off, 17-23%
of samples by more than 1). Bilinear zoom costs nothing measurable (four
1024 px tiles at 400%: 50 ms, nearest 48 ms; bicubic was 267 ms).

Review fixes:

- a tile snaps a shrunk image's half-pixel edges where the whole page does
- a scan shrunk one way is smoothed the way it is stretched
- a smaller soft mask doesn't let transparent colour through the area shrink

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 11:32:52 +02:00
..
2026-10-27 20:52:31 +00:00
2026-10-31 04:25:36 +00:00