В настоящее время я работаю над проектом, в котором мне нужно использовать GDI + (System.Drawing
). Я пытаюсь сделать многоцелевой измеритель (колесо в виде часов) с динамическими neeldes на нем.
Я не хочу рисовать фоновое изображение (со всеми отметками) в каждом кадре. Я решил это сейчас, установив его в качестве фонового изображения графического «контейнера», представляющего собой панель (имейте это в виду, возможно, мне придется сделать это по-другому).
Итак, я рисую иглы. Иглы в настоящее время обновляются 25 раз в секунду (я мог бы оптимизировать это, чтобы он обновлялся только при необходимости). Проблема, однако, в том, что мне нужно очистить буфер перед началом работы с новым кадром, чтобы фоновое изображение покрылось фоновым цветом буфера. Очевидно, я этого не хочу.
Я попытался установить цвет фона буфера на Color.Transparent
, но вместо этого он дает буферу цвет в соответствии с ключом прозрачности родителя (в моем случае он получается черным).
Вот мой текущий код, используемый для рисования игл (в классе Wheel
):
/// <summary>
/// Draws the wheel and the needles.
/// </summary>
public void Draw()
{
Graphics.Clear(Color.Transparent);
// Draws all needles, works fine
foreach (Needle Ndl in Needles)
{
Ndl.Draw(ref this.Graphics);
}
// Draws the little circle in the center of the wheel. Looks only.
Graphics.FillEllipse(new Pen(Color.White).Brush, new Rectangle(120, 120, 16, 16));
}
Да, я следовал правилам переполнения стека, я сделал свою домашнюю работу. Другие люди решили эту проблему, просто рисуя изображение в каждом кадре, используя BitBlt, что очень удобно для моего мозга.
Я очень непредубежден в этом вопросе, поэтому, если вы считаете, что я все равно должен использовать BitBlt, и вы знаете, где я могу найти несколько исчерпывающих подробных примеров, я обязательно сделаю это с BitBlt. Конечно, было бы еще лучше, если бы существовали решения без использования BitBlt или если в любом случае не имеет смысла использовать его здесь.
Можно ли сделать фон буфера прозрачным или я должен использовать совершенно другой подход?
Примечание. Я не хочу использовать XNA, так как это приложение будет в основном использоваться в целях обслуживания на простых / старых компьютерах, поэтому я не хочу иметь ничего общего с распространяемыми файлами.