WIA в Delphi. Частина 2. Об’єкт CommonDialog
Розглянемо деякі об’єкти, що існують в WIA та деякі властивості та методи цих об’єктів. Частково це буде переклад довідкової інформації із Microsoft Docs із пояснюючими коментарями, прикладами вихідного коду та ілюстраціями.
Однак зважайте, що нижченаведена інформація не є вичерпним довідником по WIA, для цього краще звернутися безпосередньо до Microsoft Docs.
CommonDialog
Містить всі методи, які відображають інтерфейси користувача.
ShowAcquireImage
Відображення одного або декількох діалогових вікон, які дозволяють користувачеві отримувати зображення з пристрою. Тобто, в процесі роботи будуть відображатися різні діалогові вікна у певному порядку: вибір пристрою, налаштування його параметрів тощо.
Параметри:
DeviceType – типи пристроїв, із якими в подальшому буде працювати метод.
UnspecifiedDeviceType | Пристрої будь-якого типу |
ScannerDeviceType | Сканери |
CameraDeviceType | Камери |
VideoDeviceType | Пристрої, що працюють із потоковим відео |
Intent – тип інформації, яку має містити зображення.
UnspecifiedIntent | Інформація буд-якого типу |
ColorIntent | Кольорове зображення |
GrayscaleIntent | Зображення у відтінках сірого |
TextIntent | Зображення що містить текст (чорнобіле) |
Bias – якість зображення.
MinimizeSize | Нижча якість для оптимізації розміру файлу зображення |
MaximizeQuality | Більш висока якість |
FormatID – потрібний формат даних, в якому буде надано зображення із пристрою. Звісно, якщо сам пристрій цей формат підтримує. Зазвичай це Bitmap, але деякі пристрої можуть підтримувати і інші формати.
AlwaysSelectDevice – вказує, чи відображати діалогове вікно вибору пристрою.
UseCommonUI – вказує, чи слід використовувати загальний інтерфейс користувача.
CancelError – вказує, чи генерувати виключення у разі скасування користувачем процесу сканування.
Метод повертає об’єкт ImageFile – отримане зображення.
Приклад:
const
wiaFormatBMP = '{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}';
var
lCommonDialog: ICommonDialog;
...
lCommonDialog := CoCommonDialog.Create;
lImage := lCommonDialog.ShowAcquireImage(UnspecifiedDeviceType, UnspecifiedIntent, MaximizeQuality, wiaFormatBMP, True, True, False);
if lImage <> nil then
lImage.SaveFile('image.bmp');
Які ще інтерфеси можна відобразити за допомогою CommonDialog?
ShowAcquisitionWizard
Запускає майстер сканера та камери, який дозволяє вибрати пристрій, налаштувати його параметри та відобразити попередній перегляд сторінки. Єдиний параметр Device позначає позначає з’єднання з обраним пристроєм.
Метод повертає значення типу OleVariant, зазвичай це ImageFile – отримане зображення.
ShowDeviceProperties
Відображає діалогове вікно «Властивості» для вказаного пристрою. Єдиний параметр Device позначає з’єднання з обраним пристроєм.
ShowItemProperties
Відображає діалогове вікно Властивості для вказаного елемента.
ShowPhotoPrintingWizard
Запускає майстер друку фотографій.
ShowSelectDevice
Відображає діалогове вікно, яке дозволяє користувачеві вибрати пристрій для отримання зображень.
Метод повертає об’єкт Device – з’єднання з обраним пристроєм.
ShowSelectItems
Відображає діалогове вікно налаштування параметрів сканування, таких як роздільна здатність, кольорова схема, яскравість, контраст та інші. Параметр SingleSelect вказує, чи повинен користувач вибрати лише один елемент.
Метод змінює властивості об’єкту Device, отриманого в якості параметру, відповідно до зроблених користувачем налаштувань.
ShowTransfer
Відображає діалогове вікно процесу передачі даних.
Метод повертає значення типу OleVariant, зазвичай це ImageFile – отримане зображення.
А тепер викликаємо всі інтерфейси послідовно:
const
wiaFormatBMP = '{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}';
var
lCommonDialog: ICommonDialog;
lDevice: IDevice;
lItems: IItems;
lImage: IImageFile;
...
lCommonDialog := CoCommonDialog.Create;
// обираємо пристрій
lDevice := lCommonDialog.ShowSelectDevice(UnspecifiedDeviceType, True, False);
if lDevice <> nil then
begin
// параметри сканування для обраного пристрою
lItems := lCommonDialog.ShowSelectItems(lDevice, UnspecifiedIntent, MaximizeQuality, False, True, False);
if lItems <> nil then
begin
// отримуємо зображення з пристрою
lImage := IUnknown(lCommonDialog.ShowTransfer(lItems.Item[1], wiaFormatBMP, False)) as IImageFile;
if lImage <> nil then
lImage.SaveFile('image.bmp');
end;
end;
Останні коментарі