В основном я делаю анимированный интерфейс с нуля.Все в пользовательском интерфейсе является производным от базового класса ScreenThing, который может хранить растровое изображение, используемое для рисования этой вещи, а также ее положение.Когда я хочу нарисовать пользовательский интерфейс, я создаю новое пустое растровое изображение нужного размера, создаю объект Graphics из этого растрового изображения, а затем передаю этот графический объект всем методам ScreenThings Draw () для рисования самостоятельно.Когда это сделано, я печатаю растровое изображение на экране с помощью элемента управления PictureBox.
Все это прекрасно работает, но слишком медленно.Я хочу, чтобы это происходило по крайней мере 30 раз в секунду, поэтому анимация плавная, но на все это уходит более 33 миллисекунд.Я видел, что причиной этой медленности является блокировка и разблокировка растровой памяти.Я попробовал некоторый код, который нашел в Интернете, который разблокирует растровые изображения и создает новые функции GetPixel и SetPixel, и попытался комбинировать изображения попиксельно, как показано ниже, но это заняло еще больше времени.(приведенный ниже код был всего лишь тестом, он не помещает изображение в нужное место)
for (int i = 0; i < images.Count; i++)
{
FastBitmap foreground = new FastBitmap(images[i]);
foreground.LockImage();
for (int x = 0; x < images[0].Width; x++)
{
for (int y = 0; y < images[0].Height; y++)
{
output.SetPixel(x, y, foreground.GetPixel(x, y));
}
}
foreground.UnlockImage();
}
Так каков наилучший способ сделать это?Можно ли использовать C # для рисования довольно большого изображения (например, 1024x768) в режиме реального времени, как это?Если все остальное не помогло, я думаю, я мог бы найти способ рисовать только те части, которые изменились, но я бы хотел избежать этого, если возможен перебор всех сил.Большое спасибо!