![]() |
Windows Image Aquisition (WIA) Scanner ansteuern
Liste der Anhänge anzeigen (Anzahl: 1)
Moinsen!
Da ich im Netz zwar vieles zum Thema TWAIN und Delphi gefunden habe aber nahezu nichts praktikables zu WIA, habe ich einfach mal selbst eine kleine Komponente zusammengeklimpert. Sie kann eigentlich nichts weiter als alle angeschlossenen WIA-Scanner aufzulisten, das Standard-Windows-Scan-Fenster aufzumachen (welches die Geräte-Voreinstellung vorgibt) und ein Bild vom Scanner zu holen. Das Bild landet über den Umweg einer tmp-Datei (geht nicht anders da WIA keine erkennbare streamingfähige Schnittstelle hat) in einem gewöhnlichen TBitmap-Objekt. Ich habe den Code nur unter D5 und XP testen können. Es stand mir lediglich ein Plustek OpticPro ST48 Scanner mit einem fürchterschrecklich grottigen Treiber zur Verfügung. Darum möchte ich meinen Code inkl. Package und Demoprogramm gern mal allen hier zur Verfügung stellen. Probierts einfach mal aus. Bin für alle Kommentare und Anregungen dankbar. Grüssle Cody |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Also ich würde die Komponente TWiaScanner und die importierte Typbibliothek in zwei
getrennten Units halten. Grund: bei höheren Delphiversionen könnte es nötig werden die Typbibliothek neu zu importieren. Das geht aber nicht wenn deine Komponente und die ganzen importierten Schnittstellen in einer Units sind. |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Ja werde ich in einer späteren Version machen. Allerdings ist dann auch nicht sicher dass eine neu importierte TLB dann mit dem selbstgeschriebenen Code kompatibel ist.
Mir geht es erstmal mehr darum, ob der Code auch woanders läuft außer bei mir und wie er sich auf höheren Win-Versionen außer XP verhält da es b Vista eine neue WIA gab und ich für die alte entwickelt habe. |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Liste der Anhänge anzeigen (Anzahl: 2)
WIN XP SP3
Irfanview zeigt mir 6 Quellen an - 1 ist aktiv. Dein Prog. zeigt nichts an, aber das BMP wird übernommen. Problem gelöst: 'Scanner' ist eine unnötige Einschränkung - ohne diese wird mir auch "USB-Videogerät" angezeigt.
Delphi-Quellcode:
constructor TWIAScanner.Create(AOwner: TComponent);
begin inherited Create(AOwner); FDeviceType:= '';//'Scanner'; FBitmap:= TBitmap.Create; RecreateWIAObject; end; |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Die Einschränkung auf Scanner ist nicht wirklich unnötig. Zumindest nicht WIA-clientseitig. Windows unterscheidet da verschiedene Geräteklassen da eine Digiknipse ja für gewöhnlich keinen Papiereinzug haben dürfte ;-)
Scheint so als nehmen es manche Treiber nicht so genau mit der Geräteunterteilung. Mein Code ist im Moment noch sehr rudimentär, darum erscheint die Einschränkung auf Scanner unnötig. Ich möchte das Ganze dann aber noch etwas spezialisieren. Es kämen dann auch noch weitere Klassen für Kameras etc. hinzu. |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Da ich ein einfaches Kopierprogramm benötige, habe ich mir das Beispiel oben angesehen. Dabei habe ich festgestellt, dass die in den Uses der Unit1 eingetragene WIALib_TLB nicht benötigt wird weil bereits alles in der Unit WindowsImageAquisition enthalten ist. Ausserdem ist in der Unit WindowsImageAquisition ein kleiner Fehler vorhanden.
In der function TWiaScanner.Scan wird für den Scan eine temporäre Datei (Zeile 907) erstellt:
Delphi-Quellcode:
TmpFile:= GetTempFileName('~scan') + '.tmp';
Damit wird ein Dateiname zum Beispiel <Pfad>\~scan00EB2EE8..tmp erstellt. Diese Datei wird dann nach dem Laden gelöscht (Zeile 918):
Delphi-Quellcode:
DeleteFile(TmpFile);
Zurück bleibt eine Datei <Pfad>\~scan00EB2EE8 mit der Größe 0. Am besten die Dateierweiterung oder mindestens deren . weglassen. |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Hallo Cody,
interessantes Thema, ich scheitere jedoch daran deine Komponente "ans Fliegen" zu bekommen. Meine Versuche werden mit Klasse nicht registriert ClassID: 4EC4272E-2E6F-4EEB-91D0-EBC4D58E8DEE quittiert. Eine Idee was bei mir falsch läuft? Danke und ciao Frank |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
WIA 1 bis Windows XP, WIA 2 ab Windows Vista?
Einfachste Lösung wäre vermutlich das ActiveX zu importieren. |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
Unter XP habe ich hier eine wiascr.dll (Microsoft Windows Image Acquisition 1.01 Type Library). Aus dieser läßt sich die Unit WIALib_TLB.pas importieren, welche die Konstante CLASS_Wia: TGUID = '{4EC4272E-2E6F-4EEB-91D0-EBC4D58E8DEE}'; enthält. Einstellungen kann man anscheinend nur in der Vorschau vornehmen, wobei es sich auf den Bildtyp (f/sw) und den Ausschnitt beschränkt. Sonst bekommt man ein 100 dpi Bild von der gesamten Auflagefläche.
Wenn man im Internet nach Windows Image Acquisition sucht, beziehen sich fast alle Seiten auf die wiaaut.dll (Microsoft Windows Image Acquisition Library v2.0). Aus dieser kann man die Unit WIA_TLB.pas importieren, in welcher die GUID = '{4EC4272E-2E6F-4EEB-91D0-EBC4D58E8DEE}' nicht enthalten ist. Dafür kann man da anscheinend einiges einstellen. ![]() |
AW: Windows Image Aquisition (WIA) Scanner ansteuern
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz