tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#】「GDI+ で汎用エラーが発生しました。」ってなんだよ

ITunEsTooLってC#アプリをノリで作った。

能力が無い癖にノリで作ったから悲惨。

どう変更していったか以下の記載。


・処理

ダウンロードした画像が10K以下だったら画像を破棄。

10K以上だったら取得。
で画像を確認してもらってオッケイだったら保存って流れ(ココは面倒だから書かない。
要はそこそこの画像を確認して納得したら保存的な流れ。

・最初

WebClient wc = new WebClient();

wc.DownloadFile(URL, Filename);

FileInfo fi = new FileInfo(Filename);

if (fi.Length < 10000)
{
//ココでファイル削除
}

wc.Dispose();

消すかも知れない画像をファイルに落としてる時点でクソ

・後

WebClient wc = new WebClient();
byte[] pic = wc.DownloadData(URL);

if (pic.Length > 10000)
{
 using (MemoryStream st = new MemoryStream(pic))
 try{
  using (Image imgSrc = Image.FromStream(st))
  {
  Image IMG = new Bitmap(imgSrc);
  }
 }
 catch (ArgumentException)
 {
  //違うURL検索
 }
 //画像保存(IMG.Save)やらなんやら
}
wc.Dispose();

ArgumentExceptionはたまにDownloadDataが機能しないときがあって
例外(使用されたパラメーターが有効ではありません。)が発生するからその対処として。

FromStreamしたImageでSaveするとの例外(GDI+ で汎用エラーが発生しました。)が
発生する場合がある。

対処法がココに書いてあって
別のBitmapに対処するとオッケイみたい。

ってかURL上の画像のファイルサイズって取得出来んのかな?