| Accueil | Télécharger | Inscription | Opinions | Maintenance | Infos |
|
|||||||
|
VintaSoftTwain.NET bibliothèque Pour quels buts je peux utiliser la bibliothèque VintaSoftTwain.NET? La bibliothèque donnée peut être utilisée pour Un guidage du travail des scanners, les cameras numériques et les cameras-webs et n'importe quels autres dispositifs, qui supportent le standard TWAIN. La bibliothèque, que-ce qu’elle comprend? La bibliothèque comprend: Dans quels langages de programmation je peux utiliser la bibliothèque? La licence du développeur et la licence pour la société permettent utiliser composant à: Licence pour serveur permet d’utiliser composant à: Quels restrictions existe dans la version non enregistrée de la bibliothèque? Les restrictions de la version non enregistrée de la bibliothèque:
Je n'ai pas trouvé la réponse à ma question. Qu’est-ce que je dois faire? L'information sur la plupart des questions peut être trouvée dans la documentation sur le composant ou dans ce FAQ. Si vous n'avez pas trouvé la réponse à votre question, alors écrivez la lettre au service de la maintenance. Quels fichiers je dois incorparer dans le distributif de mon logiciel? Vous ne devez insérer dans le distributif de votre logiciel qu’un fichier: VintaSoft.Twain.dll. Après l'installation de Votre logiciel sur l'ordinateur ce fichier doit être est placé au catalogue ou il y avait une référence à la compilation du logiciel. Je peux diffuser le composant VintaSoft.Twain.dll avec mon application sans quelque paiement supplémentaire? Oui, vous pouvez diffuser le composant avec votre application. Vous ne payez que pour l’enregistrement initial. La licence pour la société et pour le serveur n'ont pas les restrictions de la diffusion. La licence du développeur a certains restrictions de la diffusion. Consultez s'il vous plaît l'accord de licence. Comment ajouter VintaSoftTwain.NET composants sur la forme de mon application? Pour ajouter VintaSoftTwain.NET composants sur la forme il est nécessaire d'accomplir les pas suivants:
Comment recevoir les images en blanc-et-noires (les documents)? L'exemple du code pour la réception des images en blanc-et-noires:
Private Sub StartScan()
Try
VSTwain1.StartDevice
If VSTwain1.SelectSource Then
VSTwain1.OpenDataSource
VSTwain1.PixelType = PixelType.BW
VSTwain1.Acquire
End If
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Est-ce que je peux diriger un chargeur de document automatisé (ADF) sans interface d'utilisateur? L'exemple qui montre comment peut-on diriger le travail du scanner avec un chargeur de document automatisé sans interface d'utilisateur:
Private Sub StartScanButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles StartScanButton.Click
Try
VSTwain1.StartDevice()
VSTwain1.SelectSource()
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.OpenDataSource()
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.RGB
VSTwain1.Resolution = 200
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true
End If
If VSTwain1.FeederPresent Then
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
VSTwain1.XferCount = -1
If VSTwain1.FeederLoaded Then
VSTwain1.Acquire()
Endif
Endif
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ImageAcquired
Try
VStwain1.SaveImage(0,"c:\test.tiff")
Catch ex As ImagingException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ScanCompleted
If VSTwain1.ErrorCode <> ErrorCode.None Then
MsgBox(VSTwain1.ErrorString)
Else
MsgBox("Scan process is completed.")
End If
End Sub
Est-ce que je peux diriger un chargeur de document automatisé (ADF) sans interface d'utilisateur et sans utilisation de l'événement PostScan? L'exemple montre comment peut- on diriger le travail du scanner avec un chargeur de document automatisé sans interface d'utilisateur et sans utilisation de l'événement PostScan:
Private Sub StartScanButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles StartScanButton.Click
Try
VSTwain1.StartDevice()
VSTwain1.SelectSource()
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.OpenDataSource()
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.RGB
VSTwain1.Resolution = 200
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true ' enable duplex
End If
If VSTwain1.FeederPresent Then
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
VSTwain1.XferCount = -1
If VSTwain1.FeederLoaded Then
While VSTwain1.AcquireModal()
Try
VStwain1.SaveImage(0,"c:\test.tiff")
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End While
VSTwain1.StopDevice()
MsgBox "Scan completed."
Endif
Endif
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Il me faut scanner seulement la partie de l’image. Comment je dois le faire? Utilisez le code suivant pour recevoir la partie de l’image limitée par le rectangle (0.5,0.5) - (6,8): VSTwain1.StartDevice() VSTwain1.ShowUI = False VSTwain1.OpenDataSource() ............. VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches VSTwain1.SetImageLayout(0.5,0.5,6,8) VSTwain1.Acquire() Est-ce que je peux choisir le dispositif nécessaire sans utiliser le dialogue standard du choix d’un dispositif? Oui. Il est possible d’utiliser le code suivant pour le numérotage des dispositifs: VSTwain1.StartDevice
For i = 0 To (VSTwain1.SourcesCount - 1)
MsgBox VSTwain1.GetSourceProductName(i)
Next
Ce code sert au choix du premier dispositif:
VSTwain1.StartDevice VSTwain1.SourceIndex = 0 ..... VSTwain1.AcquireBien que la meilleur variante soit le suivant: VSTwain1.StartDevice
For i = 0 To (VSTwain1.SourcesCount - 1)
If VSTwain1.GetSourceProductName(i) = "Your device name" Then
VSTwain1.SourceIndex = i
break
End If
Next
.....
Dans ce cas il est nécessaire de savoir le nom exacte du dispositif.Comment désactiver la fenêtre de l'indicateur du procès du scanning à la réception des images sans interface d'utilisateur? Le standard TWAIN permet de désactiver la fenêtre de l'indicateur du procès du scanning, si l'interface d'utilisateur n'est pas utilisée (ShowUI=False). On peut faire cela comme il suit: VSTwain1.StartDevice VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.ShowIndicators = 0 ' Désactiver l'indicateur de la fenêtre VSTwain1.Acquire Je veux créer l'indicateur personnel du procès du scanning. Est-ce que c'est possible? Oui, c'est possible, mais au condition que l’image soit remise du scanner à l'application à travers la mémoire (Memory transfer). Pour la création de l'indicateur du procès du scanning il est nécessaire d'utiliser l'événement Progress. L'exemple: Private Sub VSTwain1_ImageProcessingProgress(ByVal sender As Object, _
ByVal e As VintaSoft.Twain.ProgressEventArgs) _
Handles VSTwain1.Progress
If e.action = Action.Deskew Then
txtAction.Text = "Deskewing..."
ElseIf e.action = Action.Despecle Then
txtAction.Text = "Despeckling..."
ElseIf e.action = Action.BorderDetection Then
txtAction.Text = "Border detecting..."
ElseIf e.action = Action.Rotation Then
txtAction.Text = "Rotating..."
ElseIf e.action = Action.ImageScan Then
txtAction.Text = "Image scan..."
ElseIf e.action = Action.ImageSaving Then
txtAction.Text = "Saving image to PDF document..."
End If
progressBar1.Value = e.percentComplete
e.interrupt = bFinishFlag
End Sub
Comment établir la résolution différente pour l'axe X et Y pendant le scanning des images? L'exemple а qui résolution selon l'axe X est établi égal 4800 dpi, mais selon l'axe Y égal 9600 dpi: VSTwain1.StartDevice VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches VSTwain1.Capability = Capability.IXResolution VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 4800 ' 4800 dpi VSTwain1.SetCap VSTwain1.Capability = Capability.IYResolution VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 9600 ' 9600 dpi VSTwain1.SetCap VSTwain1.Acquire Je veux lancer le procès du scanning dans le flot particulier. Est-ce que c’est possible? Oui, c'est possible, mais à condition d’utiliser la méthode AcquireModal. L’exemple pour C#: .....
public class Form1 : System.Windows.Forms.Form
{
private VSTwain twain=null;
.....
private void buttonScanASync_Click(object sender, System.EventArgs e)
{
ThreadStart ts = new ThreadStart(this.doScanning);
Thread t = new Thread(ts);
t.Name = "Scan-Thread";
t.Start();
}
private void doScanning()
{
twain = new VSTwain();
try
{
twain.StartDevice();
twain.ShowUI = false;
if (twain.SelectSource())
{
while (twain.AcquireModal())
{
pictureBox.Image = twain.GetCurrentImage();
}
}
twain.StopDevice();
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message);
}
}
.....
}
.....
Notre organisation utilise le scanner avec un chargeur de document automatisé (ADF) branché au réseau local et nous traitons la multitude de documents chaque jour. Comment nous pouvons automatiser notre travail? Il est désirable de sauvegarder chaque document comme un fichier particulier. Vous pouvez utiliser une page vide comme le séparateur des documents et définir les pages vides à l'aide de la méthode IsBlankPage. L'exemple: Dim documentsCounter as Integer
............
documentsCounter = 0
............
Private Sub StartScan()
Try
VSTwain1.StartDevice()
If VSTwain1.SelectSource() = 1 Then
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
VSTwain1.OpenDataSource()
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.GRAY
VSTwain1.Resolution = 200 ' 200 dpi
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true
End If
If VSTwain1.FeederPresent Then
VSTwain1.XferCount = -1
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
If VSTwain1.FeederLoaded Then
VSTwain1.Acquire()
End If
End If
End If
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ImageAcquired
If VSTwain1.IsBlankImage(0) Then ' check the first image (page)
documentsCounter = documentsCounter + 1
End If
Try
VStwain1.SaveImage(0,"c:\documents\doc"+Str(documentsCounter)+".pdf")
Catch ex As PdfException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ScanCompleted
If VSTwain1.ErrorCode <> ErrorCode.None Then
MsgBox(VSTwain1.ErrorString)
Else
MsgBox("Scan process is completed.")
End If
End Sub
Est-ce que je peux utiliser les patch-codes pour la séparation? Si oui, comment définir la fin de batched jobs? Vous pouvez separer les batched jobs, si vous utiliserez la possibilité CAP_JOBCONTROL. L'exemple pour 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 = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.TiffMultiPage = true
VSTwain1.OpenDataSource
' 1 - Detect and include job separator and continue scanning.
' 3 - Detect and exclude job separator and continue scanning.
VSTwain1.JobControl = 1
jobsCounter = jobsCounter + 1
VSTwain1.Acquire
End Sub
Private Sub VSTwain1_PostScan(ByVal sender As System.Object,
ByVal e As VintaSoft.Twain.PostScanEventArgs) Handles VSTwain1.PostScan
If Not e.Flag Then
If VSTwain1.ErrorCode <> 0 Then
MsgBox(VSTwain1.ErrorString)
End If
Else
If VSTwain1.EndOfJob Then
jobsCounter = jobsCounter + 1
Else
VSTwain1.SaveImage 0, "c:\job"+jobsCounter.ToString()+".tif"
End If
End If
End Sub
.....
Je veux sauvgarder les images acquises au buffer pour le traitement suivant. Comment je dois le faire? i vous voulez sauvgarder l’image acquise au buffer personnel (par exemple à l'objet Collection а VB.NET), alors vous devez créer la copie complète de l'objet Image rendu par la méthode GetImage, et placer la à votre buffer. On ne peut pas placer directement l'objet rendu par la fonction GetImage au buffer, parce que cet objet sera détruit lorsque vous acquerrez une nouvelle image ou quand vous lancez la méthode StopDevice. Le code juste: ...
Dim colDocumentPages As New Collection
...
Dim picNewPage As Image = New Bitmap(vnsScanner.GetCurrentImage)
colDocumentPages.Add(picNewPage)
...
Le pas code juste:... Dim colDocumentPages As New Collection ... Dim picNewPage As Image picNewPage = vnsScanner.GetCurrentImage colDocumentPages.Add(picNewPage) ...
Vous devez accomplir les actions suivantes de côté du du client:
VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' second périphérique VSTwain1.Acquire() Je peux garder les images acquises dans le tableau MS SQL du serveur? Oui, vous pouvez le faire. S'il vous plaît, regardez l'exemple 3. |
||||||||