fix: Slide-Modus Scale-Berechnung auf Ink-Span statt Ink-Count
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 36s
CI / test-go-edu-search (push) Successful in 31s
CI / test-python-klausur (push) Failing after 2m11s
CI / test-python-agent-core (push) Successful in 24s
CI / test-nodejs-website (push) Successful in 31s

totalInk zaehlte nur dunkle Pixel-Spalten (Striche), ignorierte
Luecken zwischen Buchstaben. Scale war dadurch viel zu klein,
Schrift unlesbar. Jetzt wird der Ink-Span (erstes bis letztes
dunkles Pixel) als Referenz fuer die Textbreite verwendet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-11 16:41:38 +01:00
parent bc13978bc1
commit 2010cab894

View File

@@ -129,16 +129,23 @@ export function useSlideWordPositions(
const spaceWidth = ctx.measureText(' ').width
const totalTextW = tokenWidths.reduce((a, b) => a + b, 0) + (tokens.length - 1) * spaceWidth
// Scale factor: how much to scale reference measurements to cell pixels
// We use the total ink coverage as reference for total text width.
let totalInk = 0
for (let x = 0; x < cw; x++) totalInk += ink[x]
// Scale factor: map measured text width → pixel width on image.
// Use the total INK SPAN (first dark pixel to last dark pixel),
// not the count of dark columns. Text characters have gaps between
// strokes, so counting only dark pixels gives a much-too-small scale.
let firstInk = -1, lastInk = -1
for (let x = 0; x < cw; x++) {
if (ink[x]) {
if (firstInk < 0) firstInk = x
lastInk = x
}
}
// If almost no ink, fall back to centering
if (totalInk < 3) continue
// If almost no ink, skip
if (firstInk < 0 || lastInk <= firstInk) continue
// The scale maps measured text width → pixel width on the image
const scale = Math.min(totalInk / totalTextW, cw / totalTextW)
const inkSpan = lastInk - firstInk + 1
const scale = inkSpan / totalTextW
// --- Slide each token from left to right ---
const wordPos: WordPosition[] = []