0

編集:背景情報を取得するには、このプログラムに関する私の古い投稿も参照してくださいC# - 他のプログラムで編集しながらリアルタイムで BackgroundImage を更新する

画像ビューアーを作成しました。選択した画像を「フォーム」の背景として表示します。

プログラムを閉じるまで、読み込んだすべての画像は、Photoshop や GIMP などの画像操作アプリなど、他のアプリケーションで上書きされないようにブロックされます。

私のコードは非常に単純です:

public partial class Form1:Form {
    private string FileName;

    public Form1() {
        InitializeComponent();

        FileName = "";
        openFileDialog1.Filter = "PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg";
    }

    private void button1_Click( object sender, EventArgs e ) {
        if(openFileDialog1.ShowDialog() == DialogResult.OK) {
            button2.Enabled = true;
            FileName = openFileDialog1.FileName;
            setImage();
        }
    }

    private void button2_Click( object sender, EventArgs e ) {
        setImage();
    }

    private void setImage() {
        Stream str=new FileStream( FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
        Bitmap tempImg= new Bitmap( Bitmap.FromStream(str) );
        str.Close();
        using( tempImg = new Bitmap(FileName) ) {
            Rectangle rect = new Rectangle(0, 0, tempImg.Width, tempImg.Height);
            PixelFormat format = tempImg.PixelFormat;

            this.BackgroundImage = new Bitmap(FileName).Clone(rect, format);
        }
        openFileDialog1.FileName = "";
    }
}

この問題を解決するにはどうすればよいですか?

アップデート :

このコードは私には機能しません。

    private void setImage() {
        // using (FileStream stream = new FileStream("MyImage.png", FileMode.Open, FileAccess.Read))
        //var image = Image.FromStream(stream); 
        using( new FileStream( FileName, FileMode.Open, FileAccess.Read, FileShare.Read) ) {
            Stream str=new FileStream( FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
            Bitmap tempImg= new Bitmap( Bitmap.FromStream(str) );
            str.Close();
            tempImg = new Bitmap(FileName);
            Rectangle rect = new Rectangle(0, 0, tempImg.Width, tempImg.Height);
            PixelFormat format = tempImg.PixelFormat;

            this.BackgroundImage = new Bitmap(FileName).Clone(rect, format);
        }
        openFileDialog1.FileName = "";
    }
4

1 に答える 1

0
using (FileStream stream = new FileStream("MyImage.png", FileMode.Open, FileAccess.Read))
{
   var image = Image.FromStream(stream);

    // Do something with the image.
}

// The image will not be locked here.
于 2012-09-16T23:49:22.860 に答える