Hallo,
ich versuche ein VB6-Scanprogramm nachzubauen, dieses mal mit WIA statt mit Twain. Der Probleme waren viele, die meisten sind gelöst. Ich habe im folgenden Code die Problemstellen markiert. Da die Dateien mit rund 2 MB viel zu groß geworden sind und der einzige Unterschied zu den VB6-Scans, der mir auffiel, die verwendete Kompression ist, wollte ich auf das Faxformat komprimieren.
Zum einen weiß ich nicht, wie ich den Encoder handhaben soll - den Quellcode habe ich aus einem Forum. Zum anderen funktioniert hier bei meinem Einzugsscanner, der viele Blätter nacheinander einziehen kann, die Erkennung, ob noch ein Papier einliegt (bScanHasMorePages), nicht, der documentHandlingStatus.Value() ist immer 5 - da habe ich mir erstmal mit der Abfrage eines Fehlercodes geholfen - gar nicht schön und wohl auch nicht ganz korrekt
Ich habe die Fehlerstellen mit {!} und mit Pfeilen markiert. Vllt. hat ja jmd. eine Idee
*Topic verschoben*
ich versuche ein VB6-Scanprogramm nachzubauen, dieses mal mit WIA statt mit Twain. Der Probleme waren viele, die meisten sind gelöst. Ich habe im folgenden Code die Problemstellen markiert. Da die Dateien mit rund 2 MB viel zu groß geworden sind und der einzige Unterschied zu den VB6-Scans, der mir auffiel, die verwendete Kompression ist, wollte ich auf das Faxformat komprimieren.
Zum einen weiß ich nicht, wie ich den Encoder handhaben soll - den Quellcode habe ich aus einem Forum. Zum anderen funktioniert hier bei meinem Einzugsscanner, der viele Blätter nacheinander einziehen kann, die Erkennung, ob noch ein Papier einliegt (bScanHasMorePages), nicht, der documentHandlingStatus.Value() ist immer 5 - da habe ich mir erstmal mit der Abfrage eines Fehlercodes geholfen - gar nicht schön und wohl auch nicht ganz korrekt
Ich habe die Fehlerstellen mit {!} und mit Pfeilen markiert. Vllt. hat ja jmd. eine Idee
VB.NET-Quellcode
- Imports WIA
- ...
- Dim bHasMorePages As Boolean = True
- Dim n As Integer = 0
- While bHasMorePages
- Dim image As WIA.ImageFile = Nothing
- Dim Item As WIA.Item = TryCast(device.Items(1), WIA.Item)
- Try
- Dim WiaCommonDialog As WIA.CommonDialog = New WIA.CommonDialog()
- image = DirectCast(WiaCommonDialog.ShowTransfer(Item, WIA.FormatID.wiaFormatTIFF, False), WIA.ImageFile)
- Dim imageBytes = CType(image.FileData.BinaryData, Byte())
- Dim ms = New System.IO.MemoryStream(imageBytes)
- Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
- 'Umwandeln in Graustufen
- Dim newBitmap As Bitmap = New Bitmap(image.Width, image.Height)
- Using g As Graphics = Graphics.FromImage(newBitmap)
- Dim colorMatrix As System.Drawing.Imaging.ColorMatrix = New System.Drawing.Imaging.ColorMatrix(New Single()() {New Single() {0.3F, 0.3F, 0.3F, 0, 0}, New Single() {0.59F, 0.59F, 0.59F, 0, 0}, New Single() {0.11F, 0.11F, 0.11F, 0, 0}, New Single() {0, 0, 0, 1, 0}, New Single() {0, 0, 0, 0, 1}})
- Dim imageAttributes As System.Drawing.Imaging.ImageAttributes = New System.Drawing.Imaging.ImageAttributes
- imageAttributes.SetColorMatrix(colorMatrix)
- g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imageAttributes)
- End Using
- 'Grosses Bild speichern - funktioniert
- Dim sFileName2 As String = "C:\tmp\PictureGrey_" & n.ToString() & ".tif"
- newBitmap.Save(sFileName2, System.Drawing.Imaging.ImageFormat.Tiff)
- 'Bildkompression ändern - funktioniert nicht
- Dim myImageCodecInfo() As System.Drawing.Imaging.ImageCodecInfo
- '------->
- myImageCodecInfo = {!}myImageCodecInfo.GetEncoderInfo("image/tiff")
- Dim myEncoder As System.Drawing.Imaging.Encoder
- myEncoder = System.Drawing.Imaging.Encoder.Compression
- Dim myEncoderParameters As System.Drawing.Imaging.EncoderParameters
- myEncoderParameters = New System.Drawing.Imaging.EncoderParameters(1)
- '------->
- Dim myEncoderParameter As {!}EncoderParameter
- myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, System.Drawing.Imaging.EncoderValue.CompressionCCITT4)
- myEncoderParameters.Param(0) = myEncoderParameter
- '------->
- newBitmap.{!}Save(sFileName2, myImageCodecInfo, myEncoderParameters)
- Catch ex As Exception
- '------->
- If Err.Number = {!}-2145320957 Then
- 'Nichts mehr einzuziehen
- Exit Sub
- End If
- MessageBox.Show("Error : " + ex.Message)
- Finally
- Item = Nothing
- Dim documentHandlingSelect As [Property] = Nothing
- Dim documentHandlingStatus As [Property] = Nothing
- For Each prop As [Property] In device.Properties
- If prop.PropertyID = WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_SELECT Then
- documentHandlingSelect = prop
- End If
- If prop.PropertyID = WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS Then
- documentHandlingStatus = prop
- End If
- Next
- bHasMorePages = False
- If documentHandlingSelect IsNot Nothing Then
- If (Convert.ToUInt32(documentHandlingSelect.Value()) And WIA_DPS_DOCUMENT_HANDLING_SELECT.FEEDER) <> 0 Then
- bHasMorePages = ((Convert.ToUInt32(documentHandlingStatus.Value()) And WIA_DPS_DOCUMENT_HANDLING_STATUS.FEED_READY) <> 0)
- End If
- End If
- n += 1
- End Try
- End While
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()