Я рисую прямо на форме с помощью двух операторов FillPolygon, чтобы создать две стрелки - одну черную, одну белую. (Белая стрелка немного меньше и нарисована над черной стрелкой.)
Вот код в форме OnPaint.
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillPolygon(brushBlack, travelArrow);
g.FillPolygon(brushWhite, featureArrow);
}
Отлично работает. Теперь, когда белая стрелка будет рисоваться несколько раз в разных поворотах, я решил использовать двойную буферизацию, чтобы избежать как можно большего мерцания.
Сначала я создал метод DrawFeatureArrow, который я вызываю в OnPaint.
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillPolygon(brushBlack, travelArrow);
DrawFeatureArrow(this, e);
}
Примечание: пока нет вращения белой кодированной стрелки, я просто пытаюсь настроить двойную буферизацию.
DrawFeatureArrow выглядит следующим образом.
private void DrawFeatureArrow(object sender, PaintEventArgs e)
{
Bitmap buffer = new Bitmap(60, 159);
Graphics gOff = Graphics.FromImage(buffer);
gOff.FillRectangle(brushGreen, 0, 0, buffer.Width, buffer.Height);
gOff.FillPolygon(brushWhite, featureArrow);
ImageAttributes attr = new ImageAttributes();
attr.SetColorKey(Color.Green, Color.Green);
Rectangle srcRect = new Rectangle(0, 0, bugger.Width, buffer.Height);
Rectangle destRect = new Rectangle(90, 66, 60, 159);
Graphics f = e.Graphics;
// Should draw green rectangle and white arrow
f.DrawImage(buffer, 90, 66); // Draws just a green rectangle
// If uncommented, should draw just white arrow (green rectangle hidden by SetColorKey)
// f.DrawImage(buffer, destRect, 0, 0, buffer.Width, buffer.Height, GraphicsUnit.Pixel, attr);
f.Dispose();
gOff.Dispose();
buffer.Dispose();
}
При запуске отображается зеленый прямоугольник, но не белая стрелка.
Как ни странно, в DrawFeatureArrow, если вы замените это
gOff.FillPolygon(brushWhite, featureArrow);
С этим
gOff.FillRectangle(brushWhite, 10, 10, 20, 20);
Вы видите крошечный белый прямоугольник в верхнем левом углу зеленого прямоугольника.
Очень странное поведение. Надеюсь, кто-то может указать, что я делаю неправильно.
Заранее спасибо за помощь.