Захват изображения с камеры - C#
Формулировка задачи:
Есть некая камера со своим SDK. Пишу простенькое приложение для захвата с неё изображения. Ниже пробный код, который по нажатию кнопки начинает захват. Забрать один кадр получается, pictureBox1 отображает корректно.
Если пытаюсь завернуть в бесконечный цикл, то ни одного кадра 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");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();