优化闪烁的图片框图

时间:2013-08-30 16:56:10

标签: c# .net bitmap draw picturebox

我有一个用于绘制位图的图片框。

我有一些位图应该可以设置不透明度。

我想要它在飞行中:

我使用具有100个值的轨迹栏,例如,如果轨迹栏的值为65,则不透明度将为0.65。

我将绘图功能粘贴到轨迹栏的ValueChanged事件函数中。

因此操作起作用,使用轨迹栏改变不透明度是动态的(如果我改变轨迹栏则重新绘制)。

但它会导致闪烁,这非常烦人。

我希望有更多的连续改变和绘画。

我该如何优化它?

谢谢!

PS:对不起,我的说法不正确我忘记了一些重要的事情。当事件处理程序中轨迹栏的值发生变化(因此事件处理程序被调用)时,我总是重绘整个图片框,设置其图像,然后在图片框上绘制其他不透明度的位图。

所以:

轨迹栏更改:重绘图片框(带有白色图片),然后绘制彩色位图。 然后改变轨迹栏,白色图片框图像一次又一次地在pictureBox上绘制彩色位图。 这会导致闪烁。

你知道吗?我希望两个不透明度值之间的连续和软转换。 但重要的是删除以前绘制的位图,否则它们会相互影响,不透明度设置将不会生效,无论如何它都会令人讨厌。

或者它是悖论吗?

private void trackBar1_ValueChanged(object sender, EventArgs e)
{
     float value = (float)trackBar1.Value / 100f;
     lbOpacity.Text = value.ToString();

     DrawOnPictureBox(value); //correct but flashing
}

private void DrawOnPictureBox(float value)
{
     pictureBox1.Image = System.Drawing.Image.FromFile("D:\\PB.bmp");
     Bitmap bmp = new Bitmap("D:\\bmpToDraw.bmp");
     Point bmpPos = new PointF(PosX, PosY);
     ChangeOpacity(bmp, value);
     Graphics DrawBMP = Graphics.FromImage(pictureBox1.Image);
     DrawBMP.DrawImage(bmp, bmpPos);
     this.Refresh();
}

0 个答案:

没有答案