Im Gegensatz zu den APIs für Drucker, Soundkarten, Video-Karten usw. wurde das für Scanner benutzte TWAIN API nicht von Microsoft spezifiziert.
Bei der Einführung von Windows hat sich Microsoft dem Thema Scanner nicht frühzeitig gewidmet. Scannerhersteller sahen die Notwendigkeit einer einheitlichen Schnittstelle (API) zwischen Scannern und Anwendungsprogrammen. Die TWAIN Arbeitsgruppe ist ein Zusammenschluß von Scannerherstellern und Herstellern von Grafikprogrammen, die sich auf eine solche Schnittstelle festgelegt haben. Neben der Definition der Schnittstelle umfaßt die TWAIN Definition noch den Data Source Manager (DSM), eine kleine DLL die lediglich dazu dient, mehrere Anwendungen mit mehreren Scannern bei Bedarf logisch zu verbinden.
Offenbar lag es nicht im Interesse der TWAIN-Teilnehmer, auch das Wissen über den Aufbau hochwertiger Gerätetreiber für Scanner zu teilen. Die TWAIN-Gruppe stellt als Beispielimplementierung lediglich eine Datenquelle zur Verfügung, die Daten aus einer BMP-Datei einliest und bemerkenswerter Weise nicht einmal die grundsätzlich in der API - Definition als "für alle Datenquellen erforderlich" gekennzeichneten Funktionen bietet.
Im Gegensatz zu echten "Open Source"-Projekten wie z.B. Linux und GNU-Projekten wird bei TWAIN-Treibern im Allgemeinen kein Quellcode zur Verfügung gestellt, mit dem sich die Mängel beheben liessen.
Daher mussten viele Scanner-Hersteller ihre Gerätetreiber von null beginnend selbst entwickeln. Aufgrund von Doppeldeutigkeiten der API-Definition, aber auch weil die meisten Anwendungsprogramme nur wenige Leistungsmerkmale nutzen, sind viele Leistungsmerkmale unterschiedlich realisiert oder sogar schlicht fehlerhaft.
Dies betrifft leider nicht nur die Treiber sehr preiswerter Produkte, sondern auch teurer Spezialgeräte.
Als grundlegende Leistungsmerkmale können diejenigen Leistungsmerkmale gelten, die von Standardanwendungen wie Adobe Photoshop, Coreldraw u.ä. benötigt werden. Diese Anwendungen eröffnen die Datenquelle und zeigen die Benutzerschnittstelle des Dialogs an. Sie überlassen die Einstellung der Parameter dem Dialog des Scanner-Treibers.
Die Kontrolle des Scanvorgangs ohne Benutzung der Benutzerschnittstelle der TWAIN-Datenquelle wird dagegen von deutlich weniger Anwendungen verlangt. Erfahrungsgemäß lassen sich viele Einstellungen durch das TWAIN API nicht kontrollieren, obwohl sie im Benutzerdialog einstellbar sind und eine geeignete Definition im TWAIN API existiert.
Dies betrifft sogar Leistungsmerkmale, die nach dem TWAIN API für jede Datenquelle vorgeschrieben sind. Folgende Fälle wurden uns bisher bekannt:
• |
Beim Abfragen von Daten mittels MSG_GET oder MSG_GETCURRENT liefern manche Treiber nicht immer die zuletzt mittels MSG_SET gesetzten Einstellungen. |
• |
Der vorgesehene Angabe von Größen und Auflösungen in verschiedenen Einheiten (Zoll, Pixel, Zentimeter) mittels ICAP_UNITS funktioniert nicht. |
• |
Der Treiber ignoriert bei Datentyp TW_FIX32 die Nachkommastellen im Element Frac und rechnet daher ungenau. |
• |
Der als "Every Source must transfer this Transfer Mode" gekennzeichnete Native - Transfermodus wird nicht unterstützt. |
• |
Trotz der API-Rückmeldung auf Verfügbarkeit einer Funktion (Capability negotiation) und fehlerfreier Ausführung des Setzvorgangs (MSG_SET) wird die Funktion nicht ausgeführt. |
Alternative TWAIN-Treiber |
|
Es gibt Anbieter von alternativen TWAIN-Treibern die ihre Treiber unabhängig von der eingesetzten Scannerhardware vermarkten. |
|
Empfehlungen für die Entwicklung von Anwendungen |
|
• |
Realisieren Sie die Verwendung aller über die grundlegenden Leistungsmerkmale hinausgehenden Funktionen als "Optionale Zusatzfunktionen", die die Anwender bei Bedarf zuschalten können. |
• |
Rechnen Sie damit, dass der Scanner Ihre Einstellungen nicht immer GENAU umsetzt, z.B. trotz der Vorwahl für ein schwarzweiß - Bild ein Farbbild liefert. Versuchen Sie, darauf bei Bedarf durch Aufrufen von Funktionen wie ConvertDIB oder StretchDIB zu reagieren. |
• |
Verlassen Sie sich möglichst nicht darauf, dass zurückgelieferte Einstellungswerte bei MSG_GET denen entsprechen, die für den Scanvorgang benutzt werden. |
→ Funktion TWAINInitialize |
|
→ Funktion TWAINAquireExt |
|
→ Funktion TWAINSetResolution |
|
→ Funktion TWAINSetRect |
|
→ Funktion TWAINCallDS |
|
→ Funktion TWAINIsDSMOpen |