Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

imageからbyteの変換方法

画像ファイル(jpgやbmp)からByte配列に格納する事は可能なのですが image型をbyte型に格納する方法が解りません。 ファイルのときはFileStreamとBinaryReaderを使用して BinaryReader.ReadBytesで行っていたのですが 同じような間隔で変換する事は可能なのでしょうか? ご教授お願いいたします。 プログラムはVB 2005を使用しております。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

訂正です。 >Case "BMP" >Case "JPG" にピリオドをつけておりませんでした Case ".BMP" Case ".JPG" それと追記です。 完全に等しくなるとは保障できません。 画像の読込みイメージが、画質をハイクオリティ状態で読み込まれている画像と、未指定の画像では、できあがるイメージも、情報数が全く異なります。 http://dobon.net/vb/dotnet/graphics/encoderparameters.html また標準の読込みであっても、.NETで作成したツールで保存した画像ではなく、別のアプリケーションで作成された画像であれば、それまた等しくなる保障はありません。 なので、サンプルの「l_byt1」と「l_byt2」は、必ず等しくなるというわけではありませんので、その点を踏まえて参考にしてください。 「イメージのバイト配列化」のサンプルとしてだけと捕らえてくださいね。 [わたしは.NET2002を利用しております。]

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

[System.IO.MemoryStream] を利用し、ファイルストリーム同様の処理で、バイト配列化が可能です。 ただ、「Image」になってしまうと、下のファイルの形式の情報がなくなってしまうので、MemoryStreamに書き込む形式を指定する必要があります。 Sub Main()   Const DEF_FILE As String = "C:\エロ画像.JPG"   'ファイルストリームからバイト配列を取得するテスト   Dim l_byt1() As Byte = Test_BinaryReader(DEF_FILE)   '一度イメージ化し、それをメモリストリームからバイト配列を取得するテスト   Dim l_byt2() As Byte = Test_Image(DEF_FILE) End Sub Function Test_BinaryReader(ByVal p_strファイル As String) As Byte()   Dim l_bytRet() As Byte   'ファイルストリームを取得する   Dim l_fsm As New IO.FileStream(p_strファイル, IO.FileMode.Open, IO.FileAccess.Read)   '-------------------------------------------   '以下より本題   '-------------------------------------------   'バイト配列変換   l_bytRet = StreamToBytes(l_fsm)   'ファイルストリームを閉じる   l_fsm.Close()   'バイト配列の返却   Return l_bytRet End Function Function Test_Image(ByVal p_strファイル As String) As Byte()   Dim l_bytRet() As Byte   'イメージを取得する   Dim l_img As Image = CType(New Bitmap(p_strファイル), Image)   '-------------------------------------------   '以下より本題   '-------------------------------------------   'メモリストリームのインスタンスを生成   Dim l_memストリーム As New IO.MemoryStream()   Dim l_形式 As Drawing.Imaging.ImageFormat   'メモリストリームに書き込む形式を判定   Select Case IO.Path.GetExtension(p_strファイル).ToUpper     Case "BMP"       l_形式 = Imaging.ImageFormat.Bmp     Case "JPG"       l_形式 = Imaging.ImageFormat.Jpeg     Case Else       MsgBox("わからん")       Return l_bytRet   End Select   'メモリストリームに書き込む   l_img.Save(l_memストリーム, l_形式)   'バイト配列変換   l_bytRet = StreamToBytes(l_memストリーム)   Return l_bytRet End Function 'ストリームからバイト配列への変換 Function StreamToBytes(ByRef p_sm As IO.Stream) As Byte()   '読込み位置を先頭にする   p_sm.Position = 0   '一気に読み込む   Dim l_br As New IO.BinaryReader(p_sm)   Dim l_bytRet() As Byte = l_br.ReadBytes(p_sm.Length)   l_br.Close()   'バイト配列の返却   Return l_bytRet End Function

noname#17894
質問者

お礼

回答ありがとうございます。 私も色々調べてたのですが、1050YENさんの書いてくれたソースの様に Image型に変換する際には形式の情報を付与する必要があるみたいですね

すると、全ての回答が全文表示されます。

関連するQ&A