|
■No42365 (Hongliang さん) に返信
> 直接 FileStream から Image を作るのではなく、一旦 MemoryStream に中身をコピーしそれを使って Image.FromStream で作るようにしましょう。
返信ありがとうございます。
試してみましたが、やはり「GDI+ で汎用エラーが発生しました。」
のエラーが発生してしまいます。
MemoryStreamを初めてで、この使い方であっているかわかりませんが、
データはコピーされているようです。
元々のアニメGIFに問題があるとかでしょうか?
----------------------
FileStream sr = null;
MemoryStream ms = null;
// アイコンファイル名
string iconName = this.ImgBaseName + ".bmp";
while (true)
{
// アイコンファイルへのフルパスを作成
string IconFullPath = Path.Combine(System.Windows.Forms.Application.StartupPath, iconName);
try
{
// 各種イメージファイルを読み込む
sr = new FileStream(IconFullPath, FileMode.Open, FileAccess.Read);
// MemoryStreamを生成しファイルの内容をコピー
ms = new MemoryStream();
ms.SetLength(sr.Length);
sr.Read(ms.GetBuffer(), 0, (int)sr.Length);
ms.Flush();
this.picImg.Image = Image.FromStream(ms);
iconName = string.Empty;
}
catch (FileNotFoundException)
{
// bmp→gif→jpgの順番で検索する。
if (iconName.Contains(".jpg"))
{
iconName = string.Empty;
}
else if (iconName.Contains(".bmp"))
{
iconName = this.ImgBaseName + ".gif";
}
else if (iconName.Contains(".gif"))
{
iconName = this.ImgBaseName + ".jpg";
}
}
catch (ArgumentException)
{
// 何もしない。
}
finally
{
//ストリームを閉じる
if (ms != null) ms.Close();
if (sr != null) sr.Close();
}
// アイコン名が空でない場合は続行
if (iconName.Length != 0)
{
continue;
}
break;
}
----------------
|