Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > > >
Восстановить пароль Регистрация
 
kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
27.02.2011, 21:12     захват видео изображения с веб-камеры
  #1
Возникли проблемы при создании массива в C#.В общем дело обстоит так: имеется захват видео изображения с веб-камеры,необходимо сделать, чтобы по клику кнопочки, сохранялось текущее изображение с камеры в массив(чтобы это происходило каждый раз по клику)......Я так понимаю для хранения изображений необходимо создать byte массив и там уже размещать картинки...а как это сделать не пойму...помогите!!!!!!!
AdAgent
Объявления
27.02.2011, 21:12
kl14_11
Форумчанин
17 / 17 / 0
Регистрация: 02.11.2009
Сообщений: 118
27.02.2011, 21:30
  #2
Массив вот так создаётся:
Код C#
1
byte[] data = new byte[1024];
kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
28.02.2011, 07:58  [ТС]
  #3
Цитата Сообщение от kl14_11 Посмотреть сообщение
Массив вот так создаётся:
Код C#
1
byte[] data = new byte[1024];
как создавать то я знаю, а вот как туда размещать картинки, каждый раз кликая по кнопке, это проблема...
Евгений М.
Форумчанин
989 / 930 / 30
Регистрация: 28.02.2010
Сообщений: 2,684
Записей в блоге: 1
28.02.2011, 08:11
  #4
Попробуйте через ImageList.
Код C#
1
ImageList1.Images.Add(...)
kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
28.02.2011, 09:56  [ТС]
  #5
Возможно я как-то неправильно объяснил суть вопроса, но в общем попробую более подробнее пояснить

Код C#
1
2
3
4
5
6
private void button4_Click(object sender, EventArgs e)
        {
            pictureBox2.Image = pictureBox1.Image;
            savear = new byte[1024];
            pictureBox2.Image = savear;
        }
я делаю так вот.....А он мне пишет, Неявное преобразование типа "byte[]" в "System.Drawing.Image" невозможно .....

то делать? как быть?

Добавлено через 3 минуты
Цитата Сообщение от Евгений М. Посмотреть сообщение
Попробуйте через ImageList.
Код C#
1
ImageList1.Images.Add(...)
насколько мне известно в ImageList можно добавлять существующие картинки, а у меня их нет, они появляются только после того, как кликнешь по кнопке, то есть:
Код C#
1
pictureBox2.Image = pictureBox1.Image;
kl14_11
Форумчанин
17 / 17 / 0
Регистрация: 02.11.2009
Сообщений: 118
28.02.2011, 11:12
  #6
Как вы вообще получаете текущее изображение с камеры, в чём оно у вас хранится? В каком типе?
kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
28.02.2011, 11:22  [ТС]
  #7
Цитата Сообщение от kl14_11 Посмотреть сообщение
Как вы вообще получаете текущее изображение с камеры, в чём оно у вас хранится? В каком типе?
Изображение с камеры получаю с помощью подключаемой библиотеки WebCam_Capture.dll, потом оно транслируется через обычный picturebox и нигде оно не хранится.....Изображение идет в реалтайм....
lifestyle
Mobile Developer
217 / 213 / 4
Регистрация: 10.05.2009
Сообщений: 914
28.02.2011, 13:20
  #8
откуда помещается изображения в picturebox?из какого то stream'a или из массива?

Добавлено через 1 минуту
Цитата Сообщение от kill_s Посмотреть сообщение
Изображение с камеры получаю с помощью подключаемой библиотеки WebCam_Capture.dll, потом оно транслируется через обычный picturebox и нигде оно не хранится.....Изображение идет в реалтайм....
приведи код получения картинки с dll твоей pictureBox'у
Casper-SC
Форумчанин
28.02.2011, 18:29
  #9

Не по теме:

Цитата Сообщение от kill_s Посмотреть сообщение
Изображение с камеры получаю с помощью подключаемой библиотеки WebCam_Capture.dll, потом оно транслируется через обычный picturebox и нигде оно не хранится.....Изображение идет в реалтайм....
Она бесплатна для коммерческого использования?

kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
28.02.2011, 19:56  [ТС]
  #10
Вот код получения изображения с камеры:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 class Cam
    {
        private int FrameNumber = 30;
        private WebCamCapture webcam;
        private System.Windows.Forms.PictureBox _FrameImage;
        public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl)
        {
            webcam = new WebCamCapture();
            webcam.FrameNumber = ((ulong)(0ul));
            webcam.TimeToCapture_milliseconds = FrameNumber;
            webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
            _FrameImage = ImageControl;
        }
 
        void webcam_ImageCaptured(object source, WebcamEventArgs e)
        {
            _FrameImage.Image = e.WebCamImage;
        }
 
        public void start()
        {
            webcam.TimeToCapture_milliseconds = FrameNumber;
            webcam.Start(0);
        }
вот так вот это выглядит.......блин...неужели я совсем плохо все объясняю?......мне просто надо, что бы по клику картинка помещалась в массив,для дальнейшей обработки ее...

Код C#
1
2
3
4
5
6
 private void button4_Click(object sender, EventArgs e)
        {
            pictureBox2.Image = pictureBox1.Image;
            savear = new byte[1024];
            pictureBox2.Image = savear;
            }
Вот, то что я хотел сделать сам, но выдается ошибка...про неявное преобразование byte System.Drawing.Image невозможно.....в общем что делать не знаю......ведь надо то всего из picturebox1 передать изображение во второй picturebox и сохранить в массив....

Добавлено через 53 секунды
Цитата Сообщение от Casper-SC Посмотреть сообщение

Не по теме:



Она бесплатна для коммерческого использования?

абсолютно бесплатна, а разве есть смысл от того бесплатна она или нет?
kl14_11
Форумчанин
17 / 17 / 0
Регистрация: 02.11.2009
Сообщений: 118
28.02.2011, 20:44
  #11
Возможно вам вместо обычного массива байт
Код C#
1
savear = new byte[1024];
стоит использовать
Код C#
1
Bitmap savear = new Bitmap(200, 100);
Класс Bitmap - карта бит, её можно присваивать Image
Код C#
1
2
3
pictureBox2.Image = pictureBox1.Image;
            Bitmap savear = new Bitmap(200, 100);
            pictureBox2.Image = savear;
С помощью битмапа и рисовать можно.
lifestyle
Mobile Developer
217 / 213 / 4
Регистрация: 10.05.2009
Сообщений: 914
01.03.2011, 00:19
  #12
Цитата Сообщение от kill_s Посмотреть сообщение
Вот код получения изображения с камеры:

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[FONT=monospace]class Cam
    {         private int FrameNumber = 30; 
        private WebCamCapture webcam;       
  private System.Windows.Forms.PictureBox _FrameImage;  
       public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl)    
     {            
 webcam = new WebCamCapture();     
        webcam.FrameNumber = ((ulong)(0ul));         
    webcam.TimeToCapture_milliseconds = FrameNumber; 
            webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);  
           _FrameImage = ImageControl;     
    }          
 void webcam_ImageCaptured(object source, WebcamEventArgs e)     
    {          
   _FrameImage.Image = e.WebCamImage;     
    }       
    public void start()    
     {             webcam.TimeToCapture_milliseconds = FrameNumber;      
      webcam.Start(0);       
  }
[/FONT]


вот так вот это выглядит.......блин...неужели я совсем плохо все объясняю?......мне просто надо, что бы по клику картинка помещалась в массив,для дальнейшей обработки ее...


Код C#
1
2
3
4
5
6
7
8
[FONT=monospace]
private void button4_Click(object sender, EventArgs e)     
    {        
     pictureBox2.Image = pictureBox1.Image;    
         savear = new byte[1024];          
   pictureBox2.Image = savear;           
  }
[/FONT]
Вот, то что я хотел сделать сам, но выдается ошибка...про неявное преобразование byte System.Drawing.Image невозможно.....в общем что делать не знаю......ведь надо то всего из picturebox1 передать изображение во второй picturebox и сохранить в массив....

Добавлено через 53 секунды


абсолютно бесплатна, а разве есть смысл от того бесплатна она или нет?
а какие мемберы у _FrameImage, не ужели нету никакого типа data или байтового массива?? это раз.
два советую тебе для обработки изображения все же заюзать EMGU дотнетовская обертка для openCV -классная и удобная штука , сам ее сейчас использую в проекте.
и три во ттебе универсальный инструмент
http://wsp.beon.ru/24778-086-preobra...-obratno.zhtml
kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
02.04.2011, 19:14  [ТС]
  #13
Всем спасибо за помощь!!!!!!!!!!!!
Правда у меня теперь другой вопрос? а как мне сделать теперь наложение двух картинок?Рассматриваемые ранее здесь на форуме методы не помогли(или я просто их не понимаю)...помогите. разъясните код(взято вот тут) :
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static Bitmap MakeImage(Size ImgSize, Bitmap foreImg, Bitmap backImg, byte s)
{
    // ImgSize = размер картинки-результата, обе исходные картинки приводятся к указанному размеру
    // s прозрачность накладываемого изображения foreImg от 0 (100%) до 255 (0%)
    // результат наследует Альфа-канал фонового изображения
    // наложение использует Альфа-канал накладываемого изображения
    Bitmap fimg = new Bitmap(foreImg, ImgSize);
    Bitmap bimg = new Bitmap(backImg, ImgSize);
    Bitmap bmp = new Bitmap(ImgSize.Width, ImgSize.Height);
    for (int i = 0; i < bmp.Width; i++)
        for (int j = 0; j < bmp.Height; j++)
        {
            Color fm = fimg.GetPixel(i, j);
            Color bm = bimg.GetPixel(i, j);
            byte af = (byte)(fm.A * s / byte.MaxValue);
            byte a = bm.A;
            byte r = (byte)((fm.R * af + bm.R * (byte.MaxValue - af)) / byte.MaxValue);
            byte g = (byte)((fm.G * af + bm.G * (byte.MaxValue - af)) / byte.MaxValue);
            byte b = (byte)((fm.B * af + bm.B * (byte.MaxValue - af)) / byte.MaxValue);
            bmp.SetPixel(i, j, Color.FromArgb(a, r, g, b));
        }
    return bmp;
}
 
я понимаю что это функция, но как ее теперь прицепить к классу новому?
класс я создал, а вот эту функцию потом не могу вызвать из другого модуля программы, хотя вроде бы все подключил, просто когда пытаешься вызвать этот класс, он вызывается, но только там нету такой функции...а она написана в нем...что делать, как быть?помогите люди добрые!!!!!!!!
kl14_11
Форумчанин
17 / 17 / 0
Регистрация: 02.11.2009
Сообщений: 118
02.04.2011, 20:26
  #14
Возможно вы объявили функцию как static, тогда вам надо обращаться к ней не через экземпляр класса, а через имя класса. static-член один для всех экземпляров.
Или наоборот не static, тогда вам надо вначале создать экземпляр класса и через него к ней обращаться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 21:30

Еще ссылки по теме:

C# Как получить фото с веб-камеры Logitech

C# Захват фрейма с веб камеры

C# Изображения

C# Захват аудио

kill_s
Новичок
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 38
02.04.2011, 21:30  [ТС]     захват видео изображения с веб-камеры
  #15
Всем спасибо!!! проблема решена!!!!но тема еще не закрыта )))))
Yandex
Объявления
02.04.2011, 21:30
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 14:31. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.