Einfarbige Fake-Kacheln erkannten nur die Herkunftskachel eines Pixels, nicht den Versatz innerhalb der Kachel (72px Spielraum je Achse zwischen 3072px Kachelraster und 3000px Zuschnitt). fake_tile kodiert jetzt die globale Pixelposition, ein neuer Test nagelt mosaic_origin_px() == (24, 60) fest und prüft drei Pixel gegen den daraus berechneten globalen Index. Produktionscode unverändert (Ruling 8). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
25 lines
939 B
Python
25 lines
939 B
Python
import numpy as np
|
|
from leonida.coords import mosaic_origin_px
|
|
from leonida.tiles import assemble
|
|
|
|
def fake_tile(row: int, col: int) -> np.ndarray:
|
|
"""Kodiert die globale Pixelposition, damit ein falscher Versatz auffällt."""
|
|
ys, xs = np.mgrid[0:256, 0:256]
|
|
gy = (row * 256 + ys) % 251
|
|
gx = (col * 256 + xs) % 251
|
|
return np.dstack([gy, gx, np.full((256, 256), 7)]).astype(np.uint8)
|
|
|
|
def test_assemble_crops_to_slice():
|
|
mosaic = assemble(fake_tile)
|
|
assert mosaic.shape == (3000, 3000, 3)
|
|
|
|
def test_assemble_uses_the_exact_crop_offset():
|
|
# Einfarbige Kacheln würden jeden Versatz von 0 bis 72 px durchgehen lassen.
|
|
ox, oy = mosaic_origin_px()
|
|
assert (ox, oy) == (24, 60)
|
|
mosaic = assemble(fake_tile)
|
|
r0, c0 = 54, 60
|
|
for py, px in [(0, 0), (2999, 2999), (1234, 567)]:
|
|
gy, gx = r0 * 256 + oy + py, c0 * 256 + ox + px
|
|
assert tuple(mosaic[py, px]) == (gy % 251, gx % 251, 7)
|