DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルから読み込んだBitmapイメージの保存

環境/言語:[Xp, C#, .NET Framework 1.0]
分類:[.NET]

現在、フォト・ビュワーというか、アルバムソフトのようなものを作ってるのですが、画像の保存がうまくいきません。

具体的には、Listというクラスの中の、
photoItemsというArrayListのコレクションに
photoクラスという型のオブジェクトを持ち、
その中のphotoImageというBitmap変数に格納したイメージを保存したいのですが、
上手くいきません。

(photoクラスのソースは以下のようなものです)
public class photo
{
[System.Xml.Serialization.XmlIgnoreAttribute]
public Bitmap photoImage = null;
public string photoName = null;
public string photoMessage = null;
}

画像をファイルから開く時にロックしてるのでは?と思い、
もう一度ここのTipsを参照してみましたが、

int i = this.ScrollBarNumber.Value-1;

FileStream fs = new FileStream (this.openFileDialog1.FileName,FileMode.Open,FileAccess.Read,FileShare.Read);
((photo)this.List.photoItems[i]).photoImage = ((Bitmap)Image.FromStream(fs));
fs.Close();

…のようにしているので、ロックではないように思われます。
保存に関する部分のソースは、
ImageFormat format = ImageFormat.Jpeg;
Bitmap tempBMP = null;

for(int i=0 ; i < this.List.photoItems.Count ; i++)
{
string BMPFile = fileGRAPH+i+".jpg";
tempBMP = ((photo)this.List.photoItems[i]).photoImage;
tempBMP.Save(BMPFile,format);
}
このようなものです。fileGRAPHというのは、
stringで、画像ファイルの基幹ファイル名です。

断片的なソースで申し訳ないのですが、
何か考えられる原因があれば、
教えていただけないでしょうか?
申し訳ありません。
エラーの内容を記し忘れてました(恥)。

'System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。

追加情報 : GDI+ で一般的なエラーが発生しました。

このようなエラーが、
tempBMP.Save(BMPFile,format);の後に表示されます。

よろしくお願いします。
■No2355に返信(nissa.comさんの記事)
> 画像をファイルから開く時にロックしてるのでは?と思い、
>
>…のようにしているので、ロックではないように思われます。

ということは、読み込んだファイルを上書きで保存しているということでしょうか?自分がロックしてないとしても、もしかしたら別のアプリがロックしているということも考えられますので、とりあえずファイルを削除してから保存するようにして、ファイルが削除できるか確かめてみてはいかがでしょうか?
管理人さまからの直接の返信、ありがとうございました。

返信の内容にあった通り、手動でファイルを削除してから保存するという方法で、
ファイルの削除が可能かどうかを試しましたが、
ファイルは削除できるのに、同様のエラーメッセージが表示されるので、
恐らくはここに掲載された部分以外のコードでなんらかの間違いを犯していると考えました。

色々試行錯誤の末、
Bitmapイメージを一度、PictureBoxのイメージとして設定し、
PictureBox.Image.Save( "....." );
のようにしてPictureBoxのイメージを経由して画像を保存するという、
多少やくざな手を思いつき、実行したところ、
保存が可能になりました。

本当にお手を煩わせてしまって申し訳ありませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板