我直接在带有两个FillPolygon语句的表单上绘制,以创建两个箭头 - 一个黑色,一个白色。 (白色箭头略小,并在黑色箭头上绘制。)
以下是OnPaint表单中的代码。
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillPolygon(brushBlack, travelArrow);
g.FillPolygon(brushWhite, featureArrow);
}
效果很好。现在,由于白色箭头将以不同的旋转方式绘制几次,我决定使用双缓冲来避免尽可能多的闪烁。
我首先创建了一个我在OnPaint中调用的DrawFeatureArrow方法。
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);
绿色矩形的左上角有一个小小的白色矩形。
非常奇怪的行为。希望有人可以指出我做错了什么。
提前感谢您的帮助。
答案 0 :(得分:0)
您正在尺寸为60,159的缓冲区上绘制特征箭头。也许特征箭头的位置超出了这些尺寸,因此不会在位图中结束。