我正在制作像桌面一样的应用程序。我正在尝试为桌面设置背景图像,但我收到了错误。
以下是选择背景图片的按钮
private void button1_Click_2(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
pictureBox1.Image = bit;
pictureBox1.Image.Save(@"frame.jpeg", ImageFormat.Jpeg);
}
}
这就是我关闭并重新打开应用程序时保存它的方法(On Form1 Void)
if (File.Exists(@"frame.jpeg"))
pictureBox1.Image = Image.FromFile(@"frame.jpeg");
else
pictureBox1.BackColor = Color.Black; //Blank
我在行pictureBox1.Image.Save(@"frame_backup.jpeg", ImageFormat.Jpeg);
上收到错误,表示图片正在使用中。
我尝试PictureBox1.Image = null;
来清除图片中的图像,但仍然有错误!
答案 0 :(得分:0)
它仍然在内存中,将图片框设置为什么都不会解决任何问题,因为它不会从内存中处理它。为此,您可以使用.Dispose()方法。
...所以
bit.Dispose();
答案 1 :(得分:0)
正如其他人已经说过的那样,当你完成它时你应该处理BitMap
对象。
处理此BitMap对象的另一种更简洁的方法是在using
块中包含BitMap实现IDisposable
(通过其基类Image
)。
using(Bitmap bit = new Bitmap(open.FileName))
{
pictureBox1.Image = bit;
pictureBox1.Image.Save(@"frame.jpeg", ImageFormat.Jpeg);
}
<强> EDITED 强>
Bitmap bit = new Bitmap(open.FileName);
Bitmap bitNew = new Bitmap(bit);
bit.Dispose();
pictureBox1.Image = bmpNew;
pictureBox1.Image.Save(@"frame.jpeg", ImageFormat.Jpeg);
bitNew.Dispose();
答案 2 :(得分:0)
在构建代码时,我认为您有兴趣打开图片,比如PNG
格式并保存为JPEG
格式。你应该这样试试:
这个答案背后的想法是使用using
块,它有助于在资源不再使用时立即处置,并通过从所有者处获取资源来释放已打开的资源(请参阅ReleaseInUseResource`函数)。 / p>
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
ReleaseInUseResource();
using (Bitmap bmp = new Bitmap(open.FileName))
{
bmp.Save(@"frame.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
pictureBox1.Image = Bitmap.FromFile(@"frame.jpeg");
}
}
private void button2_Click(object sender, EventArgs e)
{
if (System.IO.File.Exists(@"frame.jpeg"))
{
ReleaseInUseResource();
pictureBox1.Image = new Bitmap(@"frame.jpeg");
}
else
{
pictureBox1.BackColor = Color.Black; //Blank
}
}
private void ReleaseInUseResource()
{
Image img = pictureBox1.Image; // Get image used to display in picture box.
if (img != null) img.Dispose(); // release it first if there is an image opened.
}
希望它有所帮助!