Добрый день !
Появилась необходимость сканирования фотографий из 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);
andrew76, то что я написал выше, это не мой личный опыт, это я набросал вариант из того, что погуглил в интернете. Насколько я понял, ShowSelectDevice покажет вам тоже какой-то диалог, в котором будет перечень сканеров (первый параметр говорит о том, что надо показать именно сканеры), из которого вы должны будете выбрать нужный. Для начала проверьте работает ли это и дает ли это тот эффект, который вы ожидаете. Если получится достигнуть таким образом нужный эффект, я думаю, что есть какой-то АПИ, что бы выбрать сканер без диалога, а как-то программно (возможно через https://pro1c.org.ua/redirect.php?https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wiaaut/-wiaaut-devicemanager). https://pro1c.org.ua/redirect.php?https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wiaaut/-wiaaut-shared-samples много разных примеров есть.
Vofka @ Сегодня, 13:33
,
Работает ,программно установил значение DPI в значение 300.Зато теперь сканирует только черно-белое изображение.
И вообще без показа диалогов.
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"), а после какого-то другого метода, т.к. по идее эта строка у вас не поменялась. Но опять таки, сложно что-то угадывать, не видя что вы пишете у себя.
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();
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);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua