我有一个图片框,可以在其中绘制位图。
我有一些不透明度应该可以设置的位图。
我希望它在飞行中:
我使用具有 100 个值的轨迹栏,例如,如果轨迹栏的值为 65,那么不透明度将为 0.65。
我将绘图函数复制粘贴到轨迹栏的 ValueChanged 事件函数中。
所以操作有效,不透明度随着轨迹条的变化而变化(如果我改变轨迹条,则重绘)。
但它会导致闪烁,这非常烦人。
我想有更多的连续变化和绘画。
我该如何优化它?
谢谢!
PS:对不起,我的描述不正确,我忘记了一些重要的事情。当事件处理程序中轨迹栏的值发生变化(因此调用事件处理程序)时,我总是重绘整个图片框,设置其图像,然后在图片框上绘制具有其他不透明度的位图。
所以:
轨迹栏更改:重绘图片框(带有白色图像)然后绘制彩色位图。然后改变轨迹栏,白色图片框图像一次又一次地绘制在图片框上的彩色位图。这会导致闪烁。
你有什么主意吗?我想要两个不透明度值之间的连续和柔和的过渡。但重要的是要删除以前绘制的位图,否则它们将相互重叠,不透明度设置将不会生效,无论如何它会很讨厌。
还是悖论?
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();
}