C# / .NET 3.5、Windows フォーム。
ファイルから画像を表示するこの Windows フォームがあり、ユーザーがレコードを保存するたびに、このコードが実行されます。
string oldLoc = itemsBO.ImageLoc;
if (oldLoc != SystemSettings.NoImageLocation)
{
if (File.Exists(oldLoc))
{
try { File.Delete(oldLoc); }
catch (IOException ex)
{
MessageBox.Show("1 - " + ex.GetType().ToString() + " " + ex.Message);
}
}
}
string saveLoc = itemsBO.ImageSearchLoc + ".jpg";
if (File.Exists(saveLoc))
{
try { File.Delete(saveLoc); }
catch (IOException ex)
{
MessageBox.Show("2 - " + ex.GetType().ToString() + " " + ex.Message);
}
}
try
{
if (pictureBox2.Image != null)
pictureBox2.Image.Save(saveLoc, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (IOException ex)
{
MessageBox.Show("3 - " + ex.GetType().ToString() + " " + ex.Message);
}
質の悪い MessageBox メッセージは無視してください。ただし、各 Catch ステートメントでエラーが発生します。別のプロセスで使用されているため、「既存の」イメージを削除できません。ファイルが削除されていないため、同じパスにファイルが存在するため、保存できません。
これは、新しい画像を追加しようとしたときに Image を設定するコードです。
Image clipImage = Clipboard.GetImage();
if (tabControl2.SelectedTab == tabPage5)
{
pictureBox1.Image = clipImage;
itemsBO.IsDirtyImage = true;
}
else if (tabControl2.SelectedTab == tabPage6)
{
pictureBox2.Image = clipImage;
itemsBO.IsDirtyImage2 = true;
}
次に、フォームが画像を含む既存のレコードをロードするとき、これはそれを取得/表示するために使用されるコードです:
byte[] bits = File.ReadAllBytes(imgfil);
msImage = new MemoryStream(bits, 0, bits.Length);
if (tabControl2.SelectedTab == tabPage5)
pictureBox1.Image = Image.FromStream(msImage);
else if (tabControl2.SelectedTab == tabPage6)
pictureBox2.Image = Image.FromStream(msImage);
もちろん、imgfil は画像へのパスです。
どこから始めればよいかまったくわかりません...