タイトル : 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 メソッドを使ったりするのも手です。 |