| Главная | Загрузить | Регистрация | Отзывы | Тех.поддержка | О нас |
|
||||||||
|
VintaSoftTwain.NET Library Для каких целей могу я использовать библиотеку? Данная библиотека может использоваться для управления работой сканеров, цифровых и веб камер и любых других устройств, которые поддерживают TWAIN стандарт. Что включает в себя библиотека? Библиотека включает в себя:
В каких языках программирования могу я использовать библиотеку? Лицензия разработчика и лицензия для компании позволяют использовать компонент в: Лицензия для сервера позволяет использовать компонент в: Какие ограничения имеет незарегистрированная версия библиотеки? Ограничения незарегистрированной версии библиотеки: Все эти ограничения удалены в зарегистрированной версии библиотеки. Я не нашел ответа на свой вопрос. Что мне делать? Информация по большинству вопросов может быть найдена в документации или в этом FAQ. Если Вы не нашли ответа на свой вопрос, тогда напишите письмо в службу технической поддержки. Какие файлы мне нужно включать в дистрибутив моей программы? Вам нужно включить в дистрибутив Вашей программы только один файл: VintaSoft.Twain.dll. При установке Вашей программы этот файл должен быть помещен в каталог на который была ссылка при компиляции программы. Могу я распространять VintaSoft.Twain компонент вместе с моим приложением без какой либо дополнительной оплаты? Да, Вы можете распространять компонент вместе со своим приложением. Вы платите только за первоначальную регистрацию. Лицензия для компании и для сервера не имеют ограничений в распространении. Лицензия разработчика имеет некоторые ограничения в распространении. Пожалуйста смотрите лицензионное соглашение. Как мне добавить VintaSoft.Twain компонент на форму моего приложения? Чтобы добавить VintaSoft.Twain компонент на форму необходимо выполнить следующее: Как мне получить черно-белые изображения (документы)? Вот пример кода для получения черно-белых изображений:
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
Могу ли я управлять лотком автоматической подачи документов без пользовательского интерфейса? Вот пример показывающий как можно управлять работой сканера с лотком автоматической подачи документов без пользовательского интерфейса:
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
Могу ли я управлять лотком автоматической подачи документов без пользовательского интерфейса и не используя событие PostScan? Вот пример показывающий как можно управлять работой сканера с лотком автоматической подачи документов без пользовательского интерфейса и без использования события 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
Мне нужно отсканировать только часть изображения. Как это сделать? Используйте следующий код чтобы получить часть изображения ограниченную прямоугольником (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() Могу ли я выбрать нужное мне устройство без стандартного диалога выбора устройства? Да. Можно использовать следующий код для нумерации устройств:
VSTwain1.StartDevice
For i = 0 To (VSTwain1.SourcesCount - 1)
MsgBox VSTwain1.GetSourceProductName(i)
Next
А этот код для выбора первого устройства:
VSTwain1.StartDevice VSTwain1.SourceIndex = 0 ..... VSTwain1.AcquireХотя самый лучший вариант следующий:
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
.....
В этом случае необходимо знать правильное название устройства.Как мне отключить окно индикатора процесса сканирования при получении изображений без пользовательского интерфейса? Стандарт TWAIN позволяет отключать окно индикатора процесса сканирования, если пользовательский интерфейс не используется (ShowUI=False). Это можно сделать следующим образом: VSTwain1.StartDevice VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.ShowIndicators = 0 ' не показывать окно индикатора VSTwain1.Acquire Я хочу создать собственный индикатор процесса сканирования. Возможно ли это? Да, это возможно, если изображение передается от сканера к приложению через память (Memory transfer). Для создания своего индикатора процесса сканирования необходимо использовать событие Progress, вот пример: 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
Как мне установить разное разрешение для оси X и Y во время сканирования изображений? Вот пример в котором разрешение по оси X устанавливается равным 4800 dpi, а по оси Y равным 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 Я хочу запустить процесс сканирования в отдельном потоке. Возможно ли это? Да, это возможно, если использовать метод AcquireModal, вот пример для 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);
}
}
.....
}
.....
Наша организация испрользует сетевой сканер с автоматической подачей листов (ADF) и мы обрабатываем множество документов каждый день. Как мы можем автоматизировать нашу работу? Хотелось бы сохранять каждый документ в отдельном файле. Вы можете использовать пустую страницу как разделитель документов и определять пустые страницы с помощью метода IsBlankPage. Вот пример:
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
Могу я использовать patch-коды для разделения пакетных заданий? Если да, как мне определить конец пакетного задания? Вы можете разделять пакетные задания, если будете использовать возможность CAP_JOBCONTROL. Вот пример для 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
.....
Я хочу сохранить приобретенные изображения в своем буфере для последующей их обработки. Как мне это сделать? Если Вы хотите сохранить приобретенное изображение в собственном буфере (например в объекте Collection в VB.NET), тогда Вы должны создать полную копию объекта Image возвращаемую методом GetImage, и поместить ее в Ваш буфер. Нельзя напрямую помещать объект возвращаемый функцией GetImage в буфер, потому что этот объект будет разрушен когда Вы приобретете новое изображение или когда Вы вызовете метод StopDevice. Вот правильный код: ... Dim colDocumentPages As New Collection ... Dim picNewPage As Image = New Bitmap(vnsScanner.GetCurrentImage) colDocumentPages.Add(picNewPage) ...А вот не правильный код: ... Dim colDocumentPages As New Collection ... Dim picNewPage As Image picNewPage = vnsScanner.GetCurrentImage colDocumentPages.Add(picNewPage) ... Когда я использую сканер HP ScanJet теряется пол дюйма в верхней части изображения и добавляется черный прямоугольник высотой в пол дюйма в нижней части изображения. Почему? Для решения этой проблемы Вам нужно изменить значение свойства PageSize с A4 на USLETTER. Какие шаги мне нужно выполнить чтобы добавить библиотеку к моему интернет проекту? Вы должны выполнить следующие действия на стороне сервера:
Вы должны выполнить следующие действия на стороне клиента:
VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' второе устройство VSTwain1.Acquire() Могу я сохранять приобретенные изображения в таблице MS SQL сервера? Да, Вы можете это сделать, пожалуйста смотрите пример 3 здесь. |
|||||||||