2007年5月25日金曜日

.NET 画像表示いろいろ

画像系はあまり使うことがないので、すぐに忘れてしまいます。

ファイルからバイト配列を取得する。
Dim bytes() As Byte 
Using fs As New System.IO.FileStream("パス", IO.FileMode.Open, IO.FileAccess.Read)
Using br As New System.IO.BinaryReader(fs)
bytes = br.ReadBytes(CInt(fs.Length))
br.Close()
End Using
fs.Close()
End Using


ファイルからImageオブジェクトを取得する。
Dim image As System.Drawing.Image 
Using fs As New System.IO.FileStream("パス", System.IO.FileMode.Open)
image  = System.Drawing.Image.FromStream(fs)
fs.Close()
End Using


バイト配列からImageオブジェクトを取得する。
Dim bytes() as Byte = 画像のバイト配列
Dim image As System.Drawing.Image 
Usind ms As New System.IO.MemoryStream(bytes)
image = System.Drawing.Image.FromStream(ms)
ms.Close()
End Using



ピクチャーボックスに表示された画像のバイト配列を取得する。
Using ms As New System.IO.MemoryStream()
Me.PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
Dim bytes(Cint(ms.Length)) As Byte
ms.Position = 0
ms.Read(bytes, 0, Convert.ToInt32(ms.Length))
ms.Close()
End Using


上記の「ファイルからImageオブジェクトを取得する」や「バイト配列からImageオブジェクトを取得する」で取得したImageオブジェクトをPictureBoxのImageプロパティにそのまま設定すると、「ピクチャーボックスに表示された画像のバイト配列を取得する」のImage.SaveでGDI+汎用エラーになってしまいます。

この問題を回避するには、取得したImageオブジェクトからBitmapオブジェクトを作成してPictureBoxのImageプロパティに設定します。

Me.PictureBox1.Image = New System.Drawing.Bitmap(取得したImageオブジェクト)

0 件のコメント: