以编程方式更改表单壁纸的不同方式

时间:2013-02-09 13:56:34

标签: c# winforms wallpaper

我需要以编程方式通过用户选择的jpg文件分配表单的壁纸。 我使用新的Bitmap执行此操作,但如果我这样做,jpeg文件将变为只读。

可以在RAM jpeg文件中加载并将其用于壁纸吗?或者将jpeg文件添加到项目资源并使用资源?

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

最好的问候。

2 个答案:

答案 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。