Inicio | Descargas | Registro | Testimonios | Soporte English version   Deutsche Version   Русская версия   Português versião   Española versión   Version française


VintaSoftTwain ActiveX Control    Información Información  Licencia Licencia  Preguntas frecuentes FAQ  Ejemplos Ejemplos  Descarga Descarga  Compra Compra



Cuestiones generales:
  • ¿Para qué fines puedo utilizar VintaSoftTwain ActiveX control?
  • ¿En qué lenguaje simbólico puedo utilizar el componente ActiveX?
  • ¿Qué límites tiene la versión no registrada del componente?
  • No ha encontrado la respuesta a mi pregunta. ¿Qué debo hacer?

  • Redistribución:
  • ¿Puedo distribuir este ActiveX con mi aplicacion sin costo alguno?
  • ¿Qué ficheros debo incluir en mi programa de distribuidor?
  • He creado el programa en Visual Studio .NET. ¿Que pasos debo hacer para la instalación correcta de mi programa al ordenador de mi cliente?
  • Se produce un error cuando intento registrar el ActiveX en Windows98. ¿Que debo hacer?
  • He creado el programa en Delphi. El programa funciona correctamente si inicialisarlo con el derecho del administrador, pero si inicializarlo con el derecho de visitante, aparece el aviso siguiente "Exception EOleSysError in module...". ¿Como puedo resolver este problema?

  • Despliegue:
  • ¿Como puedo añadir el objeto VintaSoftTwain a la forma en el proyecto VB.NET?
  • Quiero utilizar ActiveX en Delphi 2005, pero el diseñador de formas no permite añadir ActiveX componentes a la forma de la aplicación. Ocurre el error siguiente "Failed to add a reference to the ActiveX type library. Ensure that it is properly registered. ...". ¿Como puedo resolver este problema?
  • ¿Como puedo instalar dinámicamente el objeto VintaSoftTwain en mi proyecto a VB?
  • Trato de utilizar ActiveX en el medio Windows 2003 Server, pero se produce el error "Error at loading the TWAIN_32.DLL". ¿Como puedo resolver este problema?
  • No puedo añadir el VintaSoftTwain ActiveX a un formulario de mi aplicacion VS.NET 2005. ¿Como puedo resolver este problema?

  • Web despliegue:
  • ¿Como puedo firmar la copia del componente para utilizarla en mi página web?
  • ¿Qué debo hacer para añadir ActiveX a mi web proyecto?
  • ¿Como puedo cargar la imagen del escaneo al web server?
  • Trato de elegir el dispositivo por medio de la opción sourceIndex en Internet Explorer, pero se produce un error. ¿Por qué?

  • Programación:
  • ¿Como puedo recibir las imagenes en negro y blanco (documentación)?
  • El lenguaje simbólico que utilizo no soporta el trabajo con las formaciones. ¿Como puedo resolver este problema?
  • ¿Puedo dirigir la carga automática de la documentacíon sin interface usuario?
  • ¿Puedo crear la aplicación de consola por medio de este componente ActiveX?
  • ¿Puedo elegir el dispositivo necesario sin dialogo estandartizado de la eleccíon del dispositivo?
  • ¿Como puedo desconectar la ventana del indicador del proceso del escaneo al recibo de los imagenes sin interface del usuario?
  • Tengo que escanear solamente una parte de la imagen. ¿Qué debo hacer?
  • ¿Como puedo instalar la resolución diferente para los ejes X y Y durante el escaneo de imagenes?
  • ¿Como puedo elegir la orientación de la imagen al escaneo?
  • Nuestra organización utilice el escaneo de la red con la carga automática de folios (ADF) y procesamos mucha documentación cada dia. ¿Como podemos automatizar nuestro trabajo? Quisieramos guardar cada papel en el fichero saparado.
  • ¿Puedo utilizar el código patch para dividir los trabajos de serie? Y ¿como puedo determinar el final del trabajo de serie?
  • Debo saber, cuando la imagen será adquirida en el programa, pero no puedo utilizar el evento PostScan. ¿Como puedo resolver este problema?
  • ¿Puedo recibir la imagen con la profundidad del color a 48 bit al pixel?
  • Cuando utilizo el escaner HP ScanJet se pierde una media pulgada en la parte superior de la imagen y se añade el rectángulo negro en dimensión de una media pulgada en la parte inferior de la imagen. ¿Por qué?

  • Bases de datos:
  • ¿Puedo guardar las imagenes adquiridas en espacio OLE da la tabla MS Access?
  • ¿Puedo guardar las imagenes adquiridas en la tabla MS SQL del server?
  • Utilzo Visual FoxPro y no recibo el evento PostScan. ¿Por qué?


  •  
    ¿Para qué fines puedo utilizar VintaSoftTwain ActiveX control?
    Puede utilizar el componente ActiveX para dirigir el trabajo del escaneo, de la cámara digital y web y otros dispositivos que soportan el estandard TWAIN.


     
    ¿En qué lenguaje simbólico puedo utilizar el componente ActiveX?
    La licenia elaboradora y la licencia de la companía permiten utilizar este componente:
  • MS .NET Studio (VB.NET, C#.NET, C++.NET)
  • MS Visual Studio 6.0 (VB, VC++, VFoxpro)
  • Borland Delphi, Borland C++ Builder
  • MS Office (Excel, Word, Access)
  • en todos lenguajes simbólicos y aplicación que soportan el funcionamiento сon ActiveX componente.

    La licencia del server permite utilizar este componente en:
  • VBScript
  • JavaScript
  • todos lenguajes simbólicos basados en HTML.


     
    ¿Qué límites tiene la versión no registrada del componente?
    Los límites de la versión no registrada:
  • la ventana “Sobre el registro de el programa” aparecerá después cada escaneo del imagen
  • cada imagen se puede guardar al disco o cargar como BMP fichero
  • solo la imagen en negro u blanco o en gris puede ser guardado al disco o cargado al server como JPEG o TIFF filchero

  • Todos estos límites están borrados de la versión registrada del componente.


     
    No ha encontrado la respuesta a mi pregunta. ¿Qué debo hacer?
    Puede encontrar la información sobre la mayoria de las preguntas en la docamentación o en este FAQ.
    Si no ha encontrado la respuesta a su pregunta, escriba al Servicio de Apoyo Técnico al Usuario.


     
    ¿Puedo distribuir este ActiveX con mi aplicacion sin costo alguno?
    Si, puede distribuir este ActiveX componente con su aplicacion. Paga solamente por el registro inicial. La licencia de la companía y del server no tiene límites en la distribucion.
    La licencia del elaborador tiene ciertes límites en la distribución. Por favor, vea el contrato de licencia.


     
    ¿Qué ficheros debo incluir en mi programa de distribuidor?
    Tiene que incluir solo un fichero: vstwain.dll.
    A la instalación de su programa registre el componente ActiveX por medio del programa regsvr32.exe (regsvr32.exe vstwain.dll).


     
    He creado el programa en Visual Studio .NET. ¿Que pasos debo hacer para la instalación correcta de mi programa al ordenador de mi cliente?
    Antes de distribuir su programa:
  •  
  • Borre de su proyecto la referencia a los ficheros AxVSTWAINLib y VSTWAINLib, y añadales de nuevo – los ficheros Ax VSTWAINLib y VSTWAINLib deben ser instalados en el directorio junto con su programa.
  •  
  • Asegurese que la opcíon “Copy Local" para las referencias a los ficheros AxVSTWAINLib.dll y VSTWAINLib.dll tiene el parámetro "False".
  •  
  • Después de la compilación de su programa añada tres ficheros al distribuidor de su programa: vstwain.dll, AxInterop.VSTWAINLib.dll, Interop.VSTWAINLib.dll (dos ultimos ficheros serán generados por Visual Studio).

    Durante de la distribución de su programa:
  •  
  • Asegurese que .NET Framework está instalada al ordenador.
  •  
  • Registre ActiveX al ordenador por medio del orden: regsvr32.exe vstwain.dll.


     
    Se produce un error cuando intento registrar el ActiveX en Windows98. ¿Que debo hacer?
    Este problema está relacionada con la falta de las bibliotecas necesarias en el sistema. Para el trabajo de ActiveX son necesarias las bibliotecas siguientes:
  • KERNEL32.DLL
  • ATL.DLL
  • GDI32.DLL
  • OLE32.DLL
  • OLEAUT32.DLL
  • SHELL32.DLL
  • USER32.DLL
  • WS2_32.DLL

    Por favor instale el paquete "Visual C++ run time files" al ordenador – esto debe resolver el problema. Este paquete de instalación puede descargarse desde este enlace: http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe


     
    He creado el programa en Delphi. El programa funciona correctamente si inicialisarlo con el derecho del administrador, pero si inicializarlo con el derecho de visitante, aparece el aviso siguiente "Exception EOleSysError in module...". ¿Como puedo resolver este problema?
    Primeramente hay que registrar ActiveX en el sistema por medio del programa register32.exe – hay que hacerlo con el derecho de administrador.

    Pues es necesario utilizar el código siguiente en su programa:
    program Simple;
    
    uses
      Forms,
      Windows, Registry, Dialogs,  ActiveX,
      Unit1 in 'Unit1.pas' {Form1};
    
    {$R *.res}
    
    function IsVSTwainRegistered : Boolean;
    var Reg:TRegistry;
    begin
     Reg:=TRegistry.Create;
     try
      Reg.RootKey:=HKEY_CLASSES_ROOT;
      Result:=Reg.OpenKey('CLSID\{1169E0CD-9E76-11D7-B1D8-FB63945DE96D}',False);
      if Result then Reg.CloseKey;
     finally
      Reg.Free;
     end;
    end;
    
    begin
      if not IsVSTwainRegistered() then
        begin
          ShowMessage('VintaSoftTwain ActiveX is not registered!');
          Exit;
        end;
        
      OleInitialize(nil);
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
      OleUninitialize;
    end.
    

     
    ¿Como puedo añadir el objeto VintaSoftTwain a la forma en el proyecto VB.NET?
    Para añadir el objeto VintaSoftTwain al forma de la aplicación hay que hacer lo siguente:
    • Abrir Visual Studio.NET y pues abrir la aplicación
    • Abrir en el diseñador de formas el forma de la aplicación, donde hay que inserter el objeto VintaSoftTwain
    • Abrir el panel "Toolbox"
    • Apretar el botón derecho del ratón al panel "Toolbox"
    • Elegir el punto "Add/Remove Items..." del menú aparecido
    • Abrir el señal "COM Components"
    • Apretar el botón "Browse..." y elegir el fichero vstwain.dll
    • Encontrar y destacar la clase VintaSoftTwain en la lista
    • Cerrar la ventana apretando el botón "Ok"
    • Encontrar y elegir el objeto VintaSoftTwain al panel "Toolbox"
    • Transferir con ayuda del raton el objeto uno a la forma del anexo

     
    Quiero utilizar ActiveX en Delphi 2005, pero el diseñador de formas no permite añadir ActiveX componentes a la forma de la aplicación. Ocurre el error siguiente "Failed to add a reference to the ActiveX type library. Ensure that it is properly registered. ...". ¿Como puedo resolver este problema?

    Es la lista de los pasos que hay que hacer para resolver este problema:
  • Borrar ActiveX del panel de componentes (Tools Palette)
  • Cambiar la variante de la lengua instalada al ordenador a "US Locale"
  • Recargar el ordenador
  • Añadir de nuevo ActiveX al panel de componentes – todo debe ser en orden.


     
    ¿Como puedo instalar dinámicamente el objeto VintaSoftTwain en mi proyecto a VB?
    Hay que hacer lo siguiente:
    1. Abrir el punto del menu "Project -> References".
    2. En la ventana abierta añadir la referencia al objeto "VintaSoftTwain ActiveX Control".
    3. Pues hay que añadir el código siguiente al proyecto:
      Option Explicit
      Dim WithEvents VSTwain1 As VSTWAINLib.VintaSoftTwain
    
      Private Sub StartScan_Click()
         Set VSTwain1 = New VSTWAINLib.VintaSoftTwain
         With VSTwain1
            .StartDevice
            If .SelectSource = 1 Then
                .showUI = True
                .Acquire
            End If
         End With
      End Sub
    
      Private Sub VSTwain1_PostScan(ByVal flag As Long)
         If flag <> 0 Then
            If VSTwain1.errorCode <> 0 Then
                MsgBox VSTwain1.errorString
            End If
         Else
            Set Image1.Picture = VSTwain1.GetCurrentImage
            VSTwain1.tiffCompression = 10
            VSTwain1.SaveImage 0, "c:\test.tif"
         End If
      End Sub
    

     
    Trato de utilizar ActiveX en el medio Windows 2003 Server, pero se produce el error "Error at loading the TWAIN_32.DLL". ¿Como puedo resolver este problema?
    La versión Windows 2003 Server que utilice tiene el error en la configuracíon: la función GetWindowsDirectory hace volver la via no correcta al directorio Windows, y notamente "C:\Documents and Settings\User\Windows\" en lugar de "C:\Windows\".
    Este articulo le ayuda a resolver eate problema: http://support.microsoft.com/kb/832048.


     
    No puedo añadir el VintaSoftTwain ActiveX a un formulario de mi aplicacion VS.NET 2005. ¿Como puedo resolver este problema?
    Debe añadir a su proyecto la referencia a la biblioteca "stdole" antes de añadir el objeto VintaSoftTwain ActiveX a la forma del aplicación. Esto es la lista de los pasos necesarios:
    • Ponga el cursor del ratón al punto "References" y apreje el botón derecho del ratón
    • Elija el punto "Add reference" del menú aparecido
    • Abra el señal "COM"
    • Encuentre y elija la clase "OLE Automation" de la lista
    • Cerrar la ventana apretando el botón "Ok"

    Después de estos pasos puede añadir el objeto VintaSoftTwain ActiveX al formulario de la aplicación sin algun problema.


     
    ¿Como puedo firmar la copia del componente para utilizarla en mi página web?
    VintaSoftTwain ActiveX esta firmado por el certificado digital de Thawte.
    Por favor, escribanos si quiere firmar VintaSoftTwain ActiveX con su propio certificado.


     
    ¿Qué debo hacer para añadir ActiveX a mi web proyecto?
    Necesita hacer lo siguiente:
    1. Añada el fichero vstwain.dll al server.
    2. Corrige en HTML código las líneas siguentes.
      // En el código del ejemplo::
      <OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
              CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
              CODEBASE="">
      </OBJECT>
    
      // Debe ser en su código:
      <OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
              CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
              CODEBASE="http://www.your-server.com/activex/vstwain.dll#version=4,0,0,3">
      </OBJECT>
    
    Después todas estas operaciones no se debe instalar el componente ActiveX en todos los ordenadores de su organización. Cuando el usuario abre la página, recibirá con el componente la demanda al instalación del componente al ordenador. En caso de la respuesta positiva, el componente será instalado al ordenador automáticamente y tendrá la posibilidad de trabajar con su página web.

    A la necesidad, se puede insertar ActiveX en el fichero CAB: (CODEBASE="http://www.your-server.ru/activex/1.cab").


     
    ¿Como puedo cargar la imagen del escaneo al web server?
    El protocolo HTTP no permite guardar las imagenes al (HTTP) web server directamente. Para resolver este problema se puede utilizar el web-script que debe ser insertado al server.
    Puede encontrar muchos scriptes en el internet o utilizar uno de los siguientes: ASP script, Perl script.

    Para cargar las imagenes al server por medio de script se debe saber que espacios contiene el script.

    ASP script contiene los espacios siguientes:
  • El espacio del texto "Demo"
  • El espacio para el fichero "txtFile"
  • El botón "cmdSubmit"

    Para cargar las imagenes por medio de este script se debe utilizar el código siguiente:
      if VSTwain1.SetHttpServerParams("http://www.your-server.com/clsUploadTest.asp",
                     "http://www.your-server.com/clsUploadTest.asp", 4) = 0 then
        MsgBox VSTwain1.errorString
      else
        VSTwain1.SetHttpFormField "Demo", "Demo string"
        VSTwain1.SetHttpFormField "cmdSubmit", "SUBMIT"
        if VSTwain1.SaveImageToHttp(0, "txtFile", "demo.jpg") = 0 then
            MsgBox VSTwain1.errorString
        else
            Timer.Interval = 10
        end if
      end if
    
    Perl script contiene los espacios siguientes:
  • El espacio del texto "login"
  • El espacio del texto "pass"
  • El espacio para el fichero "file"

    Para cargar las imagenes por medio de este script se debe utilizar el código siguiente:
      if VSTwain1.SetHttpServerParams("http://www.your-server.com/cgi/upload.cgi",
                     "http://www.your-server.com/upload.html", 4) = 0 then
        MsgBox VSTwain1.errorString
      else
        VSTwain1.SetHttpFormField "login", "guest"
        VSTwain1.SetHttpFormField "pass", "guest"
        if VSTwain1.SaveImageToHttp(0, "file", "demo.jpg") = 0 then
            MsgBox VSTwain1.errorString
        else
            Timer.Interval = 10
        end if
      end if
    
    Por favor, vea nuestros ejemplos.


     
    Trato de elegir el dispositivo por medio de la opción sourceIndex en Internet Explorer, pero se produce un error. ¿Por qué?
    Cada objeto a la página web en Internet Explorer tiene la opción sourceIndex – esta opción es accesible solamente para la lectura. Debe utilizar el código siguente para trabajar con la opción sourceIndex del objeto VintaSoftTwain ActiveX en JavaScript o VBScript:
      VSTwain1.StartDevice()
      VSTwain1.object.sourceIndex = 1   ' El Segundo dispositivo
      VSTwain1.Acquire()
    

     
    ¿Como puedo recibir las imagenes en negro y blanco (documentación)?
    Esto es el ejemplo del código para recibir las imagenes en negro y blanco:
      Private Sub StartScan()
          VSTwain1.StartDevice()
          If VSTwain1.SelectSource() = 1 Then
              VSTwain1.OpenDataSource()
              VSTwain1.pixelType = 0	  ' 0 - BW images, 1 - gray images , 2 - RGB images
              VSTwain1.Acquire()
          End If
      End Sub

     
    El lenguaje simbólico que utilizo no soporta el trabajo con las formaciones. ¿Como puedo resolver este problema?
    Si necesita recibir la formacion de significados por metodo de GetPageSizes, GetPixelTypes, GetResolutions, GetUnitsOfMeasure, pero el lenguaje simbólico que utiliza no soporta el trabajo con las formaciones, puede utilizar el método siguiente:
      ' Este ejemplo muestra como recibir los tipos de las imagenes soportadas por el dispositivo
      VSTwain1.StartDevice()
      VSTwain1.OpenDataSource()
      bSupportBW = 0
      VSTwain1.pixelType = 0          ' las imagenes en negro y blanco (1 bit por pixel)
      if VSTwain1.errorCode = 0 then  ' las imagenes en negro y blanco soportadas por el dispositivo
        bSupportBW = 1
      end if
      bSupportGray = 0
      VSTwain1.pixelType = 1          ' laslas imagenes grises (8 bit por pixel)
      if VSTwain1.errorCode = 0 then  ' las imagenes grises soportadas por el dispositivo
        bSupportGray = 1
      end if
      bSupportRGB = 0
      VSTwain1.pixelType = 2           ' RGB (24 bit por pixel)
      if VSTwain1.errorCode = 0 then   ' las imagenes en color (RGB) soportadas por el dispositivo
        bSupportRGB = 1
      end if
      ...................
    

     
    ¿Puedo dirigir la carga automática de la documentacíon sin interface usuario?
    Este ejemplo que muestra como dirigir el trabajo del escaneo con la carga automática de la documentación(ADF) sin interface usuario:
      Private Sub StartScan()
          VSTwain1.StartDevice()
          If VSTwain1.SelectSource() = 1 Then         ' Si el usuario ha elegido el dispositivo
              VSTwain1.showUI = False                 ' Desconectar el interface del usuario
              VSTwain1.disableAfterAcquire = True
              VSTwain1.maxImages = 1
              VSTwain1.autoCleanBuffer = True
              VSTwain1.tiffMultiPage = True           ' Crear el fichero TIFF de multi páginas
              VSTwain1.tiffCompression = 10  ' Determinar automáticamente el algoritmo de la compresión
              If VSTwain1.OpenDataSource() = 1 Then
                  VSTwain1.unitOfMeasure = 0          ' Las pulgadas como unidad de medida principal
                  VSTwain1.pixelType = 0              ' escanear las imagenes en negro y blanco
                  VSTwain1.resolution = 200           ' resolución - 200 dpi
                  If VSTwain1.feederPresent = 1 Then
                      VSTwain1.feederEnabled = True
                      If VSTwain1.duplex <> 0 Then
                          VSTwain1.duplexEnabled = True   ' Permitir dúplex
                      End If
                      If VSTwain1.feederLoaded = 1 Then
                          VSTwain1.xferCount = -1
                          VSTwain1.autoFeed = True
                          VSTwain1.Acquire()
                      End If
                  End If
              End If
          End If
      End Sub
    
      Private Sub VSTwain1_PostScan(ByVal flag As Long)
          If flag <> 0 Then
              If VSTwain1.errorCode <> 0 Then
                  MsgBox VSTwain1.errorString
              End If
          Else
              If VStwain1.SaveImage(VSTwain1.NumImages-1,"c:\test.tiff") = 0 Then
                MsgBox VSTwain1.errorString
              End If
              If VSTwain1.dataSourceState = 0 Then
                  VSTwain1.StopDevice()
                  MsgBox "Scan completed."
              End if
          End If
      End Sub

     
    ¿Puedo crear la aplicación de consola por medio de este componente ActiveX?
    No es posible crear la aplicación de consola por medio de este componente ActiveX. La aplicación debe tener sa propia ventana para el trabajo con el ordenador.


     
    ¿Puedo elegir el dispositivo necesario sin dialogo estandartizado de la eleccíon del dispositivo?
    Si. Para la numeración de dispositivos se puede utilizar el código siguiente:
      VSTwain1.StartDevice
      For i = 0 To (VSTwain1.sourcesCount - 1)
         MsgBox VSTwain1.GetSourceProductName(i)
      Next
    
    Esto es el código para la elección del primer dispositivo:
      VSTwain1.StartDevice
      VSTwain1.sourceIndex = 0
      .....
      VSTwain1.Acquire
    
    Pero la mejor variante es la siguiente:
      VSTwain1.StartDevice
      For i = 0 To (VSTwain1.sourcesCount - 1)
         If VSTwain1.GetSourceProductName(i) = "Your device name" Then
           VSTwain1.sourceIndex = i
           Exit For
        End If
      Next
      .....
    
    En este caso es necesario saber el nombre correcto del dispositivo.


     
    ¿Como puedo desconectar la ventana del indicador del proceso del escaneo al recibo de los imagenes sin interface del usuario?
    El estandard TWAIN permite desconectar la ventana del indicador del proceso del escaneo, si el interface del usuario no se utilice (ShowUI=False). Se puede hacer de la manera siguente:
      VSTwain1.StartDevice
      VSTwain1.showUI = False
      VSTwain1.disableAfterAcquire = True
      VSTwain1.maxImages = 1
      VSTwain1.OpenDataSource
      VSTwain1.showIndicators = 0	' inhabilitar indicador window
      VSTwain1.Acquire
    

     
    Tengo que escanear solamente una parte de la imagen. ¿Qué debo hacer?
    Utilice el código siguiente para recibir una parte de la imagen delineada por el rectángulo (0.2,0.2) - (8.3,10.8):
      VSTwain1.StartDevice()
      VSTwain1.showUI = False
      VSTwain1.OpenDataSource()
      .............
      VSTwain1.unitOfMeasure = 0                 ' pulgadas
      VSTwain1.SetImageLayout(0.2,0.2,8.3,10.8)
      VSTwain1.Acquire()
    

     
    ¿Como puedo instalar la resolución diferente para los ejes X y Y durante el escaneo de imagenes?
    Esto es el ejemplo donde la resolución para el eje X es 4800 dpi, y para el eje Y 9600 dpi:
      VSTwain1.StartDevice
      VSTwain1.showUI = False
      VSTwain1.disableAfterAcquire = True
      VSTwain1.maxImages = 1
      VSTwain1.OpenDataSource
      VSTwain1.unitOfMeasure = 0   ' pulgadas
      VSTwain1.capability = 4376   ' ICAP_XRESOLUTION (0x1118)
      VSTwain1.capType = 1         ' un valor
      VSTwain1.capValue = 4800     ' 4800 dpi
      VSTwain1.SetCap
      VSTwain1.capability = 4377   ' ICAP_YRESOLUTION (0x1119)
      VSTwain1.capType = 1         ' un valor
      VSTwain1.capValue = 9600     ' 9600 dpi
      VSTwain1.SetCap
      VSTwain1.Acquire
    

     
    ¿Como puedo elegir la orientación de la imagen al escaneo?
    Puede elegir la orientación de la imagen al escaneo solamente si el escaner soporta esta opción:
      .....
      VSTwain1.OpenDataSource
      VSTwain1.capability = 4368    ' ICAP_ORIENTATION (0x1110)
      If VSTwain1.IsCapSupported Then
        VSTwain1.capType = 1        ' un valor
        VSTwain1.capValue = 3       ' Landscape
        VSTwain1.SetCap
      End If
      .....
    
    Los parametros posibles para la orientación:
      0     La orientación de retrato, la rotación a 0 grados
      1     La rotación a 90 grados
      2     La rotación a 180 grados
      3     La orientación de paisaje la rotación a 270 grados


     
    Nuestra organización utilice el escaneo de la red con la carga automática de folios (ADF) y procesamos mucha documentación cada dia. ¿Como podemos automatizar nuestro trabajo? Quisieramos guardar cada papel en el fichero saparado.
    Puede utilizar la página blanca para dividir los papeles y difinir las páginas blancas con ayuda del método IsBlankPage. Por ejemplo:
      Dim documentsCounter as Integer
    
      ............
      documentsCounter = 0
      ............
    
      Private Sub StartScan()
          VSTwain1.StartDevice()
          If VSTwain1.SelectSource() = 1 Then         ' la elección del dispositivo
              VSTwain1.showUI = False                 ' la desconexión del interface del usuario
              VSTwain1.disableAfterAcquire = True
              VSTwain1.maxImages = 1
              VSTwain1.autoCleanBuffer = True
              VSTwain1.tiffMultiPage = True           ' multi paginas TIFF fichero
              VSTwain1.tiffCompression = 10     ' detección automática de las mejores algoritmo de compresión
              If VSTwain1.OpenDataSource() = 1 Then
                  VSTwain1.unitOfMeasure = 0          ' pulgadas
                  VSTwain1.pixelType = 0              ' la imagen en negro y blanco
                  VSTwain1.resolution = 200           ' 200 dpi
                  If VSTwain1.duplex <> 0 Then
                      VSTwain1.duplexEnabled = True   ' permitir dúplex
                  End If
                  If VSTwain1.feederPresent = 1 Then
                      VSTwain1.xferCount = -1
                      VSTwain1.feederEnabled = True
                      VSTwain1.autoFeed = True
                      If VSTwain1.feederLoaded = 1 Then
                          VSTwain1.Acquire()
                      End If
                  End If
              End If
          End If
      End Sub
    
      Private Sub VSTwain1_PostScan(ByVal flag As Long)
          If flag <> 0 Then
              If VSTwain1.errorCode <> 0 Then
                  MsgBox VSTwain1.errorString
              End If
          Else
              Dim currNoiseLevel As Single
              If VSTwain1.IsBlankImage(0,0.01,currNoiseLevel) = 1 Then   ' check the first image (page)
                documentsCounter = documentsCounter + 1
              End If
              If VStwain1.SaveImage(0,"c:\documents\doc"+Str(documentsCounter)+".tiff") = 0 Then
                MsgBox VSTwain1.errorString
              End If
              If VSTwain1.dataSourceState = 0 Then
                  VSTwain1.StopDevice()
                  MsgBox "Scan completed."
              End if
          End If
      End Sub
    

     
    ¿Puedo utilizar el código patch para dividir los trabajos de serie? Y ¿como puedo determinar el final del trabajo de serie?
    Puede dividir los trabajos de serie, utilize la opción CAP_JOBCONTROL.
    Esto es el ejemplo para Visual Basic .NET:
      Dim jobsCounter As Integer
      
      Private Sub Form_Load()
        jobsCounter = -1
      End Sub
      
      Private Sub Scan_Click()
        VSTwain1.StartDevice
        VSTwain1.maxImages = 1
        VSTwain1.showUI = 0
        VSTwain1.disableAfterAcquire = 1
        VSTwain1.tiffMultiPage = 1
        VSTwain1.OpenDataSource
        ' 1 - Detectar y incluir separador de puestos de trabajo y continuar la escaneo.
        ' 3 - Detectar y excluir de separación de puestos de trabajo y continuar la escaneo.
        VSTwain1.jobControl = 1
        jobsCounter = jobsCounter + 1
        VSTwain1.Acquire
      End Sub
      
      Private Sub VSTwain1_PostScan(ByVal flag As Long)
        If flag <> 0 Then
          If VSTwain1.errorCode <> 0 Then
            MsgBox (VSTwain1.errorString)
          End If
        Else
          If VSTwain1.endOfJob = 1 Then
            jobsCounter = jobsCounter + 1
          Else
            VSTwain1.SaveImage 0, "c:\job"+Str(jobsCounter)+".tif"
          End If
        End If
      End Sub
      .....
    

     
    Debo saber, cuando la imagen será adquirida en el programa, pero no puedo utilizar el evento PostScan. ¿Como puedo resolver este problema?
    Comenzando con la versión 3.0 puede utilizar el método AcquireModal para resolver este problema.
    Esto es el ejemplo para Visual Basic:
      VSTwain1.appProductName = "MyTwainApplication"
      If VSTwain1.StartDevice() Then
          VSTwain1.SelectSource
          VSTwain1.showUI = True
          While VSTwain1.AcquireModal() = 1
              Set Image1.Picture = VSTwain1.GetCurrentImage()
              If VSTwain1.SaveImage(0, "c:\test.tiff") = 0 Then
                  MsgBox (VSTwain1.errorString)
              End If
          Wend
      Else
          MsgBox VSTwain1.errorString
      End If

     
    ¿Puedo recibir la imagen con la profundidad del color a 48 bit al pixel?
    Si. Comenzando con la versión 3.0 hay la posibilidad recibir las imagenes del color con la profundidad del color a 48 bit al pixel y las imagenes grises con la profundidad del color a 16 bit al pixel. Las imagenes pueden ser guardadas sin pérdida de la profundidad del color solamente en los ficheros del formato TIFF.


     
    Cuando utilizo el escaner HP ScanJet se pierde una media pulgada en la parte superior de la imagen y se añade el rectángulo negro en dimensión de una media pulgada en la parte inferior de la imagen. ¿Por qué?
    Para resolver este problema tiene que cambiar el parámetro del atributo PageSize de A4 a USLETTER.


     
    ¿Puedo guardar las imagenes adquiridas en espacio OLE da la tabla MS Access?
    Si. Puede hacerlo. Debe utilizar el método GetImageAsDIB.

    Esto es el ejemplo para MS Access ("OrderImage" ea el espacio OLE da la tabla):
    Option Compare Database
    Option Explicit
    
    Private Sub Form_AfterUpdate()
        On Error GoTo error1
        Image1.PictureData = Me![OrderImage]
        Exit Sub
    error1:
        Image1.Picture = ""
    End Sub
    
    Private Sub Form_Current()
        On Error GoTo error1
        Image1.PictureData = Me![OrderImage]
        Exit Sub
    error1:
        Image1.Picture = ""
    End Sub
    
    Private Sub BAcquire_Click()
        With VSTwain1
            .StartDevice
            If .SelectSource = 1 Then
                .autoCleanBuffer = 1
                .maxImages = 1
                .showUI = 1
                .Acquire
            End If
        End With
    
    End Sub
    
    Private Sub VSTwain1_PostScan(ByVal flag As Long)
        If flag <> 0 Then
            If VSTwain1.errorCode <> 0 Then
                MsgBox VSTwain1.errorString
            End If
        Else
            If VSTwain1.numImages > 0 Then
                If IsNull(Me!OrderName) Then ' a new record?
                    Me![OrderName] = " "
                    Me![OrderName] = "Order N" + Str(Me!Index)
                End If
                
                Me![OrderImage] = VSTwain1.GetImageAsDIB(0)
                If VSTwain1.errorCode <> 0 Then
                    MsgBox VSTwain1.errorString
                End If
                Form.Refresh
            End If
        End If
    End Sub
            

     
    ¿Puedo guardar las imagenes adquiridas en la tabla MS SQL del server?
    Si. Puede hacerlo de la manera siguiente. Hay que utilizar el metodo GetImageAsDIB.

    Esto es el ejemplo para C# como guardar la imagen en la tabla SQL del server:
      private void SaveToSql_Click(object sender, System.EventArgs e)
      {
         byte[] dib = (byte[]) VSTwain1.GetImageAsDIB(0);
         int imageSize = 14 + dib.Length;
         int imageOffset = 14 + 40;
         int imageBPP = VSTwain1.GetImageBPP(0);
         if (imageBPP == 1) imageOffset += 2*4;
         else if (imageBPP == 8) imageOffset += 256*4;
         
         byte[] image = new byte[imageSize];
         Array.Clear(image,0,imageSize);
       
         // BITMAPFILEHEADER
         image[0] = (byte)'B';
         image[1] = (byte)'M';
         image[2] = (byte)(imageSize&0xFF);
         image[3] = (byte)((imageSize&0xFF00)>>8);
         image[4] = (byte)((imageSize&0xFF0000)>>16);
         image[5] = (byte)((imageSize&0xFF000000)>>24);
         image[10] = (byte)(imageOffset&0xFF);
         image[11] = (byte)((imageOffset&0xFF00)>>8);
         image[12] = (byte)((imageOffset&0xFF0000)>>16);
         image[13] = (byte)((imageOffset&0xFF000000)>>24);
       
         Array.Copy(dib,0,image,14,dib.Length);
         
         // Insert the image into the database
         SqlConnection myConnection = new SqlConnection (@"server=(local);
    						database=northwind;uid=sa;pwd=");
         try
         {
            myConnection.Open();
            SqlCommand myCommand = new SqlCommand("DELETE FROM Images WHERE ImageID=1",
    						myConnection);
            myCommand.ExecuteNonQuery();
            myCommand = new SqlCommand ("INSERT INTO Images " 
            	+ "(Image, ImageID) VALUES (@Image, @ImageID)", myConnection);
            myCommand.Parameters.Add("@Image", image);
            myCommand.Parameters.Add("@ImageID", 1);
            myCommand.ExecuteNonQuery();
            MessageBox.Show("Image is saved successfully.");
         }
         finally 
         {
            myConnection.Close();
         }		
      }
            
    Y esto es el ejemplo para C# como recibir la imagen guardada antes de la tabla SQL del server:
      private void BGetImageFromSql_Click(object sender, System.EventArgs e)
      {
         SqlConnection myConnection = null;
         try    
         {        
            myConnection = new SqlConnection(@"server=(local);
    					database=northwind;uid=sa;pwd=");
            SqlCommand myCommand = new SqlCommand("SELECT Image FROM Images WHERE ImageID=1",
    					myConnection);
            myConnection.Open();                
            
            // Get the image from the database.        
            byte[] imagedata = (byte[])myCommand.ExecuteScalar();        
            if (imagedata != null)        
            {
               if (pictureBox1.Image != null)
               {
                  pictureBox1.Image.Dispose();
                  pictureBox1.Image = null;
               }
               MemoryStream stream = new MemoryStream(imagedata);
               pictureBox1.Image = new Bitmap(stream);
               MessageBox.Show("Image is loaded successfully.");
            }        
            else        
            {            
               MessageBox.Show("Image does not exist in database.");
            }    
         }    
         finally    
         {        
            myConnection.Close();    
         }		
      }
            

     
    Utilzo Visual FoxPro y no recibo el evento PostScan. ¿Por qué?
    Para resolver este problema hay que añadir el orden Application.AutoYield = .F. al inicio del anexo.



  • Copyright © 2008 VintaSoft Ltd. Todos los derechos reservados.