Sonntag, 16. Oktober 2016

Scanner mit VisualBasic programmieren

Scanner mit VisualBasic programmieren
Author D. Selzer-McKenzie
Youtube-Video: https://youtu.be/g-R3CFEc5fw
Der SourceCode steht zwasr hier in der Videobeschreibung,
könnte aber defekt sein, da er Steuerzeichen enthält die
von Youtube nicht angenommen werden. Deshaslb finden
Sie den SourceCode auch nochmals im Forum
http://Outbackbrumby.Blogspot.com
Hier der Sourcecode auch für gleichzeitige Bild- und
Farbearbeitung:
   Private Sub frmTools_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'für Scanner
        dm = New WIA.DeviceManager()
        dm.RegisterEvent(wiaEventDeviceConnected, "*")
        dm.RegisterEvent(wiaEventDeviceDisconnected, "*")
        AddHandler dm.OnEvent, AddressOf dm_OnEvent
        anzeige()
    End Sub
    Private Sub anzeige()
        Dim dev As WIA.Device
        ListBoxScannerListBoxZwei.Items.Clear()
        For Each di As WIA.DeviceInfo In dm.DeviceInfos
            dev = di.Connect()
            ' Konnte eine Instanz gebildet werden, wird der Name des Geräts in die Liste eingetragen:
            If dev IsNot Nothing Then ListBoxScannerListBoxZwei.Items.Add(di.Properties("Name").Value)
        Next di
        'Die Schaltflächen unserer Anwendung werden nur freigegeben, wenn mindestens ein Gerät installiert ist:
        ButtonScannenGeraeteEigenschaften.Enabled = ListBoxScannerListBoxZwei.Items.Count > 0
        ButtonScannenEinscannenUeberDatei.Enabled = ListBoxScannerListBoxZwei.Items.Count > 0
        ButtonScannenEinscannen.Enabled = ListBoxScannerListBoxZwei.Items.Count > 0
        ButtonScannenUeberSpeicher.Enabled = ListBoxScannerListBoxZwei.Items.Count > 0
        If ListBoxScannerListBoxZwei.Items.Count > 0 Then ListBoxScannerListBoxZwei.SelectedIndex = 0
    End Sub
    Private Sub dm_OnEvent(EventID As String, DeviceID As String, ItemID As String)
        If EventID = wiaEventDeviceDisconnected Then
            ListBoxScannerListBox1.Items.Add("Gerät getrennt")
        End If
        If EventID = wiaEventDeviceConnected Then
            ListBoxScannerListBox1.Items.Add("Gerät angeschlossen")
        End If
        anzeige()
    End Sub
    Private Sub ButtonScannenGeraeteEigenschaften_Click(sender As Object, e As EventArgs) Handles ButtonScannenGeraeteEigenschaften.Click
        Dim dev As WIA.Device
        Dim dlg As New WIA.CommonDialog()
        ' Zunächst wird eine Device-Instanz erzeugt (ist dem physischen Gerät zugeordnet):
        dev = dm.DeviceInfos(ListBoxScannerListBoxZwei.SelectedIndex + 1).Connect()
        dlg.ShowDeviceProperties(dev)
        dev = dm.DeviceInfos(ListBoxScannerListBoxZwei.SelectedIndex + 1).Connect()
        For Each prop As WIA.Property In dev.Properties
            ListBoxScannerListBox1.Items.Add(prop.Name & ": " & prop.Value)
        Next prop
    End Sub
    Private Sub ButtonScannenEinscannenUeberDatei_Click(sender As Object, e As EventArgs) Handles ButtonScannenEinscannenUeberDatei.Click
        Dim dlg As New WIA.CommonDialog()
        Dim img As WIA.ImageFile
        ' Anzeige des Dialogs: 
        img = dlg.ShowAcquireImage()
        ' Der Rückgabewert ist ein ImageFile-Objekt, dessen Dateiformat Sie über die FileExtension-Eigenschaft in Erfahrung bringen können.
        Dim TempFileName As String = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) & "." & img.FileExtension
        img.SaveFile(TempFileName)
        Using fs As New FileStream(TempFileName, FileMode.Open, FileAccess.Read)
            PictureBoxScannenAusgabeScan.Image = Image.FromStream(fs)
            fs.Close()
        End Using
        File.Delete(TempFileName)
    End Sub
    Private Sub ButtonScannenUeberSpeicher_Click(sender As Object, e As EventArgs) Handles ButtonScannenUeberSpeicher.Click
        Dim dlg As New WIA.CommonDialog()
        Dim img As WIA.ImageFile
        ' Anzeige des Dialogs: 
        img = dlg.ShowAcquireImage()
        Dim v As WIA.Vector = img.FileData
        Dim bytes() As Byte = CType(v.BinaryData(), Byte())
        Dim ms As New MemoryStream(bytes)
        PictureBoxScannenAusgabeScan.Image = Image.FromStream(ms)
    End Sub
    Private Sub ButtonScannenScanDrucken_Click(sender As Object, e As EventArgs) Handles ButtonScannenScanDrucken.Click
        Dim dlg As New WIA.CommonDialog()
        If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            dlg.ShowPhotoPrintingWizard(OpenFileDialog1.FileName)
        Else
            MessageBox.Show("Kein Bild gewählt!")
        End If
    End Sub
    Private Sub ButtonScannenEinscannen_Click(sender As Object, e As EventArgs) Handles ButtonScannenEinscannen.Click
        Dim dev As WIA.Device
        Dim dlg As New WIA.CommonDialog()
        dev = dm.DeviceInfos(ListBoxScannerListBoxZwei.SelectedIndex + 1).Connect()
        ' Nur wenn es sich um einen Scanner handelt, wird der Dialog angezeigt:
        If dev.Type = WIA.WiaDeviceType.ScannerDeviceType Then
            dlg.ShowAcquisitionWizard(dev)
        Else
            MessageBox.Show("Kein Scanner vohanden!")
        End If
    End Sub
    Private Sub ButtonScannenScanKonvertieren_Click(sender As Object, e As EventArgs) Handles ButtonScannenScanKonvertieren.Click
        Dim dlg As New WIA.CommonDialog()
        Dim img As New WIA.ImageFile()
        Dim proc As WIA.ImageProcess
        If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            img.LoadFile(OpenFileDialog1.FileName)
            proc = New WIA.ImageProcess()
            proc.Filters.Add(proc.FilterInfos("Convert").FilterID)
            proc.Filters(1).Properties("FormatID").Value = wiaFormatTIFF
            img = proc.Apply(img)
            'img.SaveFile("c:\1\ScanBild.tiff") 'muss noch "1" programmiert werden
        End If
    End Sub










    Private Sub ButtonScannenFilterAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonScannenFilterAnzeigen.Click
        Dim proc As New WIA.ImageProcess()
        For Each fil As WIA.FilterInfo In proc.FilterInfos
            ListBoxScannerListBox1.Items.Add(fil.Name)
        Next fil
    End Sub

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.