我的问题如下: 我有一个计时器,每1毫秒我想加载一个图像,并以赢取形式显示在图片框中 第一个图像非常精细,但从某些角度来看,图像开始加载很多。 你能告诉我如何解决这个问题吗?
关心并感谢您的时间:)
private string path = "";
private int index = 0;
private void fileSourceToolStripMenuItem_Click(object sender, EventArgs e)
{
if (ofd.ShowDialog() == DialogResult.OK)
{
string fullPath = ofd.FileName;
string fileName = ofd.SafeFileName;
path = fullPath.Replace(fileName, "");
MessageBox.Show("Path for file source has been selected");
}
}
private const string IMAGENAME = "TestImage";
Bitmap b;
private void timer_Tick(object sender, EventArgs e)
{
try
{
string currentImage = IMAGENAME + index.ToString() + ".bmp";
index++;
b = new Bitmap(path + "\\" + currentImage);
pb.SizeMode = PictureBoxSizeMode.StretchImage;
pb.Image = b;
}
catch { };
}
private void button1_Click(object sender, EventArgs e)
{
timer.Start();
}
private void button2_Click(object sender, EventArgs e)
{
timer.Stop();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
string currentImage = IMAGENAME + index.ToString() + ".bmp";
index += 1;
Bitmap b = new Bitmap(path + "\\" + currentImage);
pb.Image = b;
}
catch { };
}
private void button4_Click(object sender, EventArgs e)
{
try
{
index -= 1;
string currentImage = IMAGENAME + index.ToString() + ".bmp";
Bitmap b = new Bitmap(path + "\\" + currentImage);
pb.Image = b;
}
catch { };
}
答案 0 :(得分:0)
首先使用DoubleBuffered属性。
答案 1 :(得分:0)
GDI +非常慢,即使使用双缓冲,它仍然很慢。 我建议你找一个替代品,因为没有办法解决“闪烁”。
然而,有一件事,你实际上在tick手柄中加载图像的方式是非常麻烦的。
我建议您将所有必需图像的字节加载到某种类型的集合中,例如。数组。 然后只需从图像字节创建位图。
此外,您甚至没有处理当前图像,在为下一张图像分配新内存之前,您应该这样做。