トップ回答者
BitmapImageの検証について

質問
-
JPEG データの入ったストリームデータを Image コントロールへ表示させる為に,Converter で
ストリームを BitmapImage へ変換 (StreamSourceプロパティで設定) して Image の Source へ
バインディング といった事を考えています.
ところが,この JPEG データが信用ならない (中身が壊れたデータをよこす事がある) ので BitmapImage へ
設定した後,EndInit() を呼ぶと NotSupportedExceptoin を出すのですが,この辺りの検証 (チェック) を
うまい事行う方法って無いものでしょうか?
回答
-
正当かどうか途中まで読み進めたとして、結局正当なファイルならその読み進めた分もデコーダが有効に使えるわけですから、ロード前に検証するというのは意義が薄いと思います。ストリームからのロード・画像のデコードに比べれば例外送出のコストなど大したことはないでしょう。
また Stream の場合シーク不可能な可能性もあるわけで、そうしたときどうするかという判断も必要になってきます。
少なくとも System.Windows.Media.Imaging 名前空間内にそういう手段を提供するものは見あたりません(見落としがあるかも知れませんけど)。- 回答としてマーク フェイカー 2010年2月28日 6:30
すべての返信
-
現在は,中身がまともな JPEG かどうか分からない Stream を一旦 StreamSource へ設定した後,EndInit()を
呼んで例外が出た後でしかデータがおかしいと分からないのですが,これを例外を出さずに不正なデータかどうか
分からないかなぁ...,と思いまして.
StreamSource へ設定する前,或いは設定した後 EndInit() を呼ぶまでの間に不正なデータかどうか検証できれば
例外も吐かずに済むかと思いました.
- 例外が出た事によって不正なデータと判断する
- 例外が出る前に何らかの検証を行って不正なデータと判断する
のどちらがいいのか迷っておりまして,また後者の方法を取るとしてどういった方法があるのか,と疑問に思いまして
質問させて頂きました.
判断の手助けとなるお知恵を拝借できれば幸いです. -
正当かどうか途中まで読み進めたとして、結局正当なファイルならその読み進めた分もデコーダが有効に使えるわけですから、ロード前に検証するというのは意義が薄いと思います。ストリームからのロード・画像のデコードに比べれば例外送出のコストなど大したことはないでしょう。
また Stream の場合シーク不可能な可能性もあるわけで、そうしたときどうするかという判断も必要になってきます。
少なくとも System.Windows.Media.Imaging 名前空間内にそういう手段を提供するものは見あたりません(見落としがあるかも知れませんけど)。- 回答としてマーク フェイカー 2010年2月28日 6:30