🖨️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.
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.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 = 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
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.
| dpi | Pixel | Lineart 1 Bit | Grau 8 Bit | Farbe 24 Bit | Farbe 48 Bit |
|---|---|---|---|---|---|
| 75 | 620 × 877 | 66,8 KiB | 531 KiB | 1,56 MiB | 3,11 MiB |
| 150 | 1.240 × 1.754 | 265,5 KiB | 2,07 MiB | 6,22 MiB | 12,4 MiB |
| 300 | 2.480 × 3.508 | 1,04 MiB | 8,3 MiB | 24,9 MiB | 49,8 MiB |
| 600 | 4.961 × 7.016 | 4,16 MiB | 33,2 MiB | 99,6 MiB | 199,2 MiB |
Doppelte Auflösung = vierfache Datenmenge (Breite und Höhe verdoppeln sich).
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.
📐Die Formeln
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.
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).
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?
| dpi | Pixelgröße | typischer Einsatz |
|---|---|---|
| 75 | 0,339 mm | schnelle Vorschau (preview), Bildschirmansicht |
| 150 | 0,169 mm | Dokumente fürs Archiv am Bildschirm, E-Mail-Anhänge |
| 300 | 0,085 mm | Standard für Texterkennung (OCR) und Ausdruck in Originalgröße |
| 600 | 0,042 mm | Fotos, Vergrößerungen, feine Strichzeichnungen |