ここんところC#付けの毎日です。
とそんな中、C#のプログラム中に何気ない所で詰まってしまったので、メモしてみます。
やりたいことは、
画像ファイルをダイアログからか、ドラッグ&ドロップで読み込み、コントロール(今回はボタンですが)に表示。
保存ボタンで特定の固定のファイル名で保存する。
というこれだけのことです。で、こんな簡単な所で2点詰まった…。
1点目の解決方法は、以下のとおり。
ImageクラスのFromFileメソッドを用いて画像を読み込むと、プログラム終了するまでファイルロックされたままになる。
というのが有るそうで、早速FromFile から FromStreamで読み込むように変更。
PictureBox に画像を表示する
http://jeanne.wankuma.com/tips/image/picturebox.html
「プログラムが終了するまで、ファイルがロックされたままになります」
とあちこちのC#入門サイトに書いてありますが、私の開発環境ではIDEも終了するまでファイルがロックされているようでした。
それを裏付ける(?)記述が以下にありました。
[PRB] PictureBox Image プロパティにファイルを設定すると、イメージ ファイルがロックさる
http://support.microsoft.com/default.aspx?scid=kb;ja;311754
てなかんじで、ふむふむ、ロックされなくなったぞ。
よし、できた!
…と、安心したのもつかの間、今度は、Image.Saveとすると、2点目の問題発生。
「GDI+ で一般的なエラーが発生しました」orz..
色々調べてみても、何が原因かわからず途方にくれていたら、やはり同じことで詰まってる人はいるということのようです。
以下の所で解決策が見つかりました。
ImageクラスのFileStreamで読み込んだ画像の保存
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15772&forum=7&6
こんな感じで解決でした。
ポイントは、FileStreamメソッドでBitmapとして読み込めばSave時もOKってことですかね。
あ、C#素人なんで、用語とか適当かも…。
とそんな中、C#のプログラム中に何気ない所で詰まってしまったので、メモしてみます。
やりたいことは、
画像ファイルをダイアログからか、ドラッグ&ドロップで読み込み、コントロール(今回はボタンですが)に表示。
保存ボタンで特定の固定のファイル名で保存する。
というこれだけのことです。で、こんな簡単な所で2点詰まった…。
- ImageクラスのFromFileメソッドを用いて画像を読み込むと、プログラム終了するまでファイルロックされたままになり、Image.Save時にファイルがロック(使用中)になり上書きできない。
- ImageクラスのFromStreamメソッドを用いて画像を読み込むと、ロックは解消されるが、Image.Save時に「GDI+ で一般的なエラーが発生しました」となり、保存できない。
1点目の解決方法は、以下のとおり。
ImageクラスのFromFileメソッドを用いて画像を読み込むと、プログラム終了するまでファイルロックされたままになる。
というのが有るそうで、早速FromFile から FromStreamで読み込むように変更。
PictureBox に画像を表示する
http://jeanne.wankuma.com/tips/image/picturebox.html
「プログラムが終了するまで、ファイルがロックされたままになります」
とあちこちのC#入門サイトに書いてありますが、私の開発環境ではIDEも終了するまでファイルがロックされているようでした。
それを裏付ける(?)記述が以下にありました。
[PRB] PictureBox Image プロパティにファイルを設定すると、イメージ ファイルがロックさる
http://support.microsoft.com/default.aspx?scid=kb;ja;311754
てなかんじで、ふむふむ、ロックされなくなったぞ。
よし、できた!
…と、安心したのもつかの間、今度は、Image.Saveとすると、2点目の問題発生。
「GDI+ で一般的なエラーが発生しました」orz..
色々調べてみても、何が原因かわからず途方にくれていたら、やはり同じことで詰まってる人はいるということのようです。
以下の所で解決策が見つかりました。
ImageクラスのFileStreamで読み込んだ画像の保存
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15772&forum=7&6
FileStream fs; fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read); Bitmap bmp = (Bitmap)System.Drawing.Bitmap.FromStream(fs); fs.Close(); pictureBox1.Image =new Bitmap(bmp); : pictureBox1.Image.Save(~);
こんな感じで解決でした。
ポイントは、FileStreamメソッドでBitmapとして読み込めばSave時もOKってことですかね。
あ、C#素人なんで、用語とか適当かも…。