- PR -

ImageConverterでバイト配列を取得しようとするとエラー(ASP.NET、C#2.0)

1
投稿者投稿内容
由加
常連さん
会議室デビュー日: 2008/04/02
投稿数: 34
投稿日時: 2008-04-14 17:31
こんにちは。
ASP.NETで、画像ファイルを動的に出力しようとしています。
テストとして、
コード:
FileStream objStream;

objStream = new FileStream("c:/aaa.jpg", FileMode.Open, FileAccess.Read);
System.Drawing.Image objImage = System.Drawing.Image.FromStream(objStream);
objStream.Close();
ImageConverter objConverter = new ImageConverter();
byte[] bytImg = (byte[])objConverter.ConvertTo(objImage, typeof(byte[]));
Response.ContentType = "image/jpeg";
Response.Flush();
Response.BinaryWrite(bytImg);
Response.End();


のコード書きました。
参考にしたのは、
http://www.atmarkit.co.jp/fdotnet/dotnettips/603byteimage/byteimage.html
です。
ところが、
コード:
byte[] bytImg = (byte[])objConverter.ConvertTo(objImage, typeof(byte[]));


のところで、「GDI+で汎用エラーが出ました」とのエラー表示となってしまいます。
どうしてエラーとなってしまうのか、私には理解がでません。
どなたか、ご教授をお願いします。
また、C#は今月になって初めて使ったのですが、
FileStreamのパスで「c:\aaa.jpg」のように、「\(円マーク)」マークが入っていると、無効な文字としてエラーとなってしまいます。
「\(円マーク)」の代わりに「/(スラッシュ)」を入れると、エラーとならなくなるのですが、これは正しいのでしょうか?

よろしくお願いします。





[ メッセージ編集済み 編集者: 由加 編集日時 2008-04-14 17:32 ]
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-14 17:43
> FileStreamのパスで「c:\aaa.jpg」のように、「\(円マーク)」マークが入っていると、無効な文字としてエラーとなってしまいます。


C#の場合、"\" はエスケープ文字に使用される特別な文字 (例えば "\t" でタブ文字) なので、文字列の中で "\" を使う場合、"\\" と記述します。
つまり、"c:\aaa.jpg" は "c:\\aaa.jpg" と記述します。
また、@"c:\aaa.jpg" という書き方も OK です。このように @ を付けると、"\" が普通に記述できます。

[参考]
文字列の使用 (C# プログラミング ガイド)


# 最初の行(コンパイル時のエラーですよね?)を削除しました。
# 実行時のエラーですね。
_________________
C#と諸々

[ メッセージ編集済み 編集者: よこけん 編集日時 2008-04-14 17:48 ]
由加
常連さん
会議室デビュー日: 2008/04/02
投稿数: 34
投稿日時: 2008-04-14 17:47
ありがとうございます。
早速試して、「\」マークの件は解決しました。
掲示板に書き込みをすると、¥マークが\になってしまうので、
なかなか、伝えにくいですね。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-04-14 17:50
ストリームから Image オブジェクトを作成した場合、元となるストリームが Close されてれば保存できなかったと思います。
FileStream の Close を遅らせるなり、一旦 MemoryStream に読み込ませるなりする必要があるでしょう。
由加
常連さん
会議室デビュー日: 2008/04/02
投稿数: 34
投稿日時: 2008-04-14 17:55
ありがとうございます。
Closeを遅らせたら、解決しました。
ImageConverterで検索していて・・・。
まるっきり、検討違いのところに答えがありました。
本当に、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)