tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: バイト配列の表示
投稿日: 2010/04/02(Fri) 09:32
投稿者魔界の仮面弁士
質問時には毎回、環境を明記するようにしてください。
内容によっては、それによって答えが変わってくる事もあります。

たとえば VB.NET 2003 と VB 2005 では、言語機能に大きな差異がありますし、
.NET Framework 1.0 と .NET Framework 4 とでは、使用できるクラスも異なります。


> jpg画像をバイト配列として読み取って、表示させたいのですが
> コンパイラに怒られまくりでうまくいきません。
この場合、クリアすべき課題は 3 点あります。

(1) ファイルを、バイト配列変数に読み込ませる処理。
(2) TextBox へ表示させるために、(1)で読み込んだデータを文字列表現に変換する処理。
(3) PictureBox へ表示させるために、(1)で読み込んだデータを Image クラスに読み込ませる処理。

なお、これには別解もあって、
 (3') (バイト配列からではなく)画像ファイルを PictureBox へ表示させる。
という実装も考えられます。


> 書いたコードは以下です。

まず (1) については、System.IO.File.ReadAllBytes(String) を使った方が手っ取り早いでしょう。
もちろん、BinaryReader + FileStream を使っても良いのですが、その場合、
ファイルを開いた後に、閉じる処理も必要となります(提示されたコードには閉じる処理が抜けています)。
# なお、System.IO.File.ReadAllBytes を使うには、.NET 2.0 (VB2005)以降が必要です。


次に (2) ですが、これはどのように表示させたいのかによって異なります。

画像をテキストアートで表現したいという意味だとすれば、コードは複雑化しますが、
単に、"FF-D8-FF-E0-……" のような 16 進数表現を行いたいだけであれば、
System.BitConverter.ToString(Byte())を使うのが簡単でしょう。


最後の (3) については、System.Drawing.Image.FromStream(Stream) を使えます。
この場合、必要なデータはバイト配列ではなくストリームとなりますので、
 (A案) バイト配列を MemoryStream に転記して、それを Image.FromStream で読み込む。
 (B案) 元ファイルをバイト配列に読み込ませず、FileStream を Image.FromStream に渡す。
などとします。ファイルを開きっぱなしにしないためにも、A案の方が良いと思います。


なお (3') の場合は、PictureBox1.LoadAsync("C:\test.jpg") と記述できます。
LoadAsync メソッドの代わりに Load メソッドを使ったりするのも手です。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。