[DELPHI]Controlar el escáner en Delphi
---- Cuando se utiliza Delphi para desarrollar sistemas de gestión de información, a menudo se procesan imágenes, lo que también es una tendencia inevitable en el desarrollo de sistemas de gestión de información. ¿Cómo obtener la información de imagen requerida a través de un escáner en Delphi? No existen más de tres métodos básicos:
A través de software de procesamiento de imágenes, como Photoshop, etc., a través de su función de escanear imágenes, se pueden procesar en imágenes en un formato determinado y luego usarlas en su propio sistema;
A través de la interfaz del escáner Twain.DLL. Esta interfaz se proporciona al instalar el escáner. En realidad, es un complemento que controla el escáner a través de una serie de funciones;
Controle el escáner a través de la tecnología de componentes.
---- El uso del primer método puede reducir la complejidad de la programación, pero la integración del sistema no es alta y es inconveniente para los usuarios utilizar el segundo método, que puede controlar directamente el escáner a nivel del controlador;
Proporciona máxima flexibilidad y controlabilidad en la programación; el tercer método puede aprovechar al máximo la tecnología de componentes visuales de Delphi para utilizar el escáner de forma segura, flexible y libre. De hecho, el tercer método también es
Está construido sobre la interfaz del escáner Twain.DLL. El método discutido en este artículo adopta el tercer método.
---- Windows9X proporciona una opción de "imagen" en su archivo adjunto, que utiliza componentes OCX para controlar el escáner. Hay cuatro imgEdit, imgAnntool, imgScan e imgAdmin. Básicamente, tenga control total sobre el escáner. El uso en Delphi es el siguiente: Seleccione la "imagen" de instalación en Windows9x. (Seleccione "Agregar o quitar programas" en el Panel de control, luego seleccione "Instalar Windows", haga clic en la casilla de verificación "Accesorios" y luego busque "Imagen" en el botón "Detalles")
Inicie Delphi y seleccione "Importar control ActiveX" en el elemento del menú "Componente".
En este momento, puede ver que hay "Control de edición de imágenes de Wang, Control de escaneo de imágenes de Wang, Control de escaneo de imágenes de Wang,
Control de gestión de imágenes, Control de miniaturas de imágenes de Wang", seleccione estos cuatro elementos y luego haga clic en "Instalar"
, luego podrá ver los íconos de estos cuatro componentes debajo de la etiqueta ActiveX en el panel de componentes.
---- Los principales atributos de ImgScan: FileType: el tipo de archivo de la imagen (este componente admite tres
Especies: TIFF, BMP, AWD);
ScanTo: devolver o establecer el propósito de la imagen escaneada;
Posible significado del valor
0 (predeterminado) Muestra la imagen escaneada.
1 Muestre la imagen escaneada y escríbala en un archivo.
2 Escribe la imagen en un archivo.
3 Escriba la imagen en el archivo en modo plantilla y muéstrela.
4. Escriba la imagen en el archivo como plantilla.
5 Imagen escaneada por fax
Nota: Si toma el valor predeterminado 0,
Debe usarse junto con el componente Wang ImgEdit.
DestImageControl: nombre del componente Wang ImgEdit;
Zoom: la relación de zoom de la imagen.
Los principales métodos de ImgScan: OpenScanner: abre el escáner;
CloseScanner: cierra el escáner;
StartScan: inicia el escaneo;
StopScan: detener el escaneo
----Las propiedades de ImgEdit controlan principalmente la resolución de la imagen escaneada, el ancho y alto de la imagen, y si
Permite la selección parcial de imágenes, etc.; los métodos principales incluyen copiar y cortar imágenes en el tablero,
Copie imágenes del portapapeles, rote, escale, refleje imágenes, imprima, guarde, actualice imágenes, etc.
---- Las instrucciones detalladas para los cuatro componentes OCX anteriores se pueden ver en Delphi.
Sistema de ayuda.
---- A continuación se muestran algunos ejemplos del uso de estos dos componentes:
Procedimiento Tscanf.N1Click(Remitente: TObject);
comenzar
ImgScan1.ShowSelectScanner;
file://Seleccione el escáner instalado en el sistema
fin;
procedimiento Tscanf.N2Click(Remitente: TObject);
comenzar
imgedit1.zoom:=100 file://Establece el factor de zoom de la imagen
si no es imgscan1.ScannerAvailable entonces
file://si el escáner seleccionado no está disponible
imgscan1.OpenScanner;//Abre el escáner
imgscan1.StartScan file://Comenzar a escanear imágenes;
imgscan1.CloseScanner file://Cerrar escáner;
fin;
procedimiento Tscanf.N8Click(Remitente: TObject);
comenzar
si (imgedit1.IsClipboardDataAvailable
e imgedit1.ImageDisplayed) luego
imgedit1.ClipboardPaste(selleft,seltop);
file://pegue la imagen del portapapeles, su parámetro es la coordenada inicial del área de visualización de Imgedit
fin;
procedimiento Tscanf.N1801Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
imgedit1.Flip; archivo://imagen reflejada
fin;
procedimiento Tscanf.N901Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
imgedit1.RotateRight file://Rotar imagen a la derecha
fin;
procedimiento Tscanf.N6Click(Remitente: TObject);
comenzar
imgedit1.DrawSelectionRect(selleft,
seltop, selwidth, selheight); // realiza una selección parcial de la imagen.
imgedit1.ClipboardCut(selleft,seltop,
selwidth,selheight);//Cortar el área seleccionada
fin;
---- Nota: Cuando se utilizan las funciones de copiar y cortar del componente Imgedit en DELPHI, habrá
Las siguientes preguntas:
---- 1. Si seleccionas la imagen completa, no habrá problema;
---- 2. Si se selecciona un área local, las áreas copiadas y cortadas se desplazarán;
---- 3. Si DELPHI está creando la interfaz de cliente de la base de datos back-end de MS SQL, entonces
Cuando el contenido de la imagen se escribe en el campo de imagen de la base de datos, el BDE (motor de base de datos) informará un error. Esto es
DELPHI3.0 y 4.0 BUG, el paquete de actualización 4.0 puede resolver este problema.
---- En cuanto al segundo problema, se puede resolver así: onSelectionRectDrawn en Imgedit
Escriba un fragmento de código en el evento para guardar el valor del límite del área seleccionada en cuatro variables globales después de copiar.
Simplemente use las variables previamente guardadas para hacer otra selección antes de cortar (por supuesto, todo esto sucederá más adelante)
etapa, ver ejemplo anterior).
---- Entorno de desarrollo: DELPHI4.0, escáner HP ScanJet 4P;
---- Código fuente adjunto.
escaneo de la unidad;
interfaz
usos
Windows, Mensajes, SysUtils, Clases, Gráficos, Controles,
Formularios, cuadros de diálogo, menús, ScanLib_TLB, ExtCtrls, AxCtrls,
OleCtrls, ImgeditLib_TLB;
tipo
Tscanf = clase(TForm)
Menú principal1: TMenú principal;
F1: TMenúElemento;
N15: TMenúArtículo;
N1: TMenuItem;
N2: TMenuItem;
N16: TMenúArtículo;
N11: TMenúArtículo;
N5: TMenúArtículo;
C1: TMenuItem;
N4: TMenuItem;
E1: TMenúArtículo;
N6: TMenúArtículo;
N7: TMenúArtículo;
N8: TMenúArtículo;
N3: TMenuItem;
N10: TMenúArtículo;
N9: TMenúArtículo;
N1801: TMenúArtículo;
N901: TMenúArtículo;
N902: TMenúArtículo;
H1: TMenuItem;
N12: TMenúArtículo;
N13: TMenúArtículo;
ImgEdit1: TImgEdit;
Bisel1: TBisel;
ImgScan1: TImgScan;
Bisel2: TBisel;
procedimiento N4Click(Remitente: TObject);
procedimiento N1Click(Remitente: TObject);
procedimiento N2Click(Remitente: TObject);
procedimiento C1Click(Remitente: TObject);
procedimiento N8Click(Remitente: TObject);
procedimiento N1801Click(Remitente: TObject);
procedimiento N901Click(Remitente: TObject);
procedimiento N902Click(Remitente: TObject);
procedimiento N6Click(Remitente: TObject);
procedimiento N7Click(Remitente: TObject);
procedimiento ImgEdit1SelectionRectDrawn(Remitente: TObject; Izquierda,Arriba,
Ancho, Alto: Entero);
procedimiento N11Click(Remitente: TObject);
privado
{Declaraciones privadas}
público
selfleft,seltop,selwidth,selheight:entero;
{Declaraciones públicas}
fin;
var
scanf: Tscanf;
implementación
{$R *.DFM}
procedimiento Tscanf.N4Click(Remitente: TObject);
comenzar
imgedit1.ClearDisplay;
cerca;
fin;
procedimiento Tscanf.N1Click(Remitente: TObject);
comenzar
ImgScan1.ShowSelectScanner;
fin;
procedimiento Tscanf.N2Click(Remitente: TObject);
comenzar
imgedit1.zoom:=100;
si no es imgscan1.ScannerAvailable entonces
imgscan1.OpenScanner;
imgscan1.StartScan;
imgscan1.CloseScanner;
fin;
procedimiento Tscanf.C1Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
comenzar
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
fin;
fin;
procedimiento Tscanf.N8Click(Remitente: TObject);
comenzar
si (imgedit1.IsClipboardDataAvailable y imgedit1.ImageDisplayed)
entonces
imgedit1.ClipboardPaste(selleft,seltop);
fin;
procedimiento Tscanf.N1801Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
imgedit1.Flip;
fin;
procedimiento Tscanf.N901Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
imgedit1.RotateRight
fin;
procedimiento Tscanf.N902Click(Remitente: TObject);
comenzar
si imgedit1.ImageDisplayed entonces
imgedit1.RotateLeft;
fin;
procedimiento Tscanf.N6Click(Remitente: TObject);
comenzar
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
fin;
procedimiento Tscanf.N7Click(Remitente: TObject);
comenzar
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCopy(selleft,seltop,selwidth,selheight);
fin;
procedimiento Tscanf.ImgEdit1SelectionRectDrawn(Remitente: TObject; Izquierda,
Superior, Ancho, Alto: Entero);
comenzar
si ((ancho = 0) y (alto = 0)) entonces
comenzar
n3.Enabled:=falso;
n6.Enabled:=falso;
n7.Enabled:=falso;
venderizquierda:=izquierda;
seleccionar arriba:=arriba;
ancho sel:=ancho;
seltura:=altura;
fin
si no, empezar
n6.Enabled:=verdadero;
n7.Enabled:=verdadero;
venderizquierda:=izquierda;
seleccionar arriba:=arriba;
ancho sel:=ancho;
seltura:=altura;
fin;
fin;
procedimiento Tscanf.N11Click(Remitente: TObject);
comenzar
si no es imgedit1.IsClipboardDataAvailable entonces
si se muestra imgedit1.image entonces
imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgedit1.Height);
fin;
fin