[DELPHI]Scanner de contrôle dans Delphi
---- Lors de l'utilisation de Delphi pour développer des systèmes de gestion de l'information, des images sont souvent traitées, ce qui est également une tendance inévitable dans le développement de systèmes de gestion de l'information. Comment obtenir les informations d’image requises via un scanner dans Delphi ? Il n'existe pas plus de trois méthodes de base :
Grâce à des logiciels de traitement d'images, tels que Photoshop, etc., grâce à leur fonction de numérisation d'images, elles peuvent être transformées en images dans un certain format puis utilisées dans votre propre système ;
Via l'interface du scanner Twain.DLL. Cette interface est fournie lors de l'installation du scanner. Il s'agit en fait d'un plugin qui contrôle le scanner à travers une série de fonctions ;
Contrôlez le scanner grâce à la technologie des composants.
---- L'utilisation de la première méthode peut réduire la complexité de la programmation, mais l'intégration du système n'est pas élevée et il est peu pratique pour les utilisateurs de l'utiliser ; la deuxième méthode peut contrôler directement le scanner au niveau du pilote, ce qui peut
Offre une flexibilité et une contrôlabilité maximales dans la programmation ; la troisième méthode peut exploiter pleinement la technologie des composants visuels de Delphi pour utiliser le scanner en toute sécurité, de manière flexible et libre. En fait, la troisième méthode est également
Il est construit sur l'interface du scanner Twain.DLL. La méthode discutée dans cet article adopte la troisième méthode.
---- Windows9X fournit une option "image" dans sa pièce jointe, qui utilise des composants OCX pour contrôler le scanner. Il existe quatre imgEdit, imgAnntool, imgScan et imgAdmin. Avec ces quatre composants, vous avez essentiellement un contrôle total sur le scanner. L'utilisation dans Delphi est la suivante : Sélectionnez l'"image" d'installation dans Windows9x. (Sélectionnez "Ajout/Suppression de programmes" dans le Panneau de configuration, puis sélectionnez "Installer Windows", cochez la case "Accessoires", puis recherchez "Image" à partir du bouton "Détails")
Démarrez Delphi et sélectionnez "Importer un contrôle ActiveX" sous l'élément de menu "Composant".
À ce stade, vous pouvez voir qu'il existe "Wang Image Editing Control, Wang Image Scanning Control, Wang
Image Management Control, Wang Image Thumbnail Control", sélectionnez ces quatre éléments, puis cliquez sur "Installer".
, vous pouvez alors voir les icônes de ces quatre composants sous l'étiquette ActiveX sur le panneau des composants.
---- Les principaux attributs d'ImgScan : FileType : le type de fichier de l'image (ce composant supporte trois
Espèces : TIFF, BMP, AWD);
ScanTo : renvoie ou définit le but de l'image numérisée ;
Signification possible de la valeur
0 (par défaut) Affiche l'image numérisée.
1 Affichez l'image numérisée et écrivez-la dans un fichier.
2 Écrivez l'image dans un fichier
3 Écrivez l'image dans le fichier en mode modèle et affichez-la.
4. Écrivez l'image dans le fichier comme modèle
5 Image numérisée par télécopie
Remarque: si vous prenez la valeur par défaut 0,
Doit être utilisé conjointement avec le composant Wang ImgEdit.
DestImageControl : nom du composant Wang ImgEdit ;
Zoom : le taux de zoom de l'image
Les principales méthodes d'ImgScan : OpenScanner : ouvrir le scanner ;
CloseScanner : fermez le scanner ;
StartScan : démarrez la numérisation ;
StopScan : Arrêter la numérisation
----Les propriétés d'ImgEdit servent principalement à contrôler la résolution de l'image numérisée, la largeur et la hauteur de l'image, que ce soit
Permet une sélection partielle d'images, etc. ; les principales méthodes incluent la copie et la découpe d'images dans le carton,
Copiez des images depuis le presse-papiers, faites-les pivoter, redimensionnez-les, mettez-les en miroir, imprimez-les, actualisez-les, etc.
---- Des instructions détaillées pour les quatre composants OCX ci-dessus peuvent être consultées dans Delphi.
Système d'aide.
---- Voici quelques exemples d'utilisation de ces deux composants :
PRécédure Tscanf.N1Click(Expéditeur : TObject);
commencer
ImgScan1.ShowSelectScanner ;
fichier://Sélectionnez le scanner installé sur le système
fin;
procédure Tscanf.N2Click(Expéditeur : TObject);
commencer
imgedit1.zoom:=100; file://Définir le facteur de zoom de l'image
sinon imgscan1.ScannerAvailable alors
file://si le scanner sélectionné n'est pas disponible
imgscan1.OpenScanner;//Ouvrir le scanner
imgscan1.StartScan ; fichier://Démarrer la numérisation des images
imgscan1.CloseScanner ; fichier://Fermer le scanner
fin;
procédure Tscanf.N8Click(Expéditeur : TObject);
commencer
si (imgedit1.IsClipboardDataAvailable
et imgedit1.ImageDisplayed ) puis
imgedit1.ClipboardPaste(selleleft,seltop);
fichier://coller l'image du presse-papier, son paramètre est la coordonnée de départ de la zone d'affichage d'Imgedit
fin;
procédure Tscanf.N1801Click(Expéditeur : TObject) ;
commencer
si imgedit1.ImageDisplayed alors
imgedit1.Flip ; fichier://image miroir
fin;
procédure Tscanf.N901Click(Expéditeur : TObject) ;
commencer
si imgedit1.ImageDisplayed alors
fichier imgedit1.RotateRight://Faire pivoter l'image vers la droite
fin;
procédure Tscanf.N6Click(Expéditeur : TObject);
commencer
imgedit1.DrawSelectionRect(sellegauche,
seltop, selwidth, selheight); // effectue une sélection partielle de l'image
imgedit1.ClipboardCut(selleleft,seltop,
selwidth,selheight);//Couper la zone sélectionnée
fin;
---- Remarque : lors de l'utilisation des fonctions de copie et de coupe du composant Imgedit dans DELPHI, il y aura
Les questions suivantes :
---- 1. Si vous sélectionnez l'image entière, il n'y aura aucun problème ;
---- 2. Si une zone locale est sélectionnée, les zones copiées et coupées dériveront ;
---- 3. Si DELPHI crée l'interface client de la base de données principale MS SQL, alors
Lorsque le contenu de l'image est écrit dans le champ image de la base de données, le BDE (moteur de base de données) signalera une erreur. C'est
DELPHI3.0 et 4.0 BUG, le package de mise à niveau 4.0 peut résoudre ce problème.
---- Quant au deuxième problème, il peut être résolu comme ceci : onSelectionRectDrawn dans Imgedit
Écrivez un morceau de code dans l'événement pour enregistrer la valeur limite de la zone sélectionnée dans quatre variables globales après la copie.
Utilisez simplement les variables précédemment enregistrées pour effectuer une autre sélection avant de couper (bien sûr, tout cela arrivera plus tard)
étape, voir exemple précédent).
---- Environnement de développement : DELPHI4.0, scanner HP ScanJet 4P ;
----Code source ci-joint.
scan de l'unité ;
interface
utilise
Windows, messages, SysUtils, classes, graphiques, contrôles,
Formulaires, boîtes de dialogue, menus, ScanLib_TLB, ExtCtrls, AxCtrls,
OleCtrls, ImgeditLib_TLB ;
taper
Tscanf = classe (TForm)
MenuMain1 : TMainMenu ;
F1 : TMenuItem ;
N15 : TMenuItem ;
N1 : TMenuItem ;
N2 : TMenuItem ;
N16 : TMenuItem ;
N11 : TMenuItem ;
N5 : TMenuItem ;
C1 : TMenuItem ;
N4 : TMenuItem ;
E1 : TMenuItem ;
N6 : TMenuItem ;
N7 : TMenuItem ;
N8 : TMenuItem ;
N3 : TMenuItem ;
N10 : TMenuItem ;
N9 : TMenuItem ;
N1801 : TMenuItem ;
N901 : TMenuItem ;
N902 : TMenuItem ;
H1 : TMenuItem ;
N12 : TMenuItem ;
N13 : TMenuItem ;
ImgEdit1 : TImgEdit ;
Biseau1 : TBevel ;
ImgScan1 : TImgScan ;
Biseau2 : TBevel ;
procédure N4Click(Expéditeur : TObject) ;
procédure N1Click(Expéditeur : TObject) ;
procédure N2Click(Expéditeur : TObject) ;
procédure C1Click(Expéditeur : TObject) ;
procédure N8Click(Expéditeur : TObject) ;
procédure N1801Click(Expéditeur : TObject) ;
procédure N901Click(Expéditeur : TObject) ;
procédure N902Click(Expéditeur : TObject) ;
procédure N6Click(Expéditeur : TObject) ;
procédure N7Click(Expéditeur : TObject) ;
procédure ImgEdit1SelectionRectDrawn(Expéditeur : TObject ; Gauche, Haut,
Largeur, Hauteur : Entier);
procédure N11Click(Expéditeur : TObject) ;
privé
{Déclarations privées}
publique
selleft, seltop, selwidth, selhauteur : entier ;
{Déclarations publiques}
fin;
var
scanf : Tscanf ;
mise en œuvre
{$R *.DFM}
procédure Tscanf.N4Click(Expéditeur : TObject);
commencer
imgedit1.ClearDisplay;
fermer;
fin;
procédure Tscanf.N1Click(Expéditeur : TObject) ;
commencer
ImgScan1.ShowSelectScanner ;
fin;
procédure Tscanf.N2Click(Expéditeur : TObject);
commencer
imgedit1.zoom:=100;
sinon imgscan1.ScannerAvailable alors
imgscan1.OpenScanner;
imgscan1.StartScan ;
imgscan1.CloseScanner;
fin;
procédure Tscanf.C1Click(Expéditeur : TObject);
commencer
si imgedit1.ImageDisplayed alors
commencer
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
fin;
fin;
procédure Tscanf.N8Click(Expéditeur : TObject);
commencer
if (imgedit1.IsClipboardDataAvailable et imgedit1.ImageDisplayed )
alors
imgedit1.ClipboardPaste(selleleft,seltop);
fin;
procédure Tscanf.N1801Click(Expéditeur : TObject) ;
commencer
si imgedit1.ImageDisplayed alors
imgedit1.Flip;
fin;
procédure Tscanf.N901Click(Expéditeur : TObject) ;
commencer
si imgedit1.ImageDisplayed alors
imgedit1.RotateRight
fin;
procédure Tscanf.N902Click(Expéditeur : TObject) ;
commencer
si imgedit1.ImageDisplayed alors
imgedit1.RotateLeft;
fin;
procédure Tscanf.N6Click(Expéditeur : TObject);
commencer
imgedit1.DrawSelectionRect(selleleft,seltop,selwidth,selheight);
imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
fin;
procédure Tscanf.N7Click(Expéditeur : TObject);
commencer
imgedit1.DrawSelectionRect(selleleft,seltop,selwidth,selheight);
imgedit1.ClipboardCopy(selleleft,seltop,selwidth,selheight);
fin;
procédure Tscanf.ImgEdit1SelectionRectDrawn(Expéditeur : TObject ; Gauche,
Haut, Largeur, Hauteur : Entier) ;
commencer
si ((largeur=0) et (hauteur=0))alors
commencer
n3.Enabled :=false ;
n6.Enabled :=false ;
n7.Enabled :=false ;
vendregauche :=gauche ;
seltop:=haut;
selwidth:=largeur;
selhauteur :=hauteur ;
fin
sinon commencer
n6.Enabled :=true ;
n7.Enabled :=true ;
vendregauche :=gauche ;
seltop:=haut;
selwidth:=largeur;
selhauteur :=hauteur ;
fin;
fin;
procédure Tscanf.N11Click(Expéditeur : TObject) ;
commencer
sinon imgedit1.IsClipboardDataAvailable alors
si imgedit1.image s'affiche alors
imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgedit1.Height);
fin;
fin