[DELPHI]Сканер управления в Delphi
---- При использовании Delphi для разработки систем управления информацией часто происходит обработка изображений, что также является неизбежной тенденцией в развитии систем управления информацией. Как получить необходимую информацию об изображении через сканер в Delphi? Основных методов не более трех:
С помощью программного обеспечения для обработки изображений, такого как Photoshop и т. д., благодаря функции сканирования изображений их можно преобразовать в изображения определенного формата и затем использовать в вашей собственной системе;
Через интерфейс сканера Twain.DLL. Этот интерфейс предоставляется при установке сканера. На самом деле это плагин, который управляет сканером с помощью ряда функций;
Управляйте сканером с помощью компонентной технологии.
---- Использование первого метода позволяет снизить сложность программирования, но системная интеграция невысока и пользователям неудобно использовать второй метод, который может напрямую управлять сканером на уровне драйвера;
Обеспечивает максимальную гибкость и управляемость в программировании; третий метод позволяет в полной мере использовать технологию визуальных компонентов Delphi для безопасного, гибкого и свободного использования сканера. На самом деле, третий метод также
Он построен на основе интерфейса сканера Twain.DLL. Метод, обсуждаемый в этой статье, использует третий метод.
---- Windows9X предоставляет опцию «изображение» во вложении, которая использует компоненты OCX для управления сканером. Существует четыре компонента imgEdit, imgAnntool, imgScan и imgAdmin. Эти четыре компонента обеспечивают полный контроль над сканером. Использование в Delphi следующее: Выберите установочный «образ» в Windows9x. (Выберите «Установка и удаление программ» на панели управления, затем выберите «Установить Windows», установите флажок «Стандартные», а затем найдите «Изображение» в кнопке «Подробнее»)
Запустите Delphi и выберите «Импортировать элемент управления ActiveX» в пункте меню «Компонент».
В настоящее время вы можете видеть, что есть «Управление редактированием изображений Вана, Управление сканированием изображений Вана, Управление редактированием изображений Вана».
«Управление изображениями», «Управление миниатюрами изображений Вана», выберите эти четыре элемента и нажмите «Установить».
кнопку, то вы увидите значки этих четырех компонентов под меткой ActiveX на панели компонентов.
---- Основные атрибуты ImgScan: FileType: тип файла изображения (данный компонент поддерживает три
Виды: TIFF, BMP, AWD);
ScanTo: возврат или установка назначения отсканированного изображения;
Возможное значение значения
0 (по умолчанию) Отобразить отсканированное изображение.
1 Отобразите отсканированное изображение и запишите его в файл.
2 Запишите изображение в файл
3 Запишите изображение в файл в режиме шаблона и отобразите его.
4. Запишите изображение в файл как шаблон.
5 Отсканированное по факсу изображение
Примечание. Если вы возьмете значение по умолчанию 0,
Необходимо использовать вместе с компонентом Wang ImgEdit.
DestImageControl: имя компонента Wang ImgEdit;
Масштаб: коэффициент масштабирования изображения.
Основные методы ImgScan: OpenScanner: открыть сканер;
CloseScanner: закрыть сканер;
StartScan: начать сканирование;
StopScan: остановить сканирование.
----Свойства ImgEdit в основном предназначены для управления разрешением отсканированного изображения, шириной и высотой изображения, независимо от того,
Позволяет частичное выделение изображений и т. д. Основные методы включают копирование и вырезание изображений на монтажном столе;
Копируйте изображения из буфера обмена, вращайте, масштабируйте, зеркально отображайте изображения, сохраняйте, обновляйте изображения и т. д.
---- Подробные инструкции для четырех вышеупомянутых компонентов OCX можно просмотреть в Delphi.
Система помощи.
---- Вот несколько примеров использования этих двух компонентов:
PROcedure Tscanf.N1Click(Отправитель: TObject);
начинать
ImgScan1.ShowSelectScanner;
file://Выберите сканер, установленный в системе
конец;
процедура Tscanf.N2Click(Отправитель: TObject);
начинать
imgedit1.zoom:=100; file://Установить коэффициент масштабирования изображения
если не imgscan1.ScannerAvailable, то
file://если выбранный сканер недоступен
imgscan1.OpenScanner;//Открываем сканер
imgscan1.StartScan; file://Начать сканирование изображений
imgscan1.CloseScanner файл://Закрыть сканер;
конец;
процедура Tscanf.N8Click(Отправитель: TObject);
начинать
если (imgedit1.IsClipboardDataAvailable
и imgedit1.ImageDisplayed), затем
imgedit1.ClipboardPaste(selleft,seltop);
file://вставить изображение из буфера обмена, его параметр — начальная координата области отображения Imgedit
конец;
процедура Tscanf.N1801Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
imgedit1.Flip файл://зеркальное изображение
конец;
процедура Tscanf.N901Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
imgedit1.RotateRight file://Повернуть изображение вправо
конец;
процедура Tscanf.N6Click(Отправитель: TObject);
начинать
imgedit1.DrawSelectionRect(selleft,
seltop, selwidth, selheight); // выполняем частичный выбор изображения
imgedit1.ClipboardCut(selleft,seltop,
selwidth,selheight);//Вырезать выделенную область
конец;
---- Примечание. При использовании функций копирования и вырезания компонента Imgedit в DELPHI будут
Следующие вопросы:
---- 1. Если выделить все изображение, проблем не будет;
---- 2. Если выбрана локальная область, скопированные и вырезанные области будут смещаться;
---- 3. Если DELPHI создает клиентский интерфейс внутренней базы данных MS SQL, то
Когда содержимое изображения записывается в поле изображения базы данных, BDE (ядро базы данных) сообщает об ошибке. Это
ОШИБКА DELPHI3.0 и 4.0, пакет обновления 4.0 может решить эту проблему.
---- Что касается второй проблемы, то ее можно решить так: onSelectionRectDrawn в Imgedit
Напишите кусок кода в событии, чтобы после копирования сохранить граничное значение выбранной области в четыре глобальные переменные.
Просто используйте ранее сохраненные переменные, чтобы сделать еще один выбор перед вырезанием (разумеется, все это произойдет позже)
этап, см. предыдущий пример).
---- Среда разработки: DELPHI4.0, сканер HP ScanJet 4P;
----Исходный код прилагается.
блок сканирования;
интерфейс
использует
Windows, сообщения, SysUtils, классы, графика, элементы управления,
Формы, диалоги, меню, ScanLib_TLB, ExtCtrls, AxCtrls,
ОлеCtrlс, ImgeditLib_TLB;
тип
Tscanf = класс (TForm)
ГлавноеМеню1: ТМаинМеню;
F1: Тменуитем;
N15: ТМенюитем;
N1: ТМенюитем;
N2: ТМенюитем;
N16: Тменуитем;
N11: ТМенюитем;
N5: ТМенюитем;
C1: ТМенюитем;
N4: ТМенюитем;
Е1: ТМенюитем;
N6: ТМенюитем;
N7: ТМенюитем;
N8: Тменуитем;
N3: ТМенюитем;
N10: ТМенюитем;
N9: ТМенюитем;
N1801: ТМенюитем;
N901: ТМенюитем;
N902: ТМенюитем;
H1: ТМенюитем;
N12: ТМенюитем;
N13: ТМенюитем;
ImgEdit1: TImgEdit;
Фаска1: TBevel;
ИмгСкан1: ТИмгСкан;
Фаска2: TBevel;
процедура N4Click (Отправитель: TObject);
процедура N1Click (Отправитель: TObject);
процедура N2Click (Отправитель: TObject);
процедура C1Click (Отправитель: TObject);
процедура N8Click (Отправитель: TObject);
процедура N1801Click (Отправитель: TObject);
процедура N901Click (Отправитель: TObject);
процедура N902Click (Отправитель: TObject);
процедура N6Click (Отправитель: TObject);
процедура N7Click (Отправитель: TObject);
процедура ImgEdit1SelectionRectDrawn (Отправитель: TObject; Left, Top,
Ширина, Высота: целое число);
процедура N11Click (Отправитель: TObject);
частный
{Частные заявления}
общественный
Selleft,seltop,selwidth,selheight: целое число;
{Публичные заявления}
конец;
вар
сканирование: Цсканф;
выполнение
{$R *.DFM}
процедура Tscanf.N4Click(Отправитель: TObject);
начинать
imgedit1.ClearDisplay;
закрывать;
конец;
процедура Tscanf.N1Click(Отправитель: TObject);
начинать
ImgScan1.ShowSelectScanner;
конец;
процедура Tscanf.N2Click(Отправитель: TObject);
начинать
imgedit1.zoom:=100;
если не imgscan1.ScannerAvailable, то
imgscan1.OpenScanner;
imgscan1.НачатьСканировать;
imgscan1.CloseScanner;
конец;
процедура Tscanf.C1Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
начинать
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
конец;
конец;
процедура Tscanf.N8Click(Отправитель: TObject);
начинать
if (imgedit1.IsClipboardDataAvailable и imgedit1.ImageDisplayed)
затем
imgedit1.ClipboardPaste(selleft,seltop);
конец;
процедура Tscanf.N1801Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
imgedit1.Flip;
конец;
процедура Tscanf.N901Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
imgedit1.RotateRight
конец;
процедура Tscanf.N902Click(Отправитель: TObject);
начинать
если imgedit1.ImageDisplayed тогда
imgedit1.RotateLeft;
конец;
процедура Tscanf.N6Click(Отправитель: TObject);
начинать
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
конец;
процедура Tscanf.N7Click(Отправитель: TObject);
начинать
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCopy(selleft,seltop,selwidth,selheight);
конец;
процедура Tscanf.ImgEdit1SelectionRectDrawn(Отправитель: TObject; Left,
Верх, Ширина, Высота: целое число);
начинать
если ((ширина=0) и (высота=0))то
начинать
n3.Enabled:=ложь;
n6.Включено:=ложь;
n7.Включено:=ложь;
продать влево: = влево;
селтоп: = верх;
selwidth:=ширина;
selheight:=высота;
конец
еще начать
n6.Включено:=истина;
n7.Включено:=истина;
продать влево: = влево;
селтоп: = верх;
selwidth:=ширина;
selheight:=высота;
конец;
конец;
процедура Tscanf.N11Click(Отправитель: TObject);
начинать
если не imgedit1.IsClipboardDataAvailable, то
если imgedit1.imagedisplayed тогда
imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgedit1.Height);
конец;
конец