Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как программно установить значение DPI при сканировании через WIA ? , 1C 8.2.19.106          
andrew76 Подменю пользователя
сообщение 17.10.19, 8:22
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Добрый день !

Появилась необходимость сканирования фотографий из 1с 8.2 через сервис VIA.
Все работает в принципе,но хотелось бы устанавливать значение DPI программно.
Не могу разобраться с тех.документацией на WIA.
в принципе после вызова следующей строчки кода появляется диалоговое окно WIA.В этом окне и устанавливается значение DPI.
По умолчанию оно 150.А мне нужно 300.Можно ли задать его программно ?

DevManager = Новый COMОбъект("WIA.CommonDialog");

Vofka Подменю пользователя
сообщение 17.10.19, 8:57
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

У вас где-то должен быть объект сканера. Если нету, то попробуйте вызвать метод 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";

Спасибо сказали: andrew76, Vladal,

andrew76 Подменю пользователя
сообщение 17.10.19, 9:12
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Цитата(Vofka @ 17.10.19, 11:57) *
ShowSelectDevice(1, false, false)


Это будет сканер по умолчанию ? Т.е, я хотел сказать сканер по умолчанию в операционной системе ? Значит объект CommonDialog
свойства DPI не имеет ? Установка DPI возможна только через объект Сканер получается.

Vofka Подменю пользователя
сообщение 17.10.19, 10:33
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

andrew76, то что я написал выше, это не мой личный опыт, это я набросал вариант из того, что погуглил в интернете. Насколько я понял, ShowSelectDevice покажет вам тоже какой-то диалог, в котором будет перечень сканеров (первый параметр говорит о том, что надо показать именно сканеры), из которого вы должны будете выбрать нужный. Для начала проверьте работает ли это и дает ли это тот эффект, который вы ожидаете. Если получится достигнуть таким образом нужный эффект, я думаю, что есть какой-то АПИ, что бы выбрать сканер без диалога, а как-то программно (возможно через [необходимо зарегистрироваться для просмотра ссылки]). [необходимо зарегистрироваться для просмотра ссылки] много разных примеров есть.

Сообщение отредактировал Vofka - 17.10.19, 10:34

andrew76 Подменю пользователя
сообщение 17.10.19, 10:43
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Vofka @ Сегодня, 13:33 * ,
Работает ,программно установил значение DPI в значение 300.Зато теперь сканирует только черно-белое изображение.
И вообще без показа диалогов.

Vofka Подменю пользователя
сообщение 17.10.19, 11:30
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(andrew76 @ 17.10.19, 11:43) *
Зато теперь сканирует только черно-белое изображение.

А так?
Property prop = scannner.properties.get_Item("6146");
prop.set_Value(1);

Спасибо сказали: andrew76,

andrew76 Подменю пользователя
сообщение 17.10.19, 12:36
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Vofka @ Сегодня, 14:30 * ,

Так-помогло.Теперь сканирует цветное изображение.Но ни одного диалогового окна WIA не видно на мониторе.
Сканирование идет втихую.По идее в первом варианте после вызова DevManager = Новый COMОбъект("WIA.CommonDialog")
появлялось диалоговое головное окно WIA.А сейчас нет.

Vofka Подменю пользователя
сообщение 17.10.19, 12:57
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

andrew76, вы полный код не показываете, поэтому сложно что-то сказать. Видимо окно у вас было не после DevManager = Новый COMОбъект("WIA.CommonDialog"), а после какого-то другого метода, т.к. по идее эта строка у вас не поменялась. Но опять таки, сложно что-то угадывать, не видя что вы пишете у себя.

andrew76 Подменю пользователя
сообщение 17.10.19, 13:09
Сообщение #9

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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(ИмяФайла);

КонецЕсли;

Vofka Подменю пользователя
сообщение 17.10.19, 13:52
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Dialog.ShowSelectDevice() и ShowSelectDevice(1, false, false) разве одно и то же?

Сообщение отредактировал Vofka - 17.10.19, 13:52

andrew76 Подменю пользователя
сообщение 17.10.19, 15:37
Сообщение #11

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 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}";
            Прервать;
        КонецЕсли;
КонецЦикла;

Image = IP.Apply(Image);  
Image.SaveFile(ИмяФайла);

Vofka Подменю пользователя
сообщение 17.10.19, 16:15
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

andrew76, а на какой строке там диалоговое окно появляется, на вызове метода ShowAcquireImage?

Сообщение отредактировал Vofka - 17.10.19, 16:15

andrew76 Подменю пользователя
сообщение 17.10.19, 16:20
Сообщение #13

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Vofka @ Сегодня, 19:15 * ,

На вот этой 2-й строке : DevManager = Новый COMОбъект("WIA.CommonDialog"); //а это диалог сканирования

а это само сканирование: Image = DevManager.ShowAcquireImage();

Vofka Подменю пользователя
сообщение 17.10.19, 16:46
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Странно как-то. Если оно должно выскакивать на строке DevManager = Новый COMОбъект("WIA.CommonDialog");, то почему оно не выскакивает на этой строке в вашем варианте из сообщения #9?

andrew76 Подменю пользователя
сообщение 17.10.19, 16:50
Сообщение #15

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Vofka @ Сегодня, 19:46 * ,

Подозреваю,что все окна "гасит" команда на сканирование : objImageFile = Сканер.Transfer()

Vofka Подменю пользователя
сообщение 18.10.19, 8:32
Сообщение #16

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Есть ещё такая штука:

Image = CommonDialog.ShowTransfer(Item);


Item - это по идее объект Сканер, который вы получили из objDevice.Items(1). Более подробно [необходимо зарегистрироваться для просмотра ссылки].

Сообщение отредактировал Vofka - 18.10.19, 8:34

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 14:01
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!