2

私はデスクトップアプリケーションのユーティリティで働いており、いくつかのグラフィックス作業に関連しています。

小さなサムネイルとフルサイズのビットマップをロードする必要があります。このコードを使用してこれを実行しています。

 FileStream fs = new FileStream("myphoto.jpg", FileMode.Open);
 Image imgPhoto = Image.FromStream(fs);
 fs.Close();
 PictureBox p = new PictureBox();
 p.Name = "p1";
 p.Image = imgPhoto;
 flowPanel.Controls.Add(p);
 //---- 
 FileStream fs = new FileStream("myphoto_thumb.jpg", FileMode.Open);
 Image img = Image.FromStream(fs);
 fs.Close();
 Button b_thumb = new Button();
 b_thumb.Name = "thumb1";
 b_thumb.BackgroundImage = img;
 flowBottom.Controls.Add(b_thumb);

この後、この画像ボックスの画像にいくつかの効果を追加する必要があります。画像ボックスのメイン(大きな)画像にいくつかの効果を追加すると、ボタンの背景画像にも同じ効果が追加されます。このサムネイル画像を既存のサムネイル画像に保存すると保存中ですが、画像ボックスの大きな画像を既存のファイル「myphoto.jpg」に保存すると、ファイルが別のプロセスで使用されているなどのエラーが発生します。

//---- Add some Effects to image of Picturebox ---- //
PictureBox tempPic = flowPanel.Controls["p1"];
tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);

私はグーグルとstackoverflowで多くの解決策を見つけましたが、役に立ちませんでした。良い解決策があれば、plzが役立ちます。非常に単純かもしれませんが、私は10時間以上試しましたが、失敗しました。

4

2 に答える 2

1

開いた FileStream を閉じません。私は常にこの種のものをusing構造でラップするので、自動的に破壊されて閉じます:

using (FileStream fs = new FileStream("myphoto.jpg", FileMode.Open)) {
  // Do stuff
}

tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);
于 2012-12-19T22:05:43.677 に答える
0

ファイルストリームを読み取り専用に設定してみてください。

fs = New System.IO.FileStream("myphoto.jpg", 
     IO.FileMode.Open, IO.FileAccess.Read)

これは Microsoft の推奨事項であり、Image.FromFile を試してファイルをロックするユーザーを対象としています: http://support.microsoft.com/kb/309482

于 2012-12-19T22:23:35.060 に答える