- PackBits scans each row once; RLE planes encode their rows on worker
threads on native targets (rayon), keeping the exact packet boundaries
and the fallback when RLE does not pay.
- ZIP output grows in bounded blocks and is compacted to its encoded size,
instead of reserving the raw size; native threads reuse a finished
encoder's working buffers.
- 16/32-bit prediction works on owned buffers in one pass.
- Filter-effects planes and pattern blocks encode from borrowed rows and
owned buffers without the intermediate copies.
The encoded bytes are unchanged.
Ported from storytold/photocraft#7797 (its crates/psd part), at
a1ee8355a4651d379286cd13f92dabe4344e295f.
Co-authored-by: Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com>