PictureBox 画像を変更するときにファイル アクセスを維持する
デスクトップ アプリケーションで、新しい Bitmap() コンストラクターを使用して PictureBox の画像を変更すると、元の画像ファイルがすでに使用されている場合、ファイル アクセス エラーが発生する可能性があります。この問題は、PictureBox が初期ファイルへの参照を保持しており、新しい画像が読み込まれるときにファイルにアクセスできない場合に発生します。
この問題を解決するメモリに優しい方法は、File.ReadAllBytes() を使用して画像を MemoryStream にロードし、次に Image.FromStream() を使用して新しい画像を作成することです。こうすることで、元のファイルのロックが解除され、ファイル アクセス違反なく PictureBox に新しい画像を表示できるようになります。
以下は変更されたコード例です:
<code class="language-c#">public static Image FromFile(string path) { byte[] bytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(bytes)) { Image img = Image.FromStream(ms); return img; } } pbAvatar.Image = FromFile(filePath);</code>
この方法は、ファイル アクセスの問題を解決するだけでなく、パフォーマンスも向上します。テストの結果、この手法を使用した画像の読み込みには画像あたり約 0.26 ミリ秒かかるのに対し、ビットマップからのコピーには画像あたり約 0.50 ミリ秒かかることがわかりました。バイト配列のメモリ使用量が小さくなり、単一のイメージ作成操作が効率化に貢献します。
生成された画像が Bitmap オブジェクトである必要がある場合は、(Bitmap)Image.FromStream(ms) を使用して返された画像を変換できることに注意してください。 リソースが正しくリリースされるようにするために、using
ステートメントを使用して MemoryStream
を管理します。
以上がPictureBox 画像更新時のファイル アクセス エラーを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。