我有一个用于绘制位图的图片框。
我有一些位图应该可以设置不透明度。
我想要它在飞行中:
我使用具有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();
}