0

我需要通过用户选择的 jpg 文件以编程方式分配表单的壁纸。我已经用新的位图做到了这一点,但如果我这样做,jpeg 文件将变为只读。

是否可以加载 RAM jpeg 文件并将其用于墙纸?或者将jpeg文件添加到项目资源并使用资源?

对不起我的英语非常糟糕:(

最好的祝福。

4

2 回答 2

2

使用MemoryStream

MemoryStream ms = new MemoryStream(File.ReadAllBytes(pathToImageFile));
this.BackgroundImage = Image.FromStream(ms); ;
于 2013-02-09T14:10:45.230 回答
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。

于 2013-02-09T15:03:58.313 回答