0

我有一个图片框,可以在其中绘制位图。

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

我希望它在飞行中:

我使用具有 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();
}
4

0 回答 0