Как получить чёрно-белые изображения от TWAIN сканера?
В этом разделе
Если Вы хотите получить черно-белые изображения от TWAIN сканера, Вам следует установить тип пикселей сканируемых изображений с помощью функции
WebTwainDeviceJS.set_PixelType.
Если Вы хотите получить черно-белые изображения от SANE сканера, Вам следует установить режим сканирования, который позволяет получать черно-белые изображения. Функция
WebTwainDeviceJS.set_SaneScanMode позволяет установить режим сканирования для SANE сканера. SANE API не предоставляет стандартное имя для режима сканирования, который позволяет получить черно-белые изображения от SANE сканера, и производители сканеров используют разные имена для этого режима сканирования. Например, Canon, HP, Kodak и Samsung используют имя "Lineart", Brother использует имя "Black & White", Kyocera использует имя "Mono". Названия режимов сканирования, которые поддерживаются SANE устройством, можно получить с помощью функции
WebTwainDeviceJS.getSupportedSaneScanModes.
Вот JavaScript код, который демонстрирует как получить чёрно-белые изображения от TWAIN/SANE сканера:
// acquire black-white images from TWAIN/SANE scanner
__acquireBlackWhiteImagesFromTwainScanner();
/**
* Acquires black-white images from TWAIN/SANE scanner.
*/
function __acquireBlackWhiteImagesFromTwainScanner() {
// register the evaluation version of VintaSoft Web TWAIN service
// please read how to get evaluation license in documentation: https://www.vintasoft.ru/docs/vstwain-dotnet-web/Licensing-Twain_Web-Evaluation.html
Vintasoft.Twain.WebTwainGlobalSettingsJS.register('REG_USER', 'REG_URL', 'REG_CODE', 'EXPIRATION_DATE');
// URL to the VintaSoft Web TWAIN service
var serviceUrl = 'https://localhost:25329/api/VintasoftTwainApi';
// a Web API controller that allows to work with TWAIN and SANE devices
var twainService = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
// TWAIN/SANE device manager
var deviceManager = new Vintasoft.Twain.WebTwainDeviceManagerJS(twainService);
// the default settings of device manager
var deviceManagerInitSetting = new Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS();
var device = null;
try {
// open device manager
deviceManager.open(deviceManagerInitSetting);
// get the default TWAIN/SANE device
device = deviceManager.get_DefaultDevice();
// open device without UI
device.open(false);
// if device is SANE device
if (device.get_DeviceName().substring(0, 4) == "Sane") {
// specify that images must be acquired in "Lineart" mode
device.set_SaneScanMode("Lineart");
}
// if device is TWAIN device
else {
// specify that black-white images must be acquired from TWAIN scanner
device.set_PixelType(new Vintasoft.Twain.WebPixelTypeEnumJS("BW"));
}
var acquireModalState;
do {
// do one step of modal image acquisition process
var acquireModalResult = device.acquireModalSync();
// get state of image acquisition
acquireModalState = acquireModalResult.get_AcquireModalState().valueOf();
switch (acquireModalState) {
case 2: // image is acquired
// get acquired image
var acquiredImage = acquireModalResult.get_AcquiredImage();
// get image as Base64 string
var bitmapAsBase64String = acquiredImage.getAsBase64String();
// update image preview
var previewImageElement = document.getElementById('previewImage');
previewImageElement.src = bitmapAsBase64String;
break;
case 4: // image scan is failed
alert(acquireModalResult.get_ErrorMessage());
break;
case 9: // image scan is finished
break;
}
}
while (acquireModalState !== 0);
}
catch (ex) {
alert(ex);
}
finally {
if (device != null) {
// close the device
device.close();
}
// close the device manager
deviceManager.close();
}
}
Вот TypeScript код, который демонстрирует как получить чёрно-белые изображения от TWAIN/SANE сканера:
import { Component } from '@angular/core';
@Component({
selector: 'twain-scanning-demo',
templateUrl: './twain-scanning-demo.component.html'
})
export class TwainScanningDemoComponent {
ngOnInit() {
// acquire images from TWAIN/SANE scanner
this.__acquireImageFromTwainScanner();
}
/**
* Acquires images from TWAIN/SANE scanner.
*/
__acquireImageFromTwainScanner() {
// register the evaluation version of VintaSoft Web TWAIN service
// please read how to get evaluation license in documentation: https://www.vintasoft.ru/docs/vstwain-dotnet-web/Licensing-Twain_Web-Evaluation.html
Vintasoft.Twain.WebTwainGlobalSettingsJS.register('REG_USER', 'REG_URL', 'REG_CODE', 'EXPIRATION_DATE');
// URL to the VintaSoft Web TWAIN service
let serviceUrl: string = 'https://localhost:25329/api/VintasoftTwainApi';
// a Web API controller that allows to work with TWAIN and SANE devices
let twainService: Vintasoft.Shared.WebServiceControllerJS = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
// TWAIN/SANE device manager
let deviceManager: Vintasoft.Twain.WebTwainDeviceManagerJS = new Vintasoft.Twain.WebTwainDeviceManagerJS(twainService);
// the default settings of device manager
let deviceManagerInitSetting: Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS = new Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS();
try {
// open device manager
deviceManager.open(deviceManagerInitSetting);
}
catch (ex) {
alert(ex);
return;
}
let device: Vintasoft.Twain.WebTwainDeviceJS = null;
try {
// get the default TWAIN/SANE device
device = deviceManager.get_DefaultDevice();
// open device without UI
device.open(false);
// if device is SANE device
if (device.get_DeviceName().substring(0, 4) == "Sane") {
// specify that images must be acquired in "Lineart" mode
device.set_SaneScanMode("Lineart");
}
// if device is TWAIN device
else {
// specify that black-white images must be acquired from TWAIN scanner
device.set_PixelType(new Vintasoft.Twain.WebPixelTypeEnumJS("BW"));
}
let acquireModalState: number;
do {
// do one step of modal image acquisition process
let acquireModalResult: Vintasoft.Twain.WebTwainDeviceAcquireModalResultJS = device.acquireModalSync();
// get state of image acquisition
acquireModalState = acquireModalResult.get_AcquireModalState().valueOf() as number;
switch (acquireModalState) {
case 2: // image is acquired
// get acquired image
let acquiredImage: Vintasoft.Twain.WebAcquiredImageJS = acquireModalResult.get_AcquiredImage();
// get image as Base64 string
let bitmapAsBase64String: string = acquiredImage.getAsBase64String();
// update image preview
let previewImageElement: HTMLImageElement = document.getElementById('previewImage') as HTMLImageElement;
previewImageElement.src = bitmapAsBase64String;
break;
case 4: // image scan is failed
alert(acquireModalResult.get_ErrorMessage());
break;
case 9: // image scan is finished
break;
}
}
while (acquireModalState !== 0);
}
catch (ex) {
alert(ex);
}
finally {
if (device != null) {
// close the device
device.close();
}
// close the device manager
deviceManager.close();
}
}
}