我需要以编程方式通过用户选择的jpg文件分配表单的壁纸。 我使用新的Bitmap执行此操作,但如果我这样做,jpeg文件将变为只读。
可以在RAM jpeg文件中加载并将其用于壁纸吗?或者将jpeg文件添加到项目资源并使用资源?
对不起我非常糟糕的英语:(
最好的问候。
答案 0 :(得分:2)
使用MemoryStream
:
MemoryStream ms = new MemoryStream(File.ReadAllBytes(pathToImageFile));
this.BackgroundImage = Image.FromStream(ms); ;
答案 1 :(得分:0)
避免GDI +放在文件上的文件锁定的最简单方法是使用Bitmap(Image)构造函数制作位图的深层副本。像这样:
private void SetWallpaperButton_Click(object sender, EventArgs e) {
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
using (var img = Image.FromFile(openFileDialog1.FileName)) {
if (this.BackgroundImage != null) this.BackgroundImage.Dispose();
this.BackgroundImage = new Bitmap(img);
}
}
}
using 语句可确保释放文件锁。并且Dispose()调用可以确保旧位图快速销毁,这很重要,因为在32位操作系统上,您经常使用大位图来处理OOM。