Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2018, 13:51   #1
Nezd01
 
Регистрация: 09.11.2018
Сообщений: 6
Вопрос 2 вебкамеры на разные picturebox

Ввел код для отображения изображений с веб-камер на форме (окне). При наличии только одной веб-камеры пытаюсь получить изображение в одном picturebox, а чтоб в другом не было, затем наоборот за счёт ручного переключения номера videoDevices с 0 на 1 и наоборот.

videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);

videoSource2 = new VideoCaptureDevice(videoDevices[1].MonikerString);

При "0" на videoDevices обоих источников на одном picturebox есть изображение с камеры, а на другом нет. Почему?

При "0" на videoDevices одного источника и "1" на videoDevices другого источника уже на обоих picturebox нет изображений с камеры. Почему?

Привожу код (в rar архиве).
Вложения
Тип файла: rar btext.rar (1.6 Кб, 11 просмотров)
Nezd01 вне форума Ответить с цитированием
Старый 09.11.2018, 21:51   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А код обработки сразу то можно выложить? С телефона тяжко ваши архивы грузить.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 12.11.2018, 09:07   #3
Nezd01
 
Регистрация: 09.11.2018
Сообщений: 6
По умолчанию

Код:
public class Form1 : Form						
    {
		private FilterInfoCollection videoDevices = null;	
		private VideoCaptureDevice videoSource = null;		
		private VideoCaptureDevice videoSource2 = null;		
		Bitmap image1;									
		Bitmap image2;
		
        public Form1()								
        {
            InitializeComponent();					
		}
					    
		private void Form1_Load(object sender, EventArgs e)	
		{																				
			Thread.Sleep(10);															
			videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);	
			
			videoSource = new VideoCaptureDevice(videoDevices[1].MonikerString);		
			videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame);		
			videoSource2 = new VideoCaptureDevice(videoDevices[0].MonikerString);
			videoSource2.NewFrame += new NewFrameEventHandler(videoSource2_NewFrame);		
			Thread.Sleep(500);
			videoSource.Start();														
			Thread.Sleep(500);
			videoSource2.Start();														
		}

		void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
		{
			this.pictureBox1.Image = (Image)eventArgs.Frame.Clone();					
		}
		
		void videoSource2_NewFrame(object sender, NewFrameEventArgs eventArgs)
		{
			this.pictureBox2.Image = (Image)eventArgs.Frame.Clone();					
		} 

		private void InitializeComponent()
        {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
			((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
			this.pictureBox2 = new System.Windows.Forms.PictureBox();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
            this.SuspendLayout();
            // 
            // pictureBox1 pic
			this.pictureBox1.BackColor = System.Drawing.Color.Gainsboro;				
			this.pictureBox1.Location = new System.Drawing.Point(100, 300);				
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(294, 220);					
            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
			image1 = new Bitmap(@"d:\1.jpg");	
			pictureBox1.Image = (Image)image1;
			// pictureBox2 pic2
			this.pictureBox2.BackColor = System.Drawing.Color.Gainsboro;				
			this.pictureBox2.Location = new System.Drawing.Point(100, 600);				
            this.pictureBox2.Name = "pictureBox2";
            this.pictureBox2.Size = new System.Drawing.Size(294, 220);					
            this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            this.pictureBox2.TabIndex = 0;
            this.pictureBox2.TabStop = false;
			image2 = new Bitmap(@"d:\2.jpg");	
			pictureBox2.Image = (Image)image2;
	        // 
            // Form1 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);			
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(600, 900);	
            this.Controls.Add(this.pictureBox1);
			this.Controls.Add(this.pictureBox2);
            this.Name = "Form2";									
            this.Text = "soft1";
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
            this.ResumeLayout(false);
			// 
			// ToolTipExampleForm 											
			this.Controls.Add(this.secondLabel);
			this.Controls.Add(this.firstLabel);
			this.PerformLayout();
	
		}
        
		private System.Windows.Forms.PictureBox pictureBox1;
		private System.Windows.Forms.PictureBox pictureBox2;
		private System.Windows.Forms.ToolTip labelsToolTip;
    }
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 12.11.2018 в 09:30.
Nezd01 вне форума Ответить с цитированием
Старый 12.11.2018, 09:53   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну сходу неплохо бы вот это:
Код:
this.pictureBox1.Image = (Image)eventArgs.Frame.Clone();
обернуть в инвокер, а то скорее всего у вас тут ошибка валится при доступе из другого потока.
А зачем столько слипов вставлено??
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 13.11.2018, 10:18   #5
Nezd01
 
Регистрация: 09.11.2018
Сообщений: 6
По умолчанию

Компилятор об ошибке не пишет, но и прога изображение на обоих pictureBox не выводит. Попробовал:
pictureBox1.Invoke(new Action(() => this.pictureBox1.Image = (Image)eventArgs.Frame.Clone()));
не помогло... не появились изображения на обоих pictureBox, только на одном.
Задержки вставлял по советам из статей в надежде чтоб один поток прожевался и затем начался бы следующий.. не помогло..
Nezd01 вне форума Ответить с цитированием
Старый 14.11.2018, 08:33   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А как у вас камеры подключены??
Наверное через концентратор USB? В таком случае обычно и возникает указанная проблема. Переключите напрямую в разные порты.

Перепроверил код на двух камерах. Все работает. Подключайте на разные порты физические.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 14.11.2018 в 08:53.
WorldMaster вне форума Ответить с цитированием
Старый 14.11.2018, 08:48   #7
Nezd01
 
Регистрация: 09.11.2018
Сообщений: 6
По умолчанию

Именно сейчас подключена 1шт веб камера. Не получается переключать изображение с неё на pictureBox1 и pictureBox2 одновременно или по отдельности за счёт номера видеоустройства 0 или 1 (videoDevices[0]) или videoDevices[1]).
Nezd01 вне форума Ответить с цитированием
Старый 14.11.2018, 09:06   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Nezd01 Посмотреть сообщение
Именно сейчас подключена 1шт веб камера. Не получается переключать изображение с неё на pictureBox1 и pictureBox2 одновременно или по отдельности за счёт номера видеоустройства 0 или 1 (videoDevices[0]) или videoDevices[1]).
Непонятно что вы там и как делаете. Вот я поставил свои камеры на разные порты. Собрал проект с вашей инициализацией. Запустил и увидел на разных боксах изображения с камер.

Вы уверены что у вас только две камеры?

Сколько тут videoDevices.Length = ?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 15.11.2018, 09:53   #9
Nezd01
 
Регистрация: 09.11.2018
Сообщений: 6
По умолчанию

Здорово! Получается перед открытой дверью остановка, как 2 камеры будут, то можно пробовать. Спасибо!
Да, сейчас одна камера, вот и в диспетчере устройств Windows показано одно видеоустройство.
Не понятно как длину посмотреть, в namespece Aforge нету такого и не массив вроде..
Nezd01 вне форума Ответить с цитированием
Старый 15.11.2018, 11:13   #10
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну как не массив то?
раз вы обращаетесь к нему по индексу значит массив videoDevices[0]
может быть не Length а Count если это список.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фото с вебкамеры Legeardo Мультимедиа в Delphi 7 23.03.2017 09:53
Снимок с вебкамеры oFFlineby Мультимедиа в Delphi 1 23.09.2011 19:44
Разные пароли на разные диапазоны zenner Microsoft Office Excel 22 27.11.2010 01:25
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
Захват изображения с вебкамеры GrenDaiZer Помощь студентам 3 15.04.2007 13:54