Добрый день !
Появилась необходимость сканирования фотографий из 1с 8.2 через сервис VIA.
Все работает в принципе,но хотелось бы устанавливать значение DPI программно.
Не могу разобраться с тех.документацией на WIA.
в принципе после вызова следующей строчки кода появляется диалоговое окно WIA.В этом окне и устанавливается значение DPI.
По умолчанию оно 150.А мне нужно 300.Можно ли задать его программно ?
DevManager = Новый COMОбъект("WIA.CommonDialog");
У вас где-то должен быть объект сканера. Если нету, то попробуйте вызвать метод ShowSelectDevice(1, false, false) на DevManager, который по идее вернет этот объект. После этого попробуйте:
Property prop = scannner.properties.get_Item("6147");
prop.set_Value(300);
Вот список ещё кое каких свойств, которые вам возможно пригодятся:
- WIA_HORIZONTAL_SCAN_RESOLUTION_DPI = "6147";
- WIA_VERTICAL_SCAN_RESOLUTION_DPI = "6148";
- WIA_HORIZONTAL_SCAN_START_PIXEL = "6149";
- WIA_VERTICAL_SCAN_START_PIXEL = "6150";
- WIA_HORIZONTAL_SCAN_SIZE_PIXELS = "6151";
- WIA_VERTICAL_SCAN_SIZE_PIXELS = "6152";
- WIA_SCAN_BRIGHTNESS_PERCENTS = "6154";
- WIA_SCAN_CONTRAST_PERCENTS = "6155";
Цитата(Vofka @ 17.10.19, 11:57) необходимо зарегистрироваться для просмотра ссылки
ShowSelectDevice(1, false, false)
Это будет сканер по умолчанию ? Т.е, я хотел сказать сканер по умолчанию в операционной системе ? Значит объект CommonDialog
свойства DPI не имеет ? Установка DPI возможна только через объект Сканер получается.
andrew76, то что я написал выше, это не мой личный опыт, это я набросал вариант из того, что погуглил в интернете. Насколько я понял, ShowSelectDevice покажет вам тоже какой-то диалог, в котором будет перечень сканеров (первый параметр говорит о том, что надо показать именно сканеры), из которого вы должны будете выбрать нужный. Для начала проверьте работает ли это и дает ли это тот эффект, который вы ожидаете. Если получится достигнуть таким образом нужный эффект, я думаю, что есть какой-то АПИ, что бы выбрать сканер без диалога, а как-то программно (возможно через необходимо зарегистрироваться для просмотра ссылки). необходимо зарегистрироваться для просмотра ссылки много разных примеров есть.
Vofka @ Сегодня, 13:33 необходимо зарегистрироваться для просмотра ссылки
,
Работает ,программно установил значение DPI в значение 300.Зато теперь сканирует только черно-белое изображение.
И вообще без показа диалогов.
Цитата(andrew76 @ 17.10.19, 11:43) необходимо зарегистрироваться для просмотра ссылки
Зато теперь сканирует только черно-белое изображение.
А так?
Property prop = scannner.properties.get_Item("6146");
prop.set_Value(1);
Vofka @ Сегодня, 14:30 необходимо зарегистрироваться для просмотра ссылки
,
Так-помогло.Теперь сканирует цветное изображение.Но ни одного диалогового окна WIA не видно на мониторе.
Сканирование идет втихую.По идее в первом варианте после вызова DevManager = Новый COMОбъект("WIA.CommonDialog")
появлялось диалоговое головное окно WIA.А сейчас нет.
andrew76, вы полный код не показываете, поэтому сложно что-то сказать. Видимо окно у вас было не после DevManager = Новый COMОбъект("WIA.CommonDialog"), а после какого-то другого метода, т.к. по идее эта строка у вас не поменялась. Но опять таки, сложно что-то угадывать, не видя что вы пишете у себя.
Vofka @ Сегодня, 15:57
необходимо зарегистрироваться для просмотра ссылки
,
ScannerDeviceType = 1;
ИмяФайла="c:\proba1.jpg";
Device = Новый COMОбъект("WIA.DeviceManager");
DeviceInfo = Device.DeviceInfos();
Если DeviceInfo.Count() > 0 Тогда
Dialog = Новый COMОбъект("WIA.CommonDialog");
objDevice = Dialog.ShowSelectDevice();
// Настройка сканера
Сканер = objDevice.Items(1);
СканерПараметры = Сканер.Properties();
СканерПараметры.Item("6146").Value = 1;
СканерПараметры.Item("6147").Value = 300;
СканерПараметры.Item("6148").Value = 300;
objImageFile = Сканер.Transfer();
objImageProcess = Новый COMОбъект("WIA.ImageProcess");
ImageProcess = Новый COMОбъект("WIA.ImageProcess");
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Convert").FilterID);
IP1 = ImageProcess.Filters(1);
Для К = 1 По IP1.Properties.Count Цикл
Если IP1.Properties(К).Name = "FormatID" Тогда
IP1.Properties(К).Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";;
КонецЕсли;
КонецЦикла;
objImageFile = ImageProcess.Apply(objImageFile);
objImageFile.SaveFile(ИмяФайла);
КонецЕсли;
Dialog.ShowSelectDevice() и ShowSelectDevice(1, false, false) разве одно и то же?
Vofka @ Сегодня, 16:52
необходимо зарегистрироваться для просмотра ссылки
,
Поведение не меняется-что с аргументами,что без-нет разницы.Там первый параметр-код устройства.
1-это сканер.Диалоговых окон не видно никаких.Тихо сканирует и все.
Мне кажется дело в этой строчке:
objImageFile = Сканер.Transfer();
Вот часто попадающийся пример из Интернета:
Здесь видны диалоговые окна WIA,при сканировании видно индикатор процесса.
Этот вариант бы мне подошел,но я не понимаю ,как этом варианте установить значение DPI программно.
Здесь используется другой метод : DevManager.ShowAcquireImage()
Image = Новый COMОбъект("WIA.ImageFile"); //создаем объект "Изображения" в WIA для дальнейшей работы с ним
DevManager = Новый COMОбъект("WIA.CommonDialog"); //а это диалог сканирования
Image = DevManager.ShowAcquireImage(); //записываем сканированное изображение
IP = Новый COMОбъект("WIA.ImageProcess"); //создаем фильтр для сохранения изображения
IP.Filters.Add(IP.FilterInfos("Convert").FilterID);
IP1 = IP.Filters(1);
Для К = 1 По IP1.Properties.Count Цикл
Если IP1.Properties(К).Name = "FormatID" Тогда
IP1.Properties(К).Value = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
Прервать;
КонецЕсли;
КонецЦикла;
Image = IP.Apply(Image);
Image.SaveFile(ИмяФайла);
andrew76, а на какой строке там диалоговое окно появляется, на вызове метода ShowAcquireImage?
Vofka @ Сегодня, 19:15 необходимо зарегистрироваться для просмотра ссылки
,
На вот этой 2-й строке : DevManager = Новый COMОбъект("WIA.CommonDialog"); //а это диалог сканирования
а это само сканирование: Image = DevManager.ShowAcquireImage();
Странно как-то. Если оно должно выскакивать на строке DevManager = Новый COMОбъект("WIA.CommonDialog");, то почему оно не выскакивает на этой строке в вашем варианте из сообщения #9?
Vofka @ Сегодня, 19:46 необходимо зарегистрироваться для просмотра ссылки
,
Подозреваю,что все окна "гасит" команда на сканирование : objImageFile = Сканер.Transfer()
Есть ещё такая штука:
Image = CommonDialog.ShowTransfer(Item);
Item - это по идее объект Сканер, который вы получили из objDevice.Items(1). Более подробно
необходимо зарегистрироваться для просмотра ссылки.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.