Захват изображения с камеры - C#

Узнай цену своей работы

Формулировка задачи:

Есть некая камера со своим SDK. Пишу простенькое приложение для захвата с неё изображения. Ниже пробный код, который по нажатию кнопки начинает захват. Забрать один кадр получается, pictureBox1 отображает корректно.
IntPtr ptr = IntPtr.Zero;
Bitmap bmp = new Bitmap(1280, 960, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
BitmapData bd;
bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
ptr = bd.Scan0;
if (AICameraDll.getImageData(ptr, bd.Stride, -1))
{
     bmp.UnlockBits(bd);
     pictureBox1.Image = bmp;  
}
else MessageBox.Show("Error");
Если пытаюсь завернуть в бесконечный цикл, то ни одного кадра pictureBox1 не отрисовывает, так и остается пустым.
IntPtr ptr = IntPtr.Zero;
Bitmap bmp = new Bitmap(1280, 960, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
BitmapData bd;
while (true)
{
     bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
     ptr = bd.Scan0;
     if (AICameraDll.getImageData(ptr, bd.Stride, -1))
     {
          bmp.UnlockBits(bd);
          pictureBox1.Image = bmp;
          //Thread.Sleep(1000);  Пытался поставить задержу... Не помогает.
     }
     else MessageBox.Show("Error");
}
Если с первым кодом регулярно нажимать на кнопку, то кадр обновляется. ЧЯДНТ? СПС!

Решение задачи: «Захват изображения с камеры»

textual
Листинг программы
new Thread(() =>
{
    Bitmap[] buff = new Bitmap[2];
    buff[0] = new Bitmap(1280, 960, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    buff[1] = new Bitmap(buff[0]);
 
    int i = 0;
    while (true)
    {
        Bitmap bmp = buff[i = ++i % 2];
        BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
        CopyMemory(bd.Scan0, source, (uint)(bd.Stride * bd.Height)); // тут копирование
        bmp.UnlockBits(bd);
        this.Invoke((MethodInvoker)delegate()
        {
            pictureBox1.Image = bmp;
        });
    }
}) { IsBackground = true }.Start();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5