none
WIA-Scan-Dialog RRS feed

  • Frage

  • Hallo zusammen, (hoffe ich bin jetzt im richtigen Forum),

    ich war jetzt schon ewig nicht mehr hier und musste mich erst mal wieder zurecht finden. Da hat sich ja viel getan.

    Ich bin gerade dabei ein älteres Programm zu überarbeiten bei dem ich ein fertiges Scan-Control vernedet hatte, das ich jetzt (nach Neuinstallation meines PC) kostenplfichtig wieder freischalten lassen müsste. Das geht mir gegen die Natur.
    Also habe ich jetzt das Scannen selbst in die Hand genommen und mache das nun via WIA.

    Das geht auch, allerdings möchte ich direkt loslegen, also ohne Preview.

     'Necessary Deklaration to handle a WIA Scan dialog
        Public Function scanImage() As String
            'Pfad zur Temp Datei des erfassten Bildes
            Dim strTempImagePath As String = String.Empty
            'Windows GUI zur Interaktion mit dem Gerät
            Dim wiaDialog As New WIA.CommonDialog
            'Variable für das erfasste Bild
            Dim wiaImage As WIA.ImageFile = Nothing
            Try
                'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
                'rückgabe ist das erfasste Bild
                ' wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, ) 'True shows an additional Menue to select a scanner
                wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)
    
            Catch ex As Exception
                MsgBox("Ein Fehler ist aufgetreten! Überprüfen Sie ob das Gerät Eingeschaltet und angeschlossen ist." & Environment.NewLine & Environment.NewLine & ex.Message)
            End Try
            If Not wiaImage Is Nothing Then
                'Einen zufälligen Tempdateinamen im Temp Verzeichniss erstellen
                strTempImagePath = System.IO.Path.Combine(System.IO.Path.GetTempPath, System.IO.Path.GetRandomFileName())
    
                'Bild in Temporere Datei Speichern
                wiaImage.SaveFile(strTempImagePath)
                MyImageFile = strTempImagePath
            Else
                MsgBox("Es wurde kein Bild erfasst!", MsgBoxStyle.Information, "Information")
                PictureBox1.Image = Nothing
            End If
            Return strTempImagePath 

    Ich verwende den obenstehenden Code den ich im Internet gefunden habe.
    Mein Ziel ist es nun, in diesem Dialog einzustellen, dass:

    • Kein Preview mehr erscheint
    • Permanent in Grauwerten gescannt wird.

    Ich schätze mal, dass ich hierzu in dieser Zeile was ändern muss:

     wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)

    Da mir die Erleuchtung fehlt, bin ich wieder mal hier.
    Vielen Dank für eure Vorschläge.

    Stefan


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Sonntag, 22. Februar 2015 14:39

Antworten

Alle Antworten

  • Hallo zusammen,

    ich war jetzt schon ewig nicht mehr hier und musste mich erst mal wieder zurecht finden. Da hat sich ja viel getan.

    Ich bin gerade dabei ein älteres Programm zu überarbeiten bei dem ich ein fertiges Scan-Control vernedet hatte, das ich jetzt (nach Neuinstallation meines PC) kostenplfichtig wieder freischalten lassen müsste. Das geht mir gegen die Natur.
    Also habe ich jetzt das Scannen selbst in die Hand genommen und mache das nun via WIA.

    Das geht auch, allerdings möchte ich direkt loslegen, also ohne Preview.

     'Necessary Deklaration to handle a WIA Scan dialog
        Public Function scanImage() As String
            'Pfad zur Temp Datei des erfassten Bildes
            Dim strTempImagePath As String = String.Empty
            'Windows GUI zur Interaktion mit dem Gerät
            Dim wiaDialog As New WIA.CommonDialog
            'Variable für das erfasste Bild
            Dim wiaImage As WIA.ImageFile = Nothing
            Try
                'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
                'rückgabe ist das erfasste Bild
                ' wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, ) 'True shows an additional Menue to select a scanner
                wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)
    
            Catch ex As Exception
                MsgBox("Ein Fehler ist aufgetreten! Überprüfen Sie ob das Gerät Eingeschaltet und angeschlossen ist." & Environment.NewLine & Environment.NewLine & ex.Message)
            End Try
            If Not wiaImage Is Nothing Then
                'Einen zufälligen Tempdateinamen im Temp Verzeichniss erstellen
                strTempImagePath = System.IO.Path.Combine(System.IO.Path.GetTempPath, System.IO.Path.GetRandomFileName())
    
                'Bild in Temporere Datei Speichern
                wiaImage.SaveFile(strTempImagePath)
                MyImageFile = strTempImagePath
            Else
                MsgBox("Es wurde kein Bild erfasst!", MsgBoxStyle.Information, "Information")
                PictureBox1.Image = Nothing
            End If
            Return strTempImagePath 

    Ich verwende den obenstehenden Code den ich im Internet gefunden habe.
    Mein Ziel ist es nun, in diesem Dialog einzustellen, dass:

    • Kein Preview mehr erscheint
    • Permanent in Grauwerten gescannt wird.

    Ich schätze mal, dass ich hierzu in dieser Zeile was ändern muss:

     wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)

    Da mir die Erleuchtung fehlt, bin ich wieder mal hier.
    Vielen Dank für eure Vorschläge.

    Stefan


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Sonntag, 22. Februar 2015 12:45
  • Falsches Unterforum.

    In diesem Unterforum geht es um das Forum selbst, wie wäre es wenn due das VB.NET Forum aufsuchst oder zumindestens das .NET Forum?


    © 2015 Thomas Roskop

    Germany // Deutschland

    Sonntag, 22. Februar 2015 13:15
  • Hallo Stefan,
    ich habe diesen Blog-Eintrag gefunden, was in etwa deiner Anforderung entspricht den Dialog nicht anzuzeigen. Weiterhin fand ich diesen Forenthread der dir vielleicht beim Scannen in S/W bzw. Grauwerten weiter hilft.

    Ich habe fürs 1. leider nur etwas in C# gefunden - aber du scheinst ja einen Konverter zu kennen.
    Da ich mich bisher nicht weiter mit WIA auseinander setzte beschränkt sich mein Wissen leider auf das verlinkte.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 22. Februar 2015 14:19
    Moderator
  • Hallo Thomas,

    sorry, ich dachte da wäre ich. Hier im Forum hat sich seit meinem letzten Besuch derart viel getan, dass ich mich schwer zurecht finde.

    Danke für den Hinweis.

    Stefan


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Sonntag, 22. Februar 2015 14:35
  • Hallo,
    du hättest die Frage nicht neu stellen müssen - ich bin mir ziemlich sicher, das ein Moderator den alten Thread relativ schnell ins richtige Forum verschoben hätte. (Kann ich leider nicht tun, da ich in dem anderen Forum keine Berechtigung dazu habe).

    Sonst siehe bitte meine Antwort in der anderen Frage.

    PS: Ja, das ist das richtige Unterforum.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 22. Februar 2015 14:57
    Moderator
  • Hallo,

    das löst mein Problem leider nicht.

    Der Code startet diesen Dialog. Ich möchte aber, dass dieser Dialog nicht angezeigt wird und ich zur Laufzeit bestimmen kann, ob der Scannauftrag ein Farbbild, Graustufen oder S/W-Bild liefert. (Screenshot 2).

    Weiß jemand wie das geht?


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Montag, 23. Februar 2015 21:04
  • Hallo,

    ich habe mich nochmals kurz über WIA informiert und bin auf dieses interessante Open-Source-Projekt gestoßen: WIA.NET

    Sollte auch dies nicht helfen, hätte cih noch eine andere Idee.

    Solltest du in wPF-Arbeiten kannst du das Bild auch als UI-Element rendern und das Element dann zu einem Visual umwandeln. Dann kannst du die PrintDialog-Klasse verwenden, um das Objekt direkt zu Drucken, ohne Umwege etc.


    © 2015 Thomas Roskop

    Germany // Deutschland

    Montag, 23. Februar 2015 21:15
  • Hallo,
    wie sieht denn dien aktueller Code aus? Hast du mal versucht irgend etwas von den beiden verlinkten Seiten umzusetzen?

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 23. Februar 2015 21:17
    Moderator
  • Hallo Tom,

    das ist meine PublicFunction die ich nutze:

    Public Function scanImage() As String
            'Pfad zur Temp Datei des erfassten Bildes
            Dim strTempImagePath As String = String.Empty
            'Windows GUI zur Interaktion mit dem Gerät
            Dim wiaDialog As New WIA.CommonDialog
    
            'Variable für das erfasste Bild
            Dim wiaImage As WIA.ImageFile = Nothing
            Try
                'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
                'rückgabe ist das erfasste Bild
                ' wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, ) 'True shows an additional Menue to select a scanner
                wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)
    
            Catch ex As Exception
                MsgBox("Ein Fehler ist aufgetreten! Überprüfen Sie ob das Gerät Eingeschaltet und angeschlossen ist." & Environment.NewLine & Environment.NewLine & ex.Message)
            End Try
            If Not wiaImage Is Nothing Then
                'Einen zufälligen Tempdateinamen im Temp Verzeichniss erstellen
                strTempImagePath = System.IO.Path.Combine(System.IO.Path.GetTempPath, System.IO.Path.GetRandomFileName())
    
                'Bild in Temporere Datei Speichern
                wiaImage.SaveFile(strTempImagePath)
                MyImageFile = strTempImagePath
            Else
                MsgBox("Es wurde kein Bild erfasst!", MsgBoxStyle.Information, "Information")
                PictureBox1.Image = Nothing
            End If
            Return strTempImagePath
    
        End Function

    rumprobiert habe ich an dieser Stelle:

     ' wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, ) 'True shows an additional Menue to select a scanner
                wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MinimizeSize, WIA.FormatID.wiaFormatJPEG, False, True, True)
    

    Das zeigt auch Wirkung. Aber leider nicht die gewünschte.

    @ Thomas: Danke für Dein Suchen. Der letzte Code scheint C++ zu sein? Jedenfalls ergibt der Versuch ihn von C# in VB.Net zu übertragen eine Fehlermeldung.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 24. Februar 2015 07:51
  • Hallo zusammen,

    Ich habe beide Threads zusammengeführt, damit der Diskussionsverlauf übersichtlich ist.

    @Stefan: Der von Thomas verlinkte Code ist C#, in nicht verwaltetem C++ stößt man nicht auf { get; private set; } . Hast Du die von Thomas und Tom verlinkten Codeausschnitte ausprobiert?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 27. Februar 2015 09:13
    Moderator
  • Hallo Dimitar,

    ja habe ich auch, jedoch mit dem gleichen Ergebnis.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Sonntag, 1. März 2015 00:08