О продукте
Отзывы
|
VintaSoftTwain ActiveX Control - Часто задаваемые вопросыОбщие вопросы:
Распространение:
Установка:
Веб установка:
Программирование:
Базы данных:
Для каких целей могу я использовать VintaSoftTwain ActiveX компонент?Данный ActiveX компонент может использоваться для управления работой сканеров, цифровых и веб камер и любых других устройств, которые поддерживают TWAIN стандарт.
В каких языках программирования могу я использовать это ActiveX компонент?Лицензия разработчика и лицензия для компании позволяют использовать компонент в:
Лицензия для сервера позволяет использовать компонент в:
Какие ограничения имеет незарегистрированная версия компонента?Ограничения незарегистрированной версии:
Все эти ограничения удалены в зарегистрированной версии компонента.
Я не нашел ответа на свой вопрос. Что мне делать?Информация по большинству вопросов может быть найдена в документации к компоненту или в этом FAQ. Если Вы не нашли ответа на свой вопрос, тогда напишите письмо в службу технической поддержки.
Могу я распространять этот ActiveX компонент вместе с моим приложением?Да, Вы можете распространять компонент вместе со своим приложением. Вы платите только за первоначальную регистрацию.Лицензия для компании не имеет ограничений в распространении. Лицензия для разработчика имеет некоторые ограничения в распространении. Распространение с Лицензией для сервера требует оплаты для каждого сервера. Пожалуйста, читайте лицензионное соглашение.
Какие файлы мне нужно включать в дистрибутив моей программы?Вам нужно включить в дистрибутив Вашей программы только один файл: vstwain.dll.После установки Вашей программы на компьютер, пожалуйста зарегистрируйте ActiveX компонент с помощью программы regsvr32.exe (regsvr32.exe vstwain.dll).
Я создал программу в Visual Studio .NET. Какие шаги должен я выполнить для корректной установки моей программы на компьютере клиента?Перед распространением Вашей программы:
Во время распространения Вашей программы:
При регистрации ActiveX в Windows 98 я получаю сообщение об ошибке. Что мне делать?Эта проблема связана с отсутствием необходимых библиотек в системе. Для работы ActiveX необходимы следующие библиотеки:
Пожалуйста установите пакет "Visual C++ run time files" на компьютер - это должно решить проблему. http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe
Я создал программу в Delphi. Программа работает корректно, если она запущена с правами администратора, но если запустить программу с правами Гостя, то возникает следующее сообщение "Exception EOleSysError in module...". Как решить эту проблему?Прежде всего необходимо зарегистрировать ActiveX в системе с помощью программы register32.exe - эта операция должна быть выполнена с администраторскими полномочиями.Далее необходимо использовать следующий код в Вашей программе:
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.
Этот код позволяет проверить зарегистрирована ли программа в системе и позволяет запустить Вашу программу с минимальными правами.
Как мне добавить объект VintaSoftTwain на форму в проекте VB.NET?Необходимо выполнить следующие шаги для добавления объекта VintaSoftTain на форму приложения:
Я хочу использовать ActiveX в Delphi 2005, но дизайнер форм не позволяет добавлять ActiveX компоненты на форму приложения. Возникает следующая ошибка "Failed to add a reference to the ActiveX type library. Ensure that it is properly registered. ...". Как решить эту проблему?Borland Delphi 8.0 (2005) и Borland C# Builder 1.0 принимают ActiveX компоненты только если выбрана установка US locale. Другие установки игнорируются.Вот список шагов позволяющих решить данную проблему:
Как мне динамически добавить VintaSoftTwain объект в мой проект на VB?Необходимо сделать следующее:
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
Я пытаюсь использовать ActiveX в среде Windows 2003 Server, но возникает ошибка "Error at loading the TWAIN_32.DLL". Как решить эту проблему?Версия Windows 2003 Server которую Вы используете имеет ошибку в конфигурации: Функция GetWindowsDirectory возвращает некорректный путь к директории Windows, а именно "C:\Documents and Settings\User\Windows\" вместо "C:\Windows\". Данная статья поможет Вам решить проблему: http://support.microsoft.com/kb/832048.
Мне не удается добавить объект VintaSoftTwain на форму приложения в среде VS .NET 2005. Как решить эту проблему?Вы должны добавить к своему проекту ссылку на библиотеку "stdole" перед добавлением объекта VintaSoftTwain на форму приложения. Вот список необходимых шагов:
После этих шагов Вы можете добавить объект VintaSoftTwain на форму Вашего приложения без каких либо проблем.
При попытке перетащить ActiveX из Toolbox на форму в MS Visual Studio 2005, возникает ошибка: "Error message: Failed to import the ActiveX control". Есть ли возможность решить эту проблему?
Как мне подписать мою копию компонента, чтобы использовать его на моей веб странице?VintaSoftTwain ActiveX подписан цифровым сертификатом от Thawte.Пожалуста сообщите нам, если Вы хотите подписать VintaSoftTwain ActiveX своим собственным сертификатом.
Какие шаги мне нужно выполнить чтобы добавить ActiveX к моему интернет проекту?Вам необходимо выполнить следующие шаги:
// In example:
<OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
CODEBASE="">
</OBJECT>
// In your code:
<OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
CODEBASE="http://www.your-server.com/activex/VSTwain.cab#version=5,1,0,1">
</OBJECT>
После всех этих шагов Вам не придется устанавливать ActiveX компонент на всех компьютерах Вашей организации. Когда пользователь откроет страницу с компонентом ему будет выдан запрос на установку компонента на его компьютер. Если он согласится на установку, то компонент будет автоматически установлен на его компьютер и он сможет работать с Вашей веб страницей. Файл VSTwain.cab находится в директории "Bin" дистрибутивного пакета ActiveX компонента.
Как могу я загрузить изображение полученное со сканера на веб сервер?Протокол HTTP не позволяет напрямую загружать изображения на Веб (HTTP) сервер. Для решения этой проблемы можно использовать специальный веб-скрипт, который должен быть помещен на сервер. Вы можете найти множество скриптов в интернете или использовать один из следующих: ASP script, Perl script.Для загрузки изображений на сервер через скрипт необходимо знать какие поля содержит скрипт. ASP скрипт содержит следующие поля:
и для загрузки изображений через этот скрипт необходимо использовать следующий код:
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 скрипт содержит следующие поля:
и для загрузки изображений через этот скрипт необходимо использовать следующий код:
if VSTwain1.SetHttpServerParams("http://www.your-server.com/cgimages/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
Также смотрите примеры использования.
Я пытаюсь выбрать устройство с помощью свойства SourceIndex в Internet Explorer, но получаю ошибку. Почему?Каждый объект на веб странице в Internet Explorer имеет предопределенное свойство SourceIndex - это свойство доступно только для чтения. Вы должны использовать следующий код чтобы работать с свойством SourceIndex объекта VSTwain в JavaScript или VBScript:VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' second device VSTwain1.Acquire()
Могу я использовать ActiveX в Mozilla Firefox?Да, Вы можете использовать ActiveX в Mozilla Firefox 3.0 и выше с задействованным IE Tab Plug-in.
Как мне получить черно-белые изображения (документы)?Вот пример кода для получения черно-белых изображений:
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
Язык программирования который я использую не поддерживает работу с массивами. Как мне обойти эту проблему?Если Вам необходимо получить массив значений с помощью методов GetPageSizes, GetPixelTypes, GetResolutions, GetUnitsOfMeasure, но используемый Вами язык программирования не поддерживает работу с массивами, тогда Вы можете использовать следующий метод:
' This example shows how to get supported pixel types
VSTwain1.StartDevice()
VSTwain1.OpenDataSource()
bSupportBW = 0
VSTwain1.PixelType = 0 ' black-white (1 bit per pixel)
if VSTwain1.ErrorCode = 0 then ' black-white images is supported by device
bSupportBW = 1
end if
bSupportGray = 0
VSTwain1.PixelType = 1 ' gray (8 bit per pixel)
if VSTwain1.ErrorCode = 0 then ' gray images is supported by device
bSupportGray = 1
end if
bSupportRGB = 0
VSTwain1.PixelType = 2 ' RGB (24 bit per pixel)
if VSTwain1.ErrorCode = 0 then ' RGB images is supported by device
bSupportRGB = 1
end if
...................
Могу я управлять лотком автоматической подачи документов без пользовательского интерфейса?Вот пример показывающий как можно управлять работой сканера с лотком автоматической подачи документов без пользовательского интерфейса:
Private Sub StartScan()
VSTwain1.StartDevice()
If VSTwain1.SelectSource() = 1 Then ' user selected the device
VSTwain1.ShowUI = False ' disable UI
VSTwain1.DisableAfterAcquire = True
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = True
VSTwain1.TiffMultiPage = True ' multi page TIFF file
VSTwain1.TiffCompression = 10 ' auto detect of best compression algorithm
If VSTwain1.OpenDataSource() = 1 Then
VSTwain1.UnitOfMeasure = 0 ' inches
VSTwain1.PixelType = 0 ' black-white image
VSTwain1.Resolution = 200 ' 200 dpi
If VSTwain1.FeederPresent = 1 Then
VSTwain1.FeederEnabled = True
If VSTwain1.Duplex <> 0 Then
VSTwain1.DuplexEnabled = True ' enable duplex
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
Else
MsgBox "Scan completed."
End If
Else
If VSTwain1.SaveImage(VSTwain1.NumImages-1,"c:\test.tiff") = 0 Then
MsgBox VSTwain1.ErrorString
End If
End If
End Sub
Можно ли создать консольное приложение используя этот ActiveX компонент?Используя этот ActiveX компонент нельзя создать консольное приложение. Приложение должно иметь собственное окно для работы с компонентом.
Могу я выбрать нужное мне устройство без стандартного диалога выбора устройства?Да. Можно использовать следующий код для нумерации устройств:
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 ' disable indicator window VSTwain1.Acquire
Мне нужно отсканировать только часть изображения. Как это сделать?Используйте следующий код чтобы получить часть изображения ограниченную прямоугольником (0.2,0.2) - (8.3,10.8)VSTwain1.StartDevice() VSTwain1.ShowUI = False VSTwain1.OpenDataSource() ............. VSTwain1.UnitOfMeasure = 0 ' inches VSTwain1.SetImageLayout(0.2,0.2,8.3,10.8) VSTwain1.Acquire()
Как мне установить разное разрешение для оси X и Y во время сканирования изображений?Вот пример в котором разрешение по оси X устанавливается равным 4800 dpi, а по оси Y равным 9600 dpi:VSTwain1.StartDevice VSTwain1.ShowUI = False VSTwain1.DisableAfterAcquire = True VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.UnitOfMeasure = 0 ' inches VSTwain1.Capability = 4376 ' ICAP_XRESOLUTION (0x1118) VSTwain1.CapType = 1 ' one value VSTwain1.CapValue = 4800 ' 4800 dpi VSTwain1.SetCap VSTwain1.Capability = 4377 ' ICAP_YRESOLUTION (0x1119) VSTwain1.CapType = 1 ' one value VSTwain1.CapValue = 9600 ' 9600 dpi VSTwain1.SetCap VSTwain1.Acquire
Как мне выбрать ориентацию изображения при сканировании?Вы можете выбрать ориентацию изображения при сканировании только если сканер поддерживает данную возможность: .....
VSTwain1.OpenDataSource
VSTwain1.capability = 4368 ' ICAP_ORIENTATION (0x1110)
If VSTwain1.IsCapSupported Then
VSTwain1.capType = 1 ' one value
VSTwain1.capValue = 3 ' Landscape
VSTwain1.SetCap
End If
.....
Возможные значения для ориентации:
Наша организация испрользует сетевой сканер с автоматической подачей листов (ADF) и мы обрабатываем множество документов каждый день. Как мы можем автоматизировать нашу работу? Хотелось бы сохранять каждый документ в отдельном файле.Вы можете использовать пустую страницу как разделитель документов и определять пустые страницы с помощью метода IsBlankPage. Вот пример:
Dim documentsCounter as Integer
............
documentsCounter = 0
............
Private Sub StartScan()
VSTwain1.StartDevice()
If VSTwain1.SelectSource() = 1 Then ' select the device
VSTwain1.ShowUI = False ' disable UI
VSTwain1.DisableAfterAcquire = True
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = True
VSTwain1.TiffMultiPage = True ' multi page TIFF file
VSTwain1.TiffCompression = 10 ' auto detect of best compression algorithm
If VSTwain1.OpenDataSource() = 1 Then
VSTwain1.UnitOfMeasure = 0 ' inches
VSTwain1.PixelType = 0 ' black-white image
VSTwain1.Resolution = 200 ' 200 dpi
If VSTwain1.Duplex <> 0 Then
VSTwain1.DuplexEnabled = True ' enable duplex
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
Else
VSTwain1.StopDevice()
MsgBox "Scan completed."
End If
Else
Dim currNoiseLevel As Single
If VSTwain1.IsBlankImage(0, 0.01, currNoiseLevel) = 1 Then
documentsCounter = documentsCounter + 1
End If
If VStwain1.SaveImage(0,"c:\documents\doc"+Str(documentsCounter)+".tiff") = 0 Then
MsgBox VSTwain1.ErrorString
End If
End If
End Sub
Могу я использовать patch-коды для разделения пакетных заданий? Если да, как мне определить конец пакетного задания?Вы можете разделять пакетные задания, если будете использовать возможность CAP_JOBCONTROL.Вот пример для Visual Basic:
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 - 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 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
.....
Я должен знать когда изображение будет получено в программе, но я не могу использовать событие PostScan. Как мне решить эту проблему?Начиная с версии 3.0 Вы можете воспользоваться методом AcquireModal чтобы решить эту проблему.Вот пример для 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
Могу я получить изображения с глубиной цвета в 48 бит на пиксел?Да. Библиотека VintaSoftTwain.NET позволяет получить 48-битные цветные изображения или 16-битные серые изображения. Изображения могут быть сохранены без потери глубины цвета только в TIFF файлы.Здесь приведен пример демонстрирующий как получить 48-битное цветное изображение со сканера без пользовательского интерфейса: VSTwain1.OpenDataSource() VSTwain1.PixelType = 2 ' RGB VSTwain1.Capability = 4395 ' IBitDepth VSTwain1.CapType = 1 ' One value VSTwain1.CapValue = 16 ' 16 bits per color component VSTwain1.SetCap() VSTwain1.Acquire()Здесь приведен пример демонстрирующий как получить 24-битное цветное изображение со сканера без пользовательского интерфейса: VSTwain1.OpenDataSource() VSTwain1.PixelType = 2 ' RGB VSTwain1.Capability = 4395 ' IBitDepth VSTwain1.CapType = 1 ' One value VSTwain1.CapValue = 8 ' 8 bits per color component VSTwain1.SetCap() VSTwain1.Acquire()Здесь приведен пример демонстрирующий как получить 16-битное серое изображение со сканера без пользовательского интерфейса: VSTwain1.OpenDataSource() VSTwain1.PixelType = 1 ' Gray VSTwain1.Capability = 4395 ' IBitDepth VSTwain1.CapType = 1 ' One value VSTwain1.CapValue = 16 ' 16 bits per color component VSTwain1.SetCap() VSTwain1.Acquire()
Когда я использую сканер HP ScanJet теряется пол дюйма в верхней части изображения и добавляется черный прямоугольник высотой в пол дюйма в нижней части изображения. Почему?Для решения этой проблемы Вам нужно изменить значение свойства pageSize с A4 на USLETTER.
Могу я сохранить полученные изображения в OLE-поле таблицы MS Access?Да. Вы можете сделать это. Для этого необходимо использовать метод GetImageAsDIB.Вот пример для MS Access ("OrderImage" это OLE-поле таблицы):
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
Могу я сохранять полученные изображения в таблице MS SQL сервера?Да. Вы можете сделать это. Для этого необходимо использовать метод GetImageAsDIB.Вот пример для C# как сохранить изображение в таблицу SQL сервера:
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();
}
}
А вот пример для C# как получить ранее сохраненное изображение из таблицы SQL сервера:
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();
}
}
Я использую Visual FoxPro и у меня не возникает событие PostScan. Почему?Для решения этой проблемы необходимо добавить команду Application.AutoYield = .F. в начало приложения.
|