我需要通过用户选择的 jpg 文件以编程方式分配表单的壁纸。我已经用新的位图做到了这一点,但如果我这样做,jpeg 文件将变为只读。
是否可以加载 RAM jpeg 文件并将其用于墙纸?或者将jpeg文件添加到项目资源并使用资源?
对不起我的英语非常糟糕:(
最好的祝福。
使用MemoryStream
:
MemoryStream ms = new MemoryStream(File.ReadAllBytes(pathToImageFile));
this.BackgroundImage = Image.FromStream(ms); ;
避免 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。