🖨️Simulierter Flachbettscanner

Ein virtueller Scanner nach dem Vorbild des SANE-Backends test: Bereich auf dem Glas aufziehen, Modus und Auflösung wählen – alle Werte, die sane_get_parameters() liefern würde, werden live berechnet.

🧪
Simulation im Browser. Diese Seite steuert keinen echten Scanner an – der Server hat keinen, und ein öffentlich erreichbarer Scanner wäre ein Sicherheitsrisiko. Der simulierte Scanner bildet das Verhalten der SANE-API nach (Vorbild: das SANE-Test-Backend test), alle Zahlen werden mit den echten Formeln berechnet. Das echte test-Backend hat eine Scanfläche von 0–200 mm (Standard 80 × 100 mm bei 50 dpi); dieser Simulator nutzt ein typisches Flachbett von 215,9 × 297 mm.
Modus (mode)
Bittiefe (depth)
Auflösung (dpi)
Pixel-Rundung
🪟 Vorlagenglas 215,9 × 297 mm(0, 0) → (210, 297)
tlbr

Auf dem Glas mit der Maus/dem Finger einen Bereich aufziehen. Ursprung oben links, wie in SANE (tl = top-left, br = bottom-right).

pixels_per_line
2.480
210 mm breit
lines
3.508
297 mm hoch
bytes_per_line
7.440
24 Bit pro Pixel
Rohdaten
24,9 MiB
26.099.520 Bytes
pixels_per_line = 210 mm ÷ 25,4 × 300 dpi = 2.480,315 → 2480 (gerundet)
lines           = 297 mm ÷ 25,4 × 300 dpi = 3.507,874 → 3508 (gerundet)
bytes_per_line  = B · n · d / 8 = 3 · 2480 · 8 / 8 = 7.440
Rohdaten        = bytes_per_line × lines = 7.440 × 3.508 = 26.099.520 Bytes (24,9 MiB)
PNM-Datei       = Kopf "P6⏎2480 3508⏎255⏎" (17 B) + Rohdaten = 26.099.537 Bytes
Ergebnis: 2.480 × 3.508 Pixel

Jedes Pixel wird in seiner Mitte abgetastet (Vorlage in mm definiert). Bei 75 dpi sieht man Treppenstufen, die feinen Linienpaare verschwimmen oder werden zu Moiré; Lineart schneidet bei 50 % Helligkeit hart ab. Die PNG-Datei ist komprimiert und daher viel kleiner als die Rohdaten.

📊 Rohdatenmenge für diesen Bereich
dpiPixelLineart 1 BitGrau 8 BitFarbe 24 BitFarbe 48 Bit
75620 × 87766,8 KiB531 KiB1,56 MiB3,11 MiB
1501.240 × 1.754265,5 KiB2,07 MiB6,22 MiB12,4 MiB
3002.480 × 3.5081,04 MiB8,3 MiB24,9 MiB49,8 MiB
6004.961 × 7.0164,16 MiB33,2 MiB99,6 MiB199,2 MiB

Doppelte Auflösung = vierfache Datenmenge (Breite und Höhe verdoppeln sich).

🔢 Lineart auf Bit-Ebene

16 Pixel ab x = 150 mm, y = 202,5 mm (Stelle mit vielen Wechseln in deinem Bereich) – so stehen sie im Puffer von sane_read(): 1 = schwarz, linkes Pixel im höchsten Bit.

1
0
1
1
0
1
0
1
0
1
1
0
1
0
1
0
Byte 0: 10110101 = 0xB5
Byte 1: 01101010 = 0x6A

📐Die Formeln

💡 Millimeter → Pixel

Pixel = mm ÷ 25,4 × dpi (1 Zoll = 25,4 mm). A4 bei 300 dpi: 210 ÷ 25,4 × 300 = 2480,3 → 2480; 297 ÷ 25,4 × 300 = 3507,9 → 3508 Pixel.

Backends runden unterschiedlich: das test-Backend schneidet per C-Cast ab und liefert deshalb 3507 Zeilen. Ein Frontend darf sich nur auf die Werte nach sane_start() verlassen.

✅ Bytes pro Zeile

Laut Standard mindestens B · ⌊(n + 7) / 8⌋ bei 1 Bit, sonst B · n · d / 8 (B = Kanäle, n = Pixel, d = Bittiefe).

Lineart packt 8 Pixel in ein Byte und füllt am Zeilenende auf: 2481 Pixel brauchen 311 Bytes, nicht 310,125. Ein Backend darf auch mehr Bytes liefern (Füllbytes).

⚠️ Datenmenge

A4 in Farbe bei 300 dpi: 7440 × 3508 = 26.099.520 Bytes ≈ 24,9 MiB Rohdaten. Bei 600 dpi das Vierfache, bei 48 Bit Farbe noch einmal das Doppelte.

Deshalb überträgt eSCL fertige JPEG-/PDF-Dateien – SANE dagegen liefert unkomprimierte Rohzeilen und überlässt das Speichern dem Frontend.

🎯Welche Auflösung wofür?

dpiPixelgrößetypischer Einsatz
750,339 mmschnelle Vorschau (preview), Bildschirmansicht
1500,169 mmDokumente fürs Archiv am Bildschirm, E-Mail-Anhänge
3000,085 mmStandard für Texterkennung (OCR) und Ausdruck in Originalgröße
6000,042 mmFotos, Vergrößerungen, feine Strichzeichnungen