Я создаю приложение, которое захватывает видеокадры с камеры (30fps @ 640x480), обрабатывает их, а затем отображает их в форме Windows.Первоначально я использовал DrawImage (см. Код ниже), но производительность была ужасной.Даже с отключенным этапом обработки лучшее, что я могу получить, это 20fps на 2,8 ГГц процессоре Core 2 Duo.Двойная буферизация включена в форме Windows, в противном случае я получаю разрыв.
Примечание. Используемое изображение является растровым изображением формата Format24bppRgb.Я знаю, что DrawImage должен работать быстрее с отформатированным изображением Format32bppArgb, но я ограничен форматом, который выходит из фрейм-граббера.ниже) но производительность была еще хуже.Я очень новичок в программировании DirectX, поэтому это может быть не лучший код DirectX.
private void CameraViewForm_Paint(object sender, PaintEventArgs e)
{
device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);
device.BeginScene();
Texture texture = new Texture(device, currentFrame, Usage.None, Pool.Managed);
Rectangle textureSize;
using (Surface surface = texture.GetSurfaceLevel(0))
{
SurfaceDescription surfaceDescription = surface.Description;
textureSize = new Rectangle(0, 0, surfaceDescription.Width, surfaceDescription.Height);
}
Sprite sprite = new Sprite(device);
sprite.Begin(SpriteFlags.None);
sprite.Draw(texture, textureSize, new Vector3(0, 0, 0), new Vector3(0, 0, 0), Color.White);
sprite.End();
device.EndScene();
device.Present();
sprite.Dispose();
texture.Dispose();
}
Мне нужно это для работы на XP, Vista и Windows 7. Я не знаю, стоит ли пробовать XNAили OpenGL.Кажется, это должно быть очень просто.