|
|
|
Захват изображения с web камеры | ☑ | ||
|---|---|---|---|---|
|
0
ПульсЪ
12.10.10
✎
17:53
|
Всем привет, есть обработка, захватывает изображение с вебки и передает снимок на форму.
Процедура КнопкаВыполнитьНажатие(Кнопка) TempИмя = ПолучитьИмяВременногоФайла("jpg"); Для К = 1 По DeviceCount Цикл Если oDevice[к-1] <> Неопределено Тогда Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}"); Image.Height = 1024; Image.Width = 1240; Image.SaveFile(TempИмя); Картинка = Новый Картинка(TempИмя); УдалитьФайлы(TempИмя); КонецЕсли; КонецЦикла; Если Не Картинка = Неопределено Тогда ЭлементыФормы.ПолеКартинки1.Картинка = Картинка; КонецЕсли; КонецПроцедуры все вроде бы нормально, за исключением качества фотки в отладчике смотрел, в свойствах Image.Width стоит 640, а в Image.Height стоит 480, вопрос: как изменить эти значения на 1024 и 1280? пробывал Image.Height = 1024; Image.Width = 1240; выдает ошибку "Поле объекта не доступно для записи". как решить проблему? может кто нибудь сталкивался? |
|||
|
1
Buster007
12.10.10
✎
17:56
|
можт вебка не способна на такое разрешение?
|
|||
|
2
ПульсЪ
12.10.10
✎
18:00
|
способна, в настройках вебки можно ставить такое разрешение, она даже фоткает нормально, а в 1С почему то передает картинку с таким разрешением.. + проверял на трех вебках
|
|||
|
3
Shurjk
12.10.10
✎
18:03
|
(2) а в файле какая картинка лежит?
|
|||
|
4
ПульсЪ
12.10.10
✎
18:04
|
(3) вплане какая?
|
|||
|
5
Shurjk
12.10.10
✎
18:05
|
(4) С каким разрешением
|
|||
|
6
Shurjk
12.10.10
✎
18:06
|
+(5) То есть у тебя вебка фотает сохраняет в файл а затем на форму пихает. Где тебя качество не устраивает уже на форме или в файле?
|
|||
|
7
ПульсЪ
12.10.10
✎
18:11
|
(5) я запускаю обработку, при нажатии на кнопку выполнить вебка фоткает. на строке Image.SaveFile(TempИмя);
она сохраняет изображние TEMP с расширением 640 на 480. нужно что бы сохранялось расширение 1024 на 1280 .. что то не канает( |
|||
|
8
ПульсЪ
12.10.10
✎
18:12
|
(6) качесво не утраивает и там и там, но если сам файл будет создаваться с нужным разрешением, то соответственно и на форме он то же будет норм
|
|||
|
9
Shurjk
12.10.10
✎
18:15
|
(7) 1с здесь не при чем, рой доку тому Execute что ты для устройства выполняешь.
|
|||
|
10
ПульсЪ
12.10.10
✎
18:17
|
(9) вот я и интересуюсь что мб кто нибудь сталкивался с такой проблемой
|
|||
|
11
Shurjk
12.10.10
✎
18:18
|
(10) MSDN тебе в помощь.
|
|||
|
12
ПульсЪ
12.10.10
✎
18:21
|
(11) хехе))
|
|||
|
13
david2002ru
12.10.10
✎
18:34
|
Пошукай в реестре свойства ключа {557CF401-1A04-11D3-9A73-0000F81EF32E}. Может там разрешение кадра устанавливается?
|
|||
|
14
ПульсЪ
12.10.10
✎
18:38
|
(13) нету такого ключЧа
|
|||
|
15
ПульсЪ
13.10.10
✎
10:06
|
ну и что граждане никто не работал с WIA.ImageProcess ??
|
|||
|
16
ПульсЪ
13.10.10
✎
10:12
|
ну или с WIA.DeviceManager
|
|||
|
17
Salvador Limones
13.10.10
✎
10:14
|
Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}");
Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}"); ОбрабИзобр = Новый COMОбъект("Wia.ImageProcess"); ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Scale").FilterID); ОбрабИзобр.Filters(1).Properties("MaximumWidth").Value = 1240; ОбрабИзобр.Filters(1).Properties("MaximumHeight").Value = 1240; ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Convert").FilterID); ОбрабИзобр.Filters(2).Properties("FormatID").Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; ОбрабИзобр.Filters(2).Properties("Quality").Value = 85; Изображение = ОбрабИзобр.Apply(Image); Изображение.SaveFile(TempИмя); Картинка = Новый Картинка(TempИмя); Примерно так. |
|||
|
18
ПульсЪ
13.10.10
✎
10:18
|
хм интересно, я тут что то похожее накопал, но вроде не так, ща гляну, скажу
|
|||
|
19
ПульсЪ
13.10.10
✎
10:22
|
(17) свойства меняются, но картинка всеравно поганово качества(
у меня примерно такой же код раздобыл, тока чуть по другому Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}"); Image.SaveFile(TempИмя); Проба = Новый COMОбъект("WIA.ImageFile"); Проба.LoadFile(TempИмя); ДляОбработки = Новый COMОбъект("WIA.ImageProcess"); ID=ДляОбработки.FilterInfos("Scale").FilterID; ДляОбработки.Filters.Add(ID); ДляОбработки.Filters.Item(1).Properties.Item(1).Value = 1200; ДляОбработки.Filters.Item(1).Properties.Item(2).Value = 1600; Проба = ДляОбработки.Apply(Проба); ПутьНовый = TempИмя; УдалитьФайлы(TempИмя); Проба.SaveFile(ПутьНовый); |
|||
|
20
ПульсЪ
13.10.10
✎
10:24
|
тут нужно как то менять изображение до его создания, в отладчике смотрел, сначала создается картинка, а потом уже меняется разрешение, ну а естественно из хорошего в плохое можно, а из плохого в хорошее низя( тут как раз такой случай
|
|||
|
21
Salvador Limones
13.10.10
✎
10:25
|
(19) Скорее всего в image уже отстой, идёт изображение на минимальных дефолтных настройках.
|
|||
|
22
Salvador Limones
13.10.10
✎
10:28
|
Вот мой код, полностью рабочий. Получает картинку со сканера.
Процедура ВставитьИзображениеСоСканераНажатие(Элемент) ВременныйФайлДляЗагрузки = КаталогВременныхФайлов()+"\tempscan.jpg"; СканМенеджер = Новый COMОбъект("WIA.DeviceManager"); ДиалогСканера = Новый COMОбъект("WIA.CommonDialog"); для каждого СканерСтр из СканМенеджер.DeviceInfos цикл если СканерСтр.Type = 1 тогда Сканер = СканерСтр.Connect(); Прервать; КонецЕсли; КонецЦикла; Содерж = Сканер.Items.Item(1); Свойства = Содерж.Properties; для каждого СтрСв из Свойства цикл если Формат(СтрСв.PropertyID,"ЧГ=0") = "6147" тогда СтрСв.Value = 300; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6148" тогда СтрСв.Value = 300; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6149" тогда СтрСв.Value = 0; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6150" тогда СтрСв.Value = 0; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6151" тогда СтрСв.Value = СтрСв.SubTypeMax; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6152" тогда СтрСв.Value = СтрСв.SubTypeMax; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6146" тогда СтрСв.Value = 1; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6154" тогда //СтрСв.Value = 20; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "6155" тогда СтрСв.Value = 30; КонецЕсли; если Формат(СтрСв.PropertyID,"ЧГ=0") = "4103" тогда СтрСв.Value = 0; КонецЕсли; КонецЦикла; imageFile = ДиалогСканера.ShowTransfer(Содерж); ОбрабИзобр = Новый COMОбъект("Wia.ImageProcess"); ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Scale").FilterID); ОбрабИзобр.Filters(1).Properties("MaximumWidth").Value = 1123; ОбрабИзобр.Filters(1).Properties("MaximumHeight").Value = 1123; ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Convert").FilterID); ОбрабИзобр.Filters(2).Properties("FormatID").Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; ОбрабИзобр.Filters(2).Properties("Quality").Value = 85; Изображение = ОбрабИзобр.Apply(imageFile); Изображение.SaveFile(ВременныйФайлДляЗагрузки); ВыбранноеИзображение = Новый Картинка(ВременныйФайлДляЗагрузки, Ложь); НовСтр = ИзображенияРег.Добавить(); НовСтр.Хранилище = Новый ХранилищеЗначения(ВыбранноеИзображение, Новый СжатиеДанных); УдалитьФайлы(ВременныйФайлДляЗагрузки); КонецПроцедуры |
|||
|
23
ПульсЪ
13.10.10
✎
10:31
|
(19) я то же так думаю.. а есть какие нибудь варианты перехвата изображения?
самое интересное что прогу логите4 не ставил, было качество 640х480, поставил прогу стало 320 на 240 (( нужно как минимум 1024 на 1400(( а в самой прогеще интереснее делал увеличение на максимум, код цепплял настройки и передавал как надо, но вот ставлю настройки разрешения - не цепляет( |
|||
|
24
ПульсЪ
13.10.10
✎
10:32
|
(22) но вот это по сути то что ты и написал в (17)
|
|||
|
25
Salvador Limones
13.10.10
✎
10:34
|
(24) В (22) полностью. Поиск и подключение к сканеру, установка настроек, получение изображения.
Попробуй, только для вебки нужно СканерСтр.Type = 1 поменять на другой тип. |
|||
|
26
ПульсЪ
13.10.10
✎
10:34
|
еще кстате, я код полностью понмаю, кроме этогго
Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); что это значит? |
|||
|
27
ПульсЪ
13.10.10
✎
10:34
|
(25) ок, ща попробую
|
|||
|
28
ПульсЪ
13.10.10
✎
10:42
|
(25) блин, че т код не подогнать, тип вебки 3
|
|||
|
29
ПульсЪ
13.10.10
✎
10:49
|
подогнал, зараза, в имэйдж файл уже передается 240 на 320, блин, хрень какая то ((((
|
|||
|
30
ПульсЪ
13.10.10
✎
10:50
|
хотя один плюс) твой код работает быстрее)
|
|||
|
31
Ленинград
13.10.10
✎
10:54
|
закладочко
|
|||
|
32
ПульсЪ
13.10.10
✎
10:58
|
(31) хехе_)
|
|||
|
33
ПульсЪ
13.10.10
✎
11:10
|
Люди... )) есть кто еще живой?)))
|
|||
|
34
Salvador Limones
13.10.10
✎
11:15
|
(33) Я уже не знаю, чем помочь. У меня со сканерами всё пашет. С разными, Epson и какое то МФУ Canon
|
|||
|
35
ПульсЪ
13.10.10
✎
11:21
|
(34) спасиб)
я сам день и пол ночи ковырялся, результат нулевой.. нужно как то изменять свойства картинки до ее создания.. еще меня смущает строчка Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); |
|||
|
36
Salvador Limones
13.10.10
✎
11:24
|
(35) Судя по http://msdn.microsoft.com/en-us/library/ms630829(VS.85).aspx
значит дать устройству команду снять изображение. |
|||
|
37
ПульсЪ
13.10.10
✎
11:28
|
тогда код
TempИмя = ПолучитьИмяВременногоФайла("jpg"); Для К = 1 По DeviceCount Цикл Если oDevice[к-1] <> Неопределено Тогда Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}"); ОбрабИзобр = Новый COMОбъект("Wia.ImageProcess"); ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Scale").FilterID); ОбрабИзобр.Filters(1).Properties("MaximumWidth").Value = 1240; ОбрабИзобр.Filters(1).Properties("MaximumHeight").Value = 1240; ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Convert").FilterID); ОбрабИзобр.Filters(2).Properties("FormatID").Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; ОбрабИзобр.Filters(2).Properties("Quality").Value = 85; Изображение = ОбрабИзобр.Apply(Image); Изображение.SaveFile(TempИмя); Картинка = Новый Картинка(TempИмя); Картинка = Новый Картинка(TempИмя); УдалитьФайлы(TempИмя); КонецЕсли; КонецЦикла; Если Не Картинка = Неопределено Тогда ЭлементыФормы.ПолеКартинки1.Картинка = Картинка; КонецЕсли; верный.. вроде бы |
|||
|
38
ПульсЪ
13.10.10
✎
11:29
|
изображение создается в jpg, затем снимается с камеры, задаются его свойства,затем сохраняется..
|
|||
|
39
ПульсЪ
13.10.10
✎
11:34
|
вот весь код обработки: может еще где косяк.. на форме одна картинка, в котоорую при нажатии на выполнить и передается изображение
Перем oDevice; Перем DeviceCount; Процедура КнопкаВыполнитьНажатие(Кнопка) TempИмя = ПолучитьИмяВременногоФайла("jpg"); Для К = 1 По DeviceCount Цикл Если oDevice[к-1] <> Неопределено Тогда Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}"); ОбрабИзобр = Новый COMОбъект("Wia.ImageProcess"); ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Scale").FilterID); ОбрабИзобр.Filters(1).Properties("MaximumWidth").Value = 1240; ОбрабИзобр.Filters(1).Properties("MaximumHeight").Value = 1240; ОбрабИзобр.Filters.Add(ОбрабИзобр.FilterInfos("Convert").FilterID); ОбрабИзобр.Filters(2).Properties("FormatID").Value = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; ОбрабИзобр.Filters(2).Properties("Quality").Value = 85; Изображение = ОбрабИзобр.Apply(Image); Изображение.SaveFile(TempИмя); Картинка = Новый Картинка(TempИмя); Картинка = Новый Картинка(TempИмя); УдалитьФайлы(TempИмя); КонецЕсли; КонецЦикла; Если Не Картинка = Неопределено Тогда ЭлементыФормы.ПолеКартинки1.Картинка = Картинка; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Попытка Device = Новый COMОбъект("WIA.DeviceManager"); Исключение //ОбщегоНазначения.СообщитьОбОшибке("Не установлена компонента WIA!"); Сообщить("Не установлена компонента WIA!"); Возврат КонецПопытки; DeviceCount = Device.DeviceInfos.Count; Если DeviceCount > 0 Тогда oDevice = Новый Массив(DeviceCount); Для К=1 По DeviceCount Цикл Если Device.DeviceInfos(к).Type = 3 Тогда Попытка oDevice[к-1] = Device.DeviceInfos(к).Connect(); Исключение oDevice[к-1] = Неопределено; КонецПопытки; Иначе oDevice[к-1] = Неопределено; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
|
40
Salvador Limones
13.10.10
✎
11:50
|
(39) Так после того как сделал Connect(), выставь параметры.
Содерж = oDevice[к-1].Items.Item(1); Свойства = Содерж.Properties; для каждого СтрСв из Свойства цикл и так далее |
|||
|
41
ПульсЪ
13.10.10
✎
11:54
|
(40) непонимаю(
|
|||
|
42
ПульсЪ
13.10.10
✎
12:20
|
обновение..)
|
|||
|
43
ПульсЪ
13.10.10
✎
12:52
|
+(42)
|
|||
|
44
ПульсЪ
13.10.10
✎
16:17
|
+(43)
|
|||
|
45
ПульсЪ
13.10.10
✎
17:25
|
up
|
|||
|
46
Salvador Limones
13.10.10
✎
17:27
|
Ну что "ап"? Поставь Properties после коннекта
|
|||
|
47
ПульсЪ
13.10.10
✎
17:33
|
(46) да ужо ставил) все уже перепробывал, пришел к выводу Захват изображения с web камеры
|
|||
|
48
david2002ru
14.10.10
✎
01:28
|
Решал (и решил) задачку для медицины для двух разных камер...
Давайте по-порядку: 1. У каждой камеры есть документация. В ней сказано, в каком формате, какого разрешения и при каких условиях можно получить кадр изображения. Если нужное разрешение "как минимум 1024 на 1400" в jpg прописано - то едем дальше. 2. Как правило к каждой камере прилагается программа, ее тестирующая. Если с ее помощью нужный результат достигается, то задачка заведомо решается. Существуют "универсальные" программы, опрашивающие Web-камеры. (На случай отсутствия родной). Если результат устраивает (удалось на диск сохранить нужный кадр), движемся дальше. 3. Далее - альтернатива: пытаться на 1с ваять считывание кадра и его обработку, или возложить задачу считывания нужного изображения на стороннюю программу. (Думаю, обработка оного в 1с примерна такая же как скажем на Delphi, то есть не чрезмерно сложна). 4. По ряду причин, в частности из-за необходимости обработки кадра, я считывал кадр с помощью программки на C++ (Хотя делал варианты и на Delphi и на Sharp и на Java). Для этого посылал команду типа "дай кадр" поверх http через сокет. Параметры самой камеры были ЗАРАНЕЕ настроены и размер кадра более не менялся. Ничто не мешает полученный кадр сохранить на диск и тд. 5. В любом случае, не проделав 1 и 2 пункты, опираться не на что. 6. Чтобы поменять параметры кадра и тп. для камер нужно было послать КОМАНДУ на камеру. Тогда с камеры можно было считать другой Jpg (с другими параметрами). Изменение кадра путем изменения Image-приемника в 1с напрямую "не прокатит". 7. Коротко говоря, настраивать нужно web-камеру для нужного jpg. Считывать его по "команде" в СОГЛАСОВАННЫЙ объект (Device) и выводить на экран в СОГЛАСОВАННЫЙ Image. Параметры Device видимо записываются в соответствующем ключе в реестре. Параметры объекта Image - при его создании. |
|||
|
49
inspam
14.10.10
✎
01:33
|
закладка
|
|||
|
50
ПульсЪ
14.10.10
✎
13:41
|
всем спс, нашел другой способ, с помощью компоненты Душелова)
но появилась новая проблема, кто нибудь сталкивался, какубрать окно настроек при старте обработки? |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |