【问题标题】:Different way for programmatically change Form wallpaper以编程方式更改表格壁纸的不同方式
【发布时间】:2013-02-09 13:56:34
【问题描述】:

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

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

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

最好的问候。

【问题讨论】:

    标签: c# winforms wallpaper


    【解决方案1】:

    使用MemoryStream

    MemoryStream ms = new MemoryStream(File.ReadAllBytes(pathToImageFile));
    this.BackgroundImage = Image.FromStream(ms); ;
    

    【讨论】:

      【解决方案2】:

      避免 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。

      【讨论】:

      • 这个方法和以前的方法有什么区别?
      • 两个大的。首先,位图保证与视频适配器的像素格式兼容,因此可以快速渲染。其次,处置非托管资源要容易得多。当您使用 MemoryStream 时,您必须保留它,直到不再使用位图。
      猜你喜欢
      • 2017-03-03
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多