Info Produit
Opinions
|
VintaSoftTwain ActiveX Control - Foire aux questionsQuestions d'ordre général:
Redistribution:
Déploiement:
Web déploiement:
Programmation:
Bases de données:
Pour quels buts je peux utiliser VintaSoftTwain ActiveX composant?Le composant ActiveX peut être utilisé pour un guidage du travail des scanners, des cameras numériques et les web-cameras et tous les autres dispositifs, qui supportent le standard TWAIN.
Dans quels langages de programmation je peux utiliser le composant ActiveX?Licence du développeur et licence pour la société permettent utiliser composant à:
Licence pour serveur permet utiliser composant à:
Quelles restrictions existent dans la version non enregistrée du composant?Les restrictions de la version non enregistrée:
Tous ces restrictions sont annulées dans la version enregistrée du composant.
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 à propos du 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.
Est-ce que je peux diffuser le composant ActiveX avec mon application?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. Regardez, s'il vous plaît, l'accord de licence.
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: vstwain.dll.Après l'installation de Votre logiciel sur l'ordinateur, s'il vous plaît enregistrez le composant ActiveX à l'aide du logiciel regsvr32.exe (regsvr32 vstwain.dll).
J'ai créé le logiciel à Visual Studio .NET. Quelles pas je doit accomplir pour l'installation correcte de mon logiciel sur l'ordinateur du client?Avant la diffusion de votre logiciel:
Pendant la diffusion de votre logiciel:
Pandant la registration de ActiveX dans le Windows 98 je reçois le message «erreur» . Qu’est-ce que je dois faire?Ce problème est lié à l'absence des bibliothèques nécessaires dans le système. Les bibliothèques suivantes sont nécessaires pour le fonctionnemrnt d’ActiveX:
Installez s'il vous plaît le paquet "Visual C ++ run time files" sur l'ordinateur. Cette operation doit régler le problème. Ce package d'installation peut être téléchargé à partir de ce lien: http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe
J'ai créé le logiciel à Delphi. Le logiciel travaille correctement s’il est demarré avec les droits d’administrateur, mais si le logiciel est demarré avec les droits du Visiteur le message suivant "Exception EOleSysError in module..." apparaît. Comment je peux régler le problème?Avant tout il faut enregistrer ActiveX dans le système à l'aide du logiciel register32.exe de - doit être accomplie avec les attributions d'administrateur.Ensuite il est nécessaire d'utiliser le code suivant dans votre logiciel:
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.
Ce code permets de verifier si le programme est enregistrée dans le système et permets de lancer votre programme avec les droits minimums.
Comment je peux ajouter l'objet VintaSoftTwain sur la forme dans du projet VB.NET?Il est nécessaire d'accomplir les pas suivants pour l’addition de l'objet VintaSoftTwain sur la forme de l'application:
Je veux utiliser ActiveX à Delphi 2005, mais le designer des formes ne permet pas d'ajouter les composants ActiveX à la forme de l'application. Une erreur suivante "Failed to add a reference to the ActiveX type library. Ensure that it is properly registered. ...". Comment je peux régler le problème?Borland Delphi 8.0 (2005) et Borland C# Builder 1.0 ont des imperfections et admettent (adoptent) le composant ActiveX seulement si US local est utilisé. Les autres sont ignorés.Algorithme des pas qui permettent de régler le problème en question:
Comment ajouter dynamiquement VintaSoftTwain objet dans mon projet sur VB?Il est nécessaire de accomplir les pas suivants:
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
Je tente d'utiliser ActiveX dans l'environnement WINDOWS 2003 Server, mais une erreur "Error at loading the TWAIN_32. DLL" apparaît. Comment je peux régler le problème?Dans la version du Windows 2003 Server que vous utilisez il y a une erreur dans la configuration : la fonction GetWindowsDirectory rend la voie incorrecte vers la directoire du Windows, p.e. "C:\Documents and Settings\User\Windows \" au lieu de "C:\Windows \".L'article suivent vous aidera à régler ce problème: http://support.microsoft.com/kb/832048.
Je ne réussis pas à ajouter l'objet VintaSoftTwain ActiveX sur la forme de l'application dans le milieu de VS .NET 2005. Comment régler ce problème?Vous devez ajouter au projet la référence à la bibliothèque "stdole" avant l’addition de l'objet VintaSoftTwain ActiveX sur la forme de l'application. Les pas nécessaires:
Après ces pas il est possible d’ajouter l'objet 1 sur la forme de votre application sans problèmes.
Lorsque je tente de faire glisser le contrôle ActiveX de la boîte à outils dans le formulaire en MS Visual Studio 2005, l'erreur suivante se produit: "Erreur message: Impossible d'importer le contrôle ActiveX". Existe-t-il un moyen de résoudre ce problème?
Comment signer ma copie du composant, pour l’utiliser sur ma page-web?VintaSoftTwain ActiveX est signé par le certificat numérique de Thawte.Annoncer-nous s’il vous plaît , si vous voulez signer VintaSoftTwain ActiveX par votre certificat personnel.
Quels pas je dois accomplir pour ajouter ActiveX dans mon projet WEB?Il est nécessaire d'accomplir les pas suivants:
// 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>
Vous ne devez pas installer le composant ActiveX sur tous les ordinateurs de votre organisation apres touts ces pas. Quand l'utilisateur ouvrira la page avec son composant la question sur l'installation du composant à son ordinateur sera posé. S’ il accepte l'installation, le composant sera instalé automatiquement à son ordinateur et il pourra travailler avec votre page web. VSTwain.cab file can be found in "Bin" directory of the distributive package.
Comment je peux télécharger au serveur web l’image reçue du scanner?Le protocole HTTP ne permet pas télécharger directement les images au serveur Web (HTTP). Pour la résolution du problème on peut utiliser le web-script spécial, qui doit être installé au serveur. Vous pouvez trouver la multitude de scripts sur Internet ou utiliser un des suivants: ASP script, Perl script.Pour le téléchargment des images au serveur à l’aide des scripts il faut savoir quels champs le script contient-it. Le script ASP contient les champs suivants:
Et pour le téléchargement des images à l’aide des scripts il faut utiliser le code suivant:
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
Le script Perl contient les champs suivants:
Et pour le téléchargement des images à l’aide des scripts il faut utiliser le code suivant:
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
S’il vous plaît voir nos exemples.
Je tente de choisir le dispositif à l'aide de la propriété SourceIndex à l'Internet Explorer, mais je reçois l’erreur. Pourquoi?Chaque objet sur la page web à l'Internet Explorer a la propriété prédéterminée SourceIndex cette propriété n’est accessible que pour la lecture. Vous devez utiliser le code suivant pour travailler avec la propriété SourceIndex de l'objet VSTwain à JavaScript ou VBScript:VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' second device VSTwain1.Acquire()
Puis-je utiliser les ActiveX dans Mozilla Firefox?Oui, vous pouvez utiliser les ActiveX dans Mozilla Firefox 3.0 et plus avec permis IE Tab Plug-in.
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()
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
Le langage de programmation que j'utilise ne supporte pas le travail avec des massifs. Comment régler le problème?S’il vous est nécessaire de recevoir le massif des valeurs à l'aide des méthodes GetPageSizes, GetPixelTypes, GetResolutions, GetUnitsOfMeasure, mais le langage de programmation, dont vous utilisez ne supporte pas le travail avec les massifs, alors vous pouvez utiliser la méthode suivante:
' 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
...................
Est-ce que je peux diriger un chargeur de document automatisé des documents (ADF) sans interface d'utilisateur?L'exemple suivent montre comment peut- on diriger le travail du scanner avec un chargeur de document automatisé (ADF) sans interface d'utilisateur:
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
Peut-on créer l'application console en utilisant le composant ActiveX?l est impossible de créer le composant l'application console en utilisant le composant ActiveX. L'application doit avoir la fenêtre pour travailer avec le composant.
Est-ce que je peux choisir le dispositif nécessaire sans dialogue du choix standard du 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
Le code suivent est le code de choix du premier dispositif:
VSTwain1.StartDevice VSTwain1.SourceIndex = 0 ..... VSTwain1.AcquireMais la variante suivante est la meilleur:
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
.....
Dans ce cas il est nécessaire de savoir le nom précis du dispositif.
Comment je peux 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). Il est possible d’accomplir cela comme il suit:VSTwain1.StartDevice VSTwain1.ShowUI = False VSTwain1.DisableAfterAcquire = True VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.ShowIndicators = 0 ' disable indicator window VSTwain1.Acquire
Je dois scanner seulement une partie de l’image. Comment faut-il faire cela?Utilisez le code suivant pour recevoir la partie de l’image limité par le rectangle (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()
Comment établir la résolution différente pour l'axe X et Y pendant le scanning des images?Voilà l'exemple où la résolution selon l'axe X est égal aux 4800 dpi, mais selon l'axe Y est égal aux 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
Comment choisir l'orientation de l’image pendent le scanning?Vous pouvez choisir l'orientation de l’image pendent le scanning seulement si le scanner supporte la possibilité ICAP_ORIENTATION: .....
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
.....
Les valeurs possibles pour l'orientation:
Notre organisation utilise le scanner avec un chargeur automatique des feuilles (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()
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
Est-ce que je peux utiliser les patch-codes pour la séparation des rgoupes de batched job? Si oui, comment définir la fin de batched job?Vous pouvez separer les batched job en vous utilisant la possibilité CAP_JOBCONTROL.L'exemple pour 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
.....
Je dois savoir quand l’image sera reçue dans un logiciel, mais je ne peux pas utiliser l'événement PostScan. Comment régler ce problème?А partir de la version 3.0 vous pouvez utiliser la méthode AcquireModal pour resoudre ce problème.L'exemple pour 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
Puis-je obtenir(recevoir) les images de 48-bit?Oui. Librairie VintaSoftTwain.NET permets de recevoir l’image colorée de 48-bit ou l’image grise de 16 bit. Les images peuvent être sauvegarder sans la perte de la profondeur de bit seulement dans les fichiers TIFF.Ici il y a un exemple qui montre comment recevoir l’image colorée de 48-bit du scanner sans interface d’usager: 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()Ici il y a un exemple qui montre comment recevoir l’image colorée de 24-bit du scanner sans interface d’usager: 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()Ici il y a un exemple qui montre comment recevoir l’image grise de 16-bit du scanner sans interface d’usager: 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()
Quand j'utilise le scanner HP ScanJet j’observe une perte d’un pouce de l’image dans la partie supérieure de l’image et le rectangle noir avec un pouce de hauteur apparait dans la partie inférieure de l’image. Pourquoi?Pour résoudre ce problème vous devez changer la valeur de la propriété pageSize de A4 à USLETTER.
Est-ce que je peux sauvegarder les images acquérir au champ OLE du tableau MS Access?Oui. Vous pouvez le faire. Il est nécessaire d'utiliser la méthode GetImageAsDIB.L'exemple pour MS Access ("OrderImage" c’est champ OLE du tableau):
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
Est-ce que je peux sauvegarder les images reçues dans le tableau MS SQL du serveur?Oui. Vous pouvez le faire. Il est nécessaire d'utiliser la méthode GetImageAsDIB.L'exemple pour C# comment sauvegarder l’image au tableau du serveur 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();
}
}
Et l'exemple pour C# comment recevoir l’image sauvegardée d’abord au tableau du serveur 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();
}
}
J'utilise Visual FoxPro et je n'ai pas d'événement PostScan. Pourquoi?Pour le reglement de ce problème il est nécessaire d'ajouter la commande Application. AutoYield = .F. au début de l'application.
|