v0.60.0 — DZI/SZI Overlap>0 support (+ OverlapMode API, edge-tile ReadRegion fix)
DZI/SZI Overlap > 0 support — clean composited output, new OverlapMode /
TileContentRect API, and a pre-existing bare-DZI/SZI edge-tile ReadRegion fix.
Added
- DZI/SZI
Overlap > 0support. Bare DZI (formats/dzi) and SZI (formats/szi)
pyramids whose manifest declares a tile overlap now read correctly:
ReadRegion/ReadRegionScaled/ScaledStrips/StitchedTilereturn clean,
overlap-free composited pixels, while rawTile()/DecodedTile()return the
on-disk padded tile. Newopentile.OverlapModeenum (OverlapNone/
OverlapBordered/OverlapStitched) onLevel;Level.Overlappingis now the
derived convenienceOverlapMode != OverlapNone(value unchanged for every
previously readable slide). NewLevel.TileContentRect(col,row) (Region, bool)
returns the per-tile content crop within a decoded tile.Overlap = 0reads are
byte-identical. Validated against libvips overlap_0/overlap_1 DZIs of the same
slide (region MAD ≈ JPEG noise) plus synthetic lossless PNG fixtures.
Changed
Level.Overlapping/Level.Grid/Level.TileOverlapfield docs reworded to
distinguish "padded tiles" (OverlapBordered) from "compacted grid"
(OverlapStitched); the "Grid does not tile Size" property now belongs to
OverlapMode == OverlapStitched.
Fixed
- Bare DZI/SZI
ReadRegionon right/bottom edge tiles. Bare DZI/SZI store edge
tiles unpadded at their actual clipped size (unlike TIFF's zero-padded edge
tiles); the region compositor decoded each tile into a fixedTileSizescratch,
which the strict decoder rejected for a sub-TileSizeedge tile
(dst 256x256 != decoded 176x256), soReadRegionfailed on any region touching
a right/bottom edge tile. The compositor now decodes unpadded edge tiles into a
natural-size buffer; byte-identical for padded-tile formats (TIFF/BIF). Pre-existing
since the v0.52 bare-DZI reader.