Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
Добрый день !
Появилась необходимость сканирования фотографий из 1с 8.2 через сервис VIA. Все работает в принципе,но хотелось бы устанавливать значение DPI программно. Не могу разобраться с тех.документацией на WIA. в принципе после вызова следующей строчки кода появляется диалоговое окно WIA.В этом окне и устанавливается значение DPI. По умолчанию оно 150.А мне нужно 300.Можно ли задать его программно ?
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
У вас где-то должен быть объект сканера. Если нету, то попробуйте вызвать метод ShowSelectDevice(1, false, false) на DevManager, который по идее вернет этот объект. После этого попробуйте:
Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
Цитата(Vofka @ 17.10.19, 11:57)
ShowSelectDevice(1, false, false)
Это будет сканер по умолчанию ? Т.е, я хотел сказать сканер по умолчанию в операционной системе ? Значит объект CommonDialog свойства DPI не имеет ? Установка DPI возможна только через объект Сканер получается.
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
andrew76, то что я написал выше, это не мой личный опыт, это я набросал вариант из того, что погуглил в интернете. Насколько я понял, ShowSelectDevice покажет вам тоже какой-то диалог, в котором будет перечень сканеров (первый параметр говорит о том, что надо показать именно сканеры), из которого вы должны будете выбрать нужный. Для начала проверьте работает ли это и дает ли это тот эффект, который вы ожидаете. Если получится достигнуть таким образом нужный эффект, я думаю, что есть какой-то АПИ, что бы выбрать сканер без диалога, а как-то программно (возможно через [необходимо зарегистрироваться для просмотра ссылки]). [необходимо зарегистрироваться для просмотра ссылки] много разных примеров есть.
Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
Vofka @ Сегодня, 13:33
, Работает ,программно установил значение DPI в значение 300.Зато теперь сканирует только черно-белое изображение. И вообще без показа диалогов.
Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
Vofka @ Сегодня, 14:30
,
Так-помогло.Теперь сканирует цветное изображение.Но ни одного диалогового окна WIA не видно на мониторе. Сканирование идет втихую.По идее в первом варианте после вызова DevManager = Новый COMОбъект("WIA.CommonDialog") появлялось диалоговое головное окно WIA.А сейчас нет.
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
andrew76, вы полный код не показываете, поэтому сложно что-то сказать. Видимо окно у вас было не после DevManager = Новый COMОбъект("WIA.CommonDialog"), а после какого-то другого метода, т.к. по идее эта строка у вас не поменялась. Но опять таки, сложно что-то угадывать, не видя что вы пишете у себя.
Группа: Пользователи
Сообщений: 445
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43
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}"; Прервать; КонецЕсли; КонецЦикла;
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Странно как-то. Если оно должно выскакивать на строке DevManager = Новый COMОбъект("WIA.CommonDialog");, то почему оно не выскакивает на этой строке в вашем варианте из сообщения #9?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!