画像データを抜き出して、pictureboxに描画したいのですが。 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 shu  (社会人)
投稿日時
2011/4/7 22:25:29
読み込むファイルはbmpとかjpegだったりしますか?
VBが対応している形式のふぁいるなら
Dim imgFile as Image = Image.FromFile(ファイル名)
で読み込むことが出来ます。
読み込めない形式だとすると
Bitmap.LockBits, Bitmap.UnLockBitsを使って
各ピクセルデータに読み込むと良いかと思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33131&forum=7
この辺が参考になるかと思います。
VBが対応している形式のふぁいるなら
Dim imgFile as Image = Image.FromFile(ファイル名)
で読み込むことが出来ます。
読み込めない形式だとすると
Bitmap.LockBits, Bitmap.UnLockBitsを使って
各ピクセルデータに読み込むと良いかと思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33131&forum=7
この辺が参考になるかと思います。
投稿者 シン  (社会人)
投稿日時
2011/4/7 19:09:31
画像ファイルをバイナリダンプして勉強しています。 VB2010を使用してます。
データの最初から少しずつ解析して、画像データまでたどり着く事が出来ました。
画像データを抜き出して、pictureboxに描画するのはどのようにしたらよいのでしょうか。
データなどよりすでに分かっている情報は、
image width : 512 , image height : 512 , 色深度は 16bitのハイカラー
画像データのアドレス : 0×A38~0×80A38
バイナリダンプで画像データは、"00 F8"が最初から最後まで並んでいます。
画像はビューワーで見ると全部黒一面です。
考えてみたコードは以下です。 特にDrawImageのところでエラーが沢山表示されてしまい、対処方法が分かりません。
Dim fs As New System.IO.FileStream(OpenFileDialog.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim buf( fs.Length - 1) As Byte
fs.Read( buf, 0, fs.Length)
Dim g As Graphics = PictureBox1.CreateGraphics
Dim pixelData As New List(Of Integer)
For i As Integer = &HA38 To &H80A38 Step 2
pixelData.Add(BitConverter.ToUInt16( buf, i ))
Next
g.DrawImage( pixelData, 0, 0, 512, 512)
また、"00 F8"の(おそらく)16bitの色データから、HTML形式の色のコードを取得するのは、どうしたらよいのでしょうか。
よろしくお願いします。
データの最初から少しずつ解析して、画像データまでたどり着く事が出来ました。
画像データを抜き出して、pictureboxに描画するのはどのようにしたらよいのでしょうか。
データなどよりすでに分かっている情報は、
image width : 512 , image height : 512 , 色深度は 16bitのハイカラー
画像データのアドレス : 0×A38~0×80A38
バイナリダンプで画像データは、"00 F8"が最初から最後まで並んでいます。
画像はビューワーで見ると全部黒一面です。
考えてみたコードは以下です。 特にDrawImageのところでエラーが沢山表示されてしまい、対処方法が分かりません。
Dim fs As New System.IO.FileStream(OpenFileDialog.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim buf( fs.Length - 1) As Byte
fs.Read( buf, 0, fs.Length)
Dim g As Graphics = PictureBox1.CreateGraphics
Dim pixelData As New List(Of Integer)
For i As Integer = &HA38 To &H80A38 Step 2
pixelData.Add(BitConverter.ToUInt16( buf, i ))
Next
g.DrawImage( pixelData, 0, 0, 512, 512)
また、"00 F8"の(おそらく)16bitの色データから、HTML形式の色のコードを取得するのは、どうしたらよいのでしょうか。
よろしくお願いします。
読み込みたいファイルは、VBに対応していません。
BitmapクラスやBitmapdataクラスの理解に大変時間がかかってしまいましたが、試行錯誤の末、
ご指導どおり、Bitmap.LockBits, Bitmap.UnLockBitsを使って画像を表示することができました。
ありがとうございました。
解決すみとさせていただきます。