Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Windows Image Aquisition (WIA) Scanner ansteuern (https://www.delphipraxis.net/154861-windows-image-aquisition-wia-scanner-ansteuern.html)

Codehunter 28. Sep 2010 15:07

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

shmia 28. Sep 2010 15:14

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.

Codehunter 28. Sep 2010 20:24

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.

hathor 28. Sep 2010 21:55

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;

Codehunter 29. Sep 2010 12:39

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.

Garfield 30. Okt 2010 10:03

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.

FrankJ28 31. Okt 2010 19:47

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

Garfield 31. Okt 2010 22:33

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.

Garfield 1. Nov 2010 11:29

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. WIAAutSDK

hathor 2. Mär 2015 19:19

AW: Windows Image Aquisition (WIA) Scanner ansteuern
 
http://vbnet.mvps.org/files/updates/wiaautsdk.zip


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz