ユーザーが選択したjpgファイルによってフォームの壁紙をプログラムで割り当てる必要があります。新しいビットマップでこれを行いましたが、そうするとjpegファイルが読み取り専用になります。
RAMにjpegファイルを読み込んで壁紙にすることは可能ですか?または、プロジェクト リソースに jpeg ファイルを追加し、リソースを使用しますか?
私の非常に下手な英語で申し訳ありません:(
よろしくお願いします。
を使用しMemoryStream
ます:
MemoryStream ms = new MemoryStream(File.ReadAllBytes(pathToImageFile));
this.BackgroundImage = Image.FromStream(ms); ;
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 を回避することが多いため、重要です。