sprite_transform — GFX2D sprite op

• Data kinds: rgba → rgba

• Call: import fullseye as fs; fs.ledger.sprite_transform(sprite, angle_deg=0.0, scale=1.0, interp='bilinear', out_shape=None) (to call the implementation directly, import gfx2d; gfx2d.sprite_transform(sprite, angle_deg=0.0, scale=1.0, interp='bilinear', out_shape=None); from the registry, opsgfx2d.get("sprite_transform"))

Usage

Rotate and/or scale an rgba sprite about its centre.

A positive angle_deg turns the sprite clockwise on screen, because the row axis points down. interp is "nearest", "bilinear" or "bicubic" (a cubic spline; it overshoots, and the overshoot is clipped back into the premultiplied range).

The resampling happens in premultiplied space and the result is converted back. Interpolating straight colour instead mixes in the colour of fully transparent pixels — usually black, and invisible in the alpha channel — which shows up as a dark fringe. Measured on a white disc whose transparent region is black, composited over mid-grey: the straight-space result differs from this one by up to 0.203 and by 0.048 on average over the pixels it changes (rotations of 13, 37 and 45 degrees; the maximum was 0.197, 0.203, 0.156).

Exact where it can be: angle_deg=0, scale=1 returns the input bit for bit, and a multiple of 90 degrees with interp="nearest" permutes the alpha channel exactly (colour matches to 1.2e-16, the cost of the premultiply round trip). Everything else costs interpolation: the measured round trip of +37 then -37 degrees, bilinear, is a mean alpha error of 0.0150 with a maximum of 0.8125 at the one pixel where the edge crosses a sample.

out_shape is (height, width); the default is the bounding box of the transformed sprite, rounded up.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• gfx2d_scene — py -3.11 examples/gfx2d_scene.py

Ops the type connects to (they accept rgba as input)

premultiply · alpha_composite · sprite_blit · sprite_sheet_slice · nine_slice

Same category (sprite)

sprite_synthesize · sprite_blit · sprite_sheet_slice · nine_slice


*Provenance: gfx2d.py — GFX2D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.