Please someone help, I can't figure why I can't put the scanner to acquire image.
|
|
I'm trying to make a command line twain for a scanner take the image and save it with the configurations I want, but I'm in dificulties with the basic.
I'm trying to put all the commands in the load form of the following code (I think it have all functions related to twain_32.dll).
Is someone interested to help me finish this?
HTML Code:Imports System Imports System.Collections Imports System.Runtime.InteropServices Imports System.Windows.Forms Imports System.Text Imports System.Drawing Imports System.ComponentModel Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Dim d As New TwainLib.Twain 'Dim d As New System.IntPtr 'd = 21 Dim b As New TwainLib.Twain b.Init(Handle) b.Select() 'b.SelectDefault() b.Acquire() 'b.Acquire(TwainLib.TwSS.TwSS_A4, , , TwainLib.TwColourType.twBW) ' b.TransferPictures() Dim a As New TwainLib.TwainCommand a = TwainLib.TwainCommand.TransferReady MsgBox(a) 'aaa.Acquire() 'aaa.TransferPictures() Dim a1 As New TwainLib.no 'a1 = 1 MsgBox(a1.ToString) b.Dispose() ' d.Dispose() End Sub End Class Namespace TwainLib Public Enum TwainCommand [Not] = -1 Null = 0 TransferReady = 1 CloseRequest = 2 CloseOk = 3 DeviceEvent = 4 Failure = 5 End Enum Public Class Twain Private hwnd As IntPtr Private appid As no Private srcds As no Private evtmsg As TwEvent Private winmsg_m As WINMSG_S <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMparent(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef refptr As IntPtr) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMident(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal idds As no) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMstatus(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal dsmstat As TwStatus) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSuserif(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByVal guif As TwUserInterface) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSevent(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef evt As TwEvent) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSstatus(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal dsmstat As TwStatus) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DScap(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal capa As TwCapability) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSiinf(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imginf As TwImageInfo) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSixfer(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef hbitmap As IntPtr) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSpxfer(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal pxfr As TwPendingXfers) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSilayout(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imglo As TwImageLayout) As TwRC End Function <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMlayout(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imglo As IntPtr) As TwRC End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalAlloc(ByVal flags As Integer, ByVal size As Integer) As IntPtr End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalLock(ByVal handle As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalUnlock(ByVal handle As IntPtr) As Boolean End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalFree(ByVal handle As IntPtr) As IntPtr End Function <DllImport("user32.dll", ExactSpelling:=True)> Private Shared Function GetMessagePos() As Integer End Function <DllImport("user32.dll", ExactSpelling:=True)> Private Shared Function GetMessageTime() As Integer End Function <DllImport("gdi32.dll", ExactSpelling:=True)> Private Shared Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIndex As Integer) As Integer End Function <DllImport("gdi32.dll", CharSet:=CharSet.Auto)> Private Shared Function CreateDC(ByVal szdriver As String, ByVal szdevice As String, ByVal szoutput As String, ByVal devmode As IntPtr) As IntPtr End Function <DllImport("gdi32.dll", ExactSpelling:=True)> Private Shared Function DeleteDC(ByVal hdc As IntPtr) As Boolean End Function Private Const CountryUSA As Short = 1 Private Const LanguageUSA As Short = 13 Public Sub New() appid = New no appid.Id = IntPtr.Zero appid.Version.MajorNum = 1 appid.Version.MinorNum = 1 appid.Version.Language = LanguageUSA appid.Version.Country = CountryUSA appid.Version.Info = "TWAIN Scanner" appid.ProtocolMajor = TwProtocol.Major appid.ProtocolMinor = TwProtocol.Minor appid.SupportedGroups = CType(TwDG.Image Or TwDG.Control, Integer) appid.Manufacturer = "Kod Efisien Sdn Bhd" appid.ProductFamily = "TWAIN 32 Scanner" appid.ProductName = "ScanSoft" srcds = New no srcds.Id = IntPtr.Zero evtmsg.EventPtr = Marshal.AllocHGlobal(Marshal.SizeOf(winmsg_m)) End Sub Public Sub Dispose() Marshal.FreeHGlobal(evtmsg.EventPtr) End Sub Protected Overrides Sub Finalize() Marshal.FreeHGlobal(evtmsg.EventPtr) End Sub Public Sub Init(ByVal hwndp As IntPtr) Finish() Dim rc As TwRC = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.OpenDSM, hwndp) If (rc = TwRC.Success) Then rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.GetDefault, srcds) If (rc = TwRC.Success) Then hwnd = hwndp Else rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwndp) End If End If End Sub Public Sub [Select](Optional ByRef Model As String = "") Dim rc As TwRC CloseSrc() If Equals(appid.Id, IntPtr.Zero) = True Then Init(hwnd) If Equals(appid.Id, IntPtr.Zero) = True Then Return End If End If rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.UserSelect, srcds) Model = srcds.ProductName.ToString End Sub Public Sub [SelectDefault](Optional ByRef Model As String = "") Dim rc As TwRC CloseSrc() If Equals(appid.Id, IntPtr.Zero) = True Then Init(hwnd) If Equals(appid.Id, IntPtr.Zero) = True Then Return End If End If rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.GetDefault, srcds) Model = srcds.ProductName.ToString End Sub Public Sub Acquire(Optional ByVal PaperSize As TwSS = TwSS.TwSS_A4, Optional ByVal XScale As Single = 1, _ Optional ByVal YScale As Single = 1, Optional ByVal SColor As TwColourType = TwColourType.twRGB, _ Optional ByVal TopMargin As Single = 0.0, Optional ByVal LeftMargin As Single = 0.0, _ Optional ByVal RightMargin As Single = 0.0, Optional ByVal BottomMargin As Single = 0.0, _ Optional ByVal FrameNumber As Integer = 1, Optional ByVal PageNumber As Integer = 1, _ Optional ByVal DocumentNumber As Integer = 1) Dim rc As TwRC CloseSrc() If Equals(appid.Id, IntPtr.Zero) = True Then Init(hwnd) If Equals(appid.Id, IntPtr.Zero) = True Then Return End If End If rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.OpenDS, srcds) If (rc <> TwRC.Success) Then Return End If 'Set Unit to Pixels Dim Pixels As TwUnit = TwUnit.twPIXELS Dim capUnit As TwCapability = New TwCapability(TwCap.IUnits, Pixels, TwType.Int16) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capUnit) If rc <> TwRC.Success Then CloseSrc() Return End If ''Set X Resolution 'Dim XResolution As Single = 1 'Dim capX As TwCapability = New TwCapability(TwCap.XResolution, XResolution, TwType.Fix32) 'rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capX) 'If rc <> TwRC.Success Then ' CloseSrc() ' Return 'End If ''Set Y Resolution 'Dim capY As TwCapability = New TwCapability(TwCap.YResolution, YResolution, TwType.Fix32) 'rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capY) 'If rc <> TwRC.Success Then ' CloseSrc() ' Return 'End If Dim xcap As TwCapability = New TwCapability(TwCap.XScaling, XScale, TwType.Fix32) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, xcap) If rc <> TwRC.Success Then CloseSrc() Return End If xcap = New TwCapability(TwCap.YScaling, YScale, TwType.Fix32) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, xcap) If rc <> TwRC.Success Then CloseSrc() Return End If Dim ps As TwCapability = New TwCapability(TwCap.SupportedSizes, PaperSize, TwType.Int16) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, ps) If rc <> TwRC.Success Then CloseSrc() Return End If 'Set Layout Dim Layout As TwImageLayout = New TwImageLayout rc = DSilayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, Layout) If rc <> TwRC.Success Then CloseSrc() Return End If If TopMargin > 0 Then Layout.Frame.Top.FromFloat(CSng(TopMargin)) End If If LeftMargin > 0 Then Layout.Frame.Left.FromFloat(CSng(LeftMargin)) End If If RightMargin > 0 Then Layout.Frame.Right.FromFloat(CSng(RightMargin)) End If If BottomMargin > 0 Then Layout.Frame.Bottom.FromFloat(CSng(BottomMargin)) End If Layout.FrameNumber = 1 Layout.PageNumber = 1 Layout.DocumentNumber = 1 rc = Me.DSilayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Set, Layout) If rc <> TwRC.Success Then CloseSrc() Return End If 'Dim ptr1 As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Layout)) 'Marshal.StructureToPtr(Layout, ptr1, False) 'rc = Me.DSMlayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, ptr1) 'If rc <> TwRC.Success Then ' CloseSrc() ' Return 'End If ''Dim ptr2 As IntPtr = ptr1 'Marshal.PtrToStructure(ptr1, Layout) 'If TopMargin > 0 Then ' Layout.Frame.Top.FromFloat(CSng(TopMargin)) 'End If 'If LeftMargin > 0 Then ' Layout.Frame.Left.FromFloat(CSng(LeftMargin)) 'End If 'If RightMargin > 0 Then ' Layout.Frame.Right.FromFloat(CSng(RightMargin)) 'End If 'If BottomMargin > 0 Then ' Layout.Frame.Bottom.FromFloat(CSng(BottomMargin)) 'End If 'Layout.FrameNumber = 1 'Layout.PageNumber = 1 'Layout.DocumentNumber = 1 'Marshal.StructureToPtr(Layout, ptr1, True) 'rc = Me.DSMlayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Set, ptr1) 'If rc <> TwRC.Success Then ' CloseSrc() ' Return 'End If 'Scan Colour Dim Ccap As TwCapability = New TwCapability(TwCap.IPixelType, SColor, TwType.UInt16) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, Ccap) If (rc <> TwRC.Success) Then CloseSrc() Return End If Dim cap As TwCapability = New TwCapability(TwCap.XferCount, 1, TwType.Int16) rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap) If (rc <> TwRC.Success) Then CloseSrc() Return End If Dim guif As TwUserInterface = New TwUserInterface guif.ShowUI = 1 guif.ModalUI = 1 guif.ParentHand = hwnd rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif) If (rc <> TwRC.Success) Then CloseSrc() Return End If End Sub Public Function TransferPictures() As ArrayList Dim pics As ArrayList = New ArrayList If Equals(srcds.Id, IntPtr.Zero) Then Return pics End If Dim rc As TwRC Dim hbitmap As IntPtr = IntPtr.Zero Dim pxfr As TwPendingXfers = New TwPendingXfers Do pxfr.Count = 0 hbitmap = IntPtr.Zero Dim iinf As TwImageInfo = New TwImageInfo rc = DSiinf(appid, srcds, TwDG.Image, TwDAT.ImageInfo, TwMSG.Get, iinf) If (rc <> TwRC.Success) Then CloseSrc() Return pics End If 'StartScan rc = DSixfer(appid, srcds, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, hbitmap) If (rc <> TwRC.XferDone) Then CloseSrc() Return pics End If rc = DSpxfer(appid, srcds, TwDG.Control, TwDAT.PendingXfers, TwMSG.EndXfer, pxfr) If (rc <> TwRC.Success) Then CloseSrc() Return pics End If pics.Add(hbitmap) Loop While (pxfr.Count <> 0) rc = DSpxfer(appid, srcds, TwDG.Control, TwDAT.PendingXfers, TwMSG.Reset, pxfr) Return pics End Function Public Function PassMessage(ByVal m As Message) As TwainCommand If Equals(srcds.Id, IntPtr.Zero) Then Return TwainCommand.Not End If Dim pos As Integer = GetMessagePos() winmsg_m.hwnd = m.HWnd winmsg_m.message = m.Msg winmsg_m.wParam = m.WParam winmsg_m.lParam = m.LParam winmsg_m.time = GetMessageTime() winmsg_m.x = pos 'CType(pos, Short) winmsg_m.y = Int(pos / 2 ^ 16) 'CType(Int(pos / 2 ^ 16), Short) Marshal.StructureToPtr(winmsg_m, evtmsg.EventPtr, False) evtmsg.Message = 0 Dim rc As TwRC = DSevent(appid, srcds, TwDG.Control, TwDAT.Event, TwMSG.ProcessEvent, evtmsg) If (rc = TwRC.NotDSEvent) Then Return TwainCommand.Not End If If (rc = TwRC.Failure) Then Return TwainCommand.Failure End If If (evtmsg.Message = CType(TwMSG.XFerReady, Short)) Then Return TwainCommand.TransferReady End If If (evtmsg.Message = CType(TwMSG.CloseDSReq, Short)) Then Return TwainCommand.CloseRequest End If If (evtmsg.Message = CType(TwMSG.CloseDSOK, Short)) Then Return TwainCommand.CloseOk End If If (evtmsg.Message = CType(TwMSG.DeviceEvent, Short)) Then Return TwainCommand.DeviceEvent End If Return TwainCommand.Null End Function Public Sub CloseSrc() Dim rc As TwRC If Not Equals(srcds.Id, IntPtr.Zero) Then Dim guif As TwUserInterface = New TwUserInterface rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.DisableDS, guif) rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.CloseDS, srcds) End If End Sub Public Sub Finish() Dim rc As TwRC CloseSrc() If Not Equals(appid.Id, IntPtr.Zero) Then rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwnd) End If appid.Id = IntPtr.Zero End Sub Public Shared ReadOnly Property ScreenBitDepth() As Integer Get Dim screenDC As IntPtr = CreateDC("DISPLAY", Nothing, Nothing, IntPtr.Zero) Dim bitDepth As Integer = GetDeviceCaps(screenDC, 12) bitDepth *= GetDeviceCaps(screenDC, 14) DeleteDC(screenDC) Return bitDepth End Get End Property <StructLayout(LayoutKind.Sequential, Pack:=4)> Friend Structure WINMSG_S Public hwnd As IntPtr Public message As Integer Public wParam As IntPtr Public lParam As IntPtr Public time As Integer Public x As Integer Public y As Integer End Structure End Class End Namespace Namespace TwainLib Public Class TwProtocol Public Const Major As Short = 1 Public Const Minor As Short = 9 End Class #Region " Enums " <Flags()> Friend Enum TwDG As Short Control = &H1 Image = &H2 Audio = &H4 End Enum Friend Enum TwDAT As Short Null = &H0 Capability = &H1 [Event] = &H2 no = &H3 Parent = &H4 PendingXfers = &H5 SetupMemXfer = &H6 SetupFileXfer = &H7 Status = &H8 UserInterface = &H9 XferGroup = &HA no = &HB CustomDSData = &HC DeviceEvent = &HD FileSystem = &HE PassThru = &HF ImageInfo = &H101 ImageLayout = &H102 ImageMemXfer = &H103 ImageNativeXfer = &H104 ImageFileXfer = &H105 CieColor = &H106 GrayResponse = &H107 RGBResponse = &H108 JpegCompression = &H109 Palette8 = &H10A ExtImageInfo = &H10B SetupFileXfer2 = &H301 End Enum Friend Enum TwMSG As Short Null = &H0 [Get] = &H1 GetCurrent = &H2 GetDefault = &H3 GetFirst = &H4 GetNext = &H5 [Set] = &H6 Reset = &H7 QuerySupport = &H8 XFerReady = &H101 CloseDSReq = &H102 CloseDSOK = &H103 DeviceEvent = &H104 CheckStatus = &H201 OpenDSM = &H301 CloseDSM = &H302 OpenDS = &H401 CloseDS = &H402 UserSelect = &H403 DisableDS = &H501 EnableDS = &H502 EnableDSUIOnly = &H503 ProcessEvent = &H601 EndXfer = &H701 StopFeeder = &H702 ChangeDirectory = &H801 CreateDirectory = &H802 Delete = &H803 FormatMedia = &H804 GetClose = &H805 GetFirstFile = &H806 GetInfo = &H807 GetNextFile = &H808 Rename = &H809 Copy = &H80A AutoCaptureDir = &H80B PassThru = &H901 End Enum Friend Enum TwRC As Short Success = &H0 Failure = &H1 CheckStatus = &H2 Cancel = &H3 DSEvent = &H4 NotDSEvent = &H5 XferDone = &H6 EndOfList = &H7 InfoNotSupported = &H8 DataNotAvailable = &H9 End Enum Friend Enum TwCC As Short Success = &H0 Bummer = &H1 LowMemory = &H2 NoDS = &H3 MaxConnections = &H4 OperationError = &H5 BadCap = &H6 BadProtocol = &H9 BadValue = &HA SeqError = &HB BadDest = &HC CapUnsupported = &HD CapBadOperation = &HE CapSeqError = &HF Denied = &H10 FileExists = &H11 FileNotFound = &H12 NotEmpty = &H13 PaperJam = &H14 PaperDoubleFeed = &H15 FileWriteError = &H16 CheckDeviceOnline = &H17 End Enum Friend Enum TwOn As Short Array = &H3 [Enum] = &H4 One = &H5 Range = &H6 DontCare = -1 End Enum Friend Enum TwType As Short Int8 = &H0 Int16 = &H1 Int32 = &H2 UInt8 = &H3 UInt16 = &H4 UInt32 = &H5 Bool = &H6 Fix32 = &H7 Frame = &H8 Str32 = &H9 Str64 = &HA Str128 = &HB Str255 = &HC Str1024 = &HD Str512 = &HE End Enum Friend Enum TwCap As Short XferCount = &H1 ICompression = &H100 IPixelType = &H101 IUnits = &H102 IXferMech = &H103 BitDepth = &H112B ImageFileFormat = &H110C XResolution = &H1118 YResolution = &H1119 ImageWidth = &H1116 ImageLength = &H1117 SupportedSizes = &H1122 XScaling = &H1124 YScaling = &H1125 End Enum Public Enum TwSS As Short TwSS_None = &H0 TwSS_A4 = &H1 TwSS_B5Letter = &H2 TwSS_USLetter = &H3 End Enum Public Enum TwColourType As Short twBW = 0 twGREY = 1 twRGB = 2 End Enum Public Enum TwUnit As Short tw_PICAS = 2 twCENTIMETERS = 1 twINCHES = 0 twPIXELS = 5 twPOINTS = 3 twTWIPS = 4 End Enum #End Region <StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Friend Class no Public Id As IntPtr Public Version As TwVersion Public ProtocolMajor As Short Public ProtocolMinor As Short Public SupportedGroups As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public Manufacturer As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public ProductFamily As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public ProductName As String End Class <StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Friend Structure TwVersion Public MajorNum As Short Public MinorNum As Short Public Language As Short Public Country As Short <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public Info As String End Structure <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwUserInterface Public ShowUI As Short Public ModalUI As Short Public ParentHand As IntPtr End Class <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwStatus Public ConditionCode As Short Public Reserved As Short End Class <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwEvent Public EventPtr As IntPtr Public Message As Short End Structure <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwImageInfo Public XResolution As Int32 Public YResolution As Int32 Public ImageWidth As Int32 Public ImageLength As Int32 Public SamplesPerPixel As Int16 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public BitsPerSample() As Short Public BitsPerPixel As Int16 Public Planar As Boolean Public PixelType As Int16 Public Compression As Short End Class <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwPendingXfers Public Count As Short Public EOJ As Integer End Class <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwFix32 Public Whole As System.Int16 Public Frac As System.UInt32 Public Function ToFloat() As Single Dim frac_sng As Single frac_sng = System.Convert.ToSingle(Frac) Return CType(Whole + (CType(frac_sng, Single) / 65536.0F), Single) End Function Public Sub FromFloat(ByVal f As Single) Dim i As Int32 = CType(((f * 65536.0F) + 0.5F), Int32) Whole = System.Convert.ToInt16(i / 2 ^ 16) Frac = System.Convert.ToUInt32((i Or &HFFFF)) End Sub End Structure <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwFrame Public Left As TwFix32 Public Top As TwFix32 Public Right As TwFix32 Public Bottom As TwFix32 End Structure <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwImageLayout Public Frame As TwFrame Public DocumentNumber As Integer Public PageNumber As Integer Public FrameNumber As Integer End Class <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwCapability Public Cap As Short Public ConType As Short Public Handle As IntPtr Public Sub TwCapability(ByVal capIn As TwCap) Cap = CType(capIn, Short) ConType = -1 End Sub Public Sub New(ByVal capIn As TwCap, ByVal sval As Short, ByVal TWType As TwType) Cap = CType(capIn, Short) ConType = CType(TwOn.One, Short) Handle = Twain.GlobalAlloc(&H42, 6) Dim pv As IntPtr = Twain.GlobalLock(Handle) Marshal.WriteInt16(pv, 0, CType(TWType, Short)) Marshal.WriteInt32(pv, 2, CType(sval, Short)) Twain.GlobalUnlock(Handle) End Sub Public Sub Dispose() If Not Equals(Handle, IntPtr.Zero) Then Twain.GlobalFree(Handle) End If End Sub Protected Overrides Sub Finalize() If Not Equals(Handle, IntPtr.Zero) Then Twain.GlobalFree(Handle) End If End Sub End Class End Namespace Namespace ScanSoft <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class BITMAPINFOHEADER Public biSize As Integer Public biWidth As Integer Public biHeight As Integer Public biPlanes As Short Public biBitCount As Short Public biCompression As Integer Public biSizeImage As Integer Public biXPelsPerMeter As Integer Public biYPelsPerMeter As Integer Public biClrUsed As Integer Public biClrImportant As Integer End Class Public Class scanToImage <DllImport("gdi32.dll", ExactSpelling:=True)> Friend Shared Function SetDIBitsToDevice(ByVal hdc As IntPtr, _ ByVal xdst As Integer, _ ByVal ydst As Integer, _ ByVal width As Integer, _ ByVal height As Integer, _ ByVal xsrc As Integer, _ ByVal ysrc As Integer, _ ByVal start As Integer, _ ByVal lines As Integer, _ ByVal bitsptr As IntPtr, _ ByVal bmiptr As IntPtr, _ ByVal color As Integer) As Integer End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalLock(ByVal handle As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalFree(ByVal handle As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> Public Shared Sub OutputDebugString(ByVal outstr As String) End Sub Dim bmi As BITMAPINFOHEADER Dim bmprect As Rectangle Dim dibhand As IntPtr Dim bmpptr As IntPtr Dim pixptr As IntPtr Public Sub New(ByVal dibhandp As IntPtr) bmprect = New Rectangle(0, 0, 0, 0) dibhand = dibhandp bmpptr = GlobalLock(dibhand) pixptr = GetPixelInfo(bmpptr) End Sub Protected Function GetPixelInfo(ByVal bmpptr As IntPtr) As IntPtr bmi = New BITMAPINFOHEADER Marshal.PtrToStructure(bmpptr, bmi) bmprect.X = bmprect.Y = 0 bmprect.Width = bmi.biWidth bmprect.Height = bmi.biHeight If (bmi.biSizeImage = 0) Then bmi.biSizeImage = Int((((bmi.biWidth * bmi.biBitCount) + 31) & Hex(Not (31))) / 2 ^ 3) * bmi.biHeight End If Dim p As Integer = bmi.biClrUsed If ((p = 0) And (bmi.biBitCount <= 8)) Then p = Int(1 * 2 ^ bmi.biBitCount) End If p = (p * 4) + bmi.biSize + CType(bmpptr.ToInt32, Integer) Return New IntPtr(p) End Function Public Function ImgToBitmap(ByVal dibhandp As IntPtr) As Bitmap bmprect = New Rectangle(0, 0, 0, 0) dibhand = dibhandp bmpptr = GlobalLock(dibhand) pixptr = GetPixelInfo(bmpptr) Dim TempBMP As Bitmap = New Bitmap(bmprect.Width, bmprect.Height) Dim TempGrap As Graphics = Graphics.FromImage(TempBMP) Dim hdc As IntPtr = TempGrap.GetHdc SetDIBitsToDevice(hdc, 0, 0, bmprect.Width, bmprect.Height, 0, 0, 0, bmprect.Height, pixptr, bmpptr, 0) TempGrap.ReleaseHdc(hdc) TempGrap.Dispose() GlobalFree(dibhand) dibhand = IntPtr.Zero Return (TempBMP) End Function End Class End Namespace
Please someone help, I can't figure why I can't put the scanner to acquire image.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks