visualbasic2010 バイナリデータのグラフ化について。 下記の様なバイナリファイル | 質問の答えを募集中です! visualbasic2010 バイナリデータのグラフ化について。 下記の様なバイナリファイル | 質問の答えを募集中です!

visualbasic2010 バイナリデータのグラフ化について。 下記の様なバイナリファイル

未分類

visualbasic2010 バイナリデータのグラフ化について。

下記の様なバイナリファイルを読み込んでグラフ化したいと思っています。以前質問した際に得られた回答を元に試行錯誤していますがどうも上手く表示されません。
以前アドバイスして頂いたソースコード

Dim ps As Point()
Dim b As Byte() = System.IO.File.ReadAllBytes(“C:testtest.dat”)
Array.Reverse(b)
ReDim ps(b.Length 2 – 1)
Dim dx As Single = PictureBox1.Width / (ps.Length – 1) ‘Xの幅
Dim dy As Single = 1 ‘Yのスケーリング(必要なら)
For i As Integer = 0 To ps.Length – 1
ps(i) = New Point(dx * i, dy * BitConverter.ToInt16(b, i * 2)) ‘pointの配列に追加
Next

PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
g.TranslateTransform(0, PictureBox1.Height 2) ‘真ん中0
g.ScaleTransform(1, -1) ‘y座標を逆に
g.DrawLine(Pens.Black, 0, 0, PictureBox1.Width, 0)
g.DrawLines(Pens.Red, ps) ‘折れ線を描く
g.Dispose()
PictureBox1.Refresh()

読み込ませているバイナリファイル(2バイト毎に数値を表しています)
http://www.dotup.org/uploda/www.dotup.org3552450.dat.html

83 FF 8D FF 86 FF 82 FF 88 FF 94 FF 8E FF 89 FF 91 FF 9B FF 93 FF 90 FF 98 FF A0 FF 9B FF 97 FF 9B FF A7 FF A1 FF 9B FF A4 FF AD FF A7 FF A0 FF A7 FF B0 FF AC FF A9 FF AD FF B6 FF B0 FF AB FF B2 FF BB FF B4 FF AF FF B4 FF BE FF BA FF B4 FF BA FF C3 FF BE FF B7 FF C0 FF C6 FF C4 FF BD FF C0 FF CA FF C5 FF BE FF CB FF CF FF CB FF C3 FF CB FF D1 FF CE FF C5 FF D0 FF D4 FF D1 FF C7 FF D0 FF D7 FF D3 FF CC FF D4 FF DA FF D4 FF D0 FF D7 FF DC FF D9 FF D3 FF DA FF E1 FF DA FF D6 FF DC FF E3 FF DD FF D6 FF DB FF E4 FF E0 FF D7 FF E0 FF E9 FF E1 FF DA FF DE FF EA FF E3 FF DE FF E1 FF EA FF E4 FF DE FF E4 FF ED FF E5 FF DF FF E6 FF EE FF E9 FF E1 FF E6 FF EF FF E8 FF E1 FF E9 FF F0 FF EA FF E5 FF E7 FF F0 FF ED FF E7 FF EA FF F2 FF ED FF E7 FF EC FF F1 FF EA FF E8 FF ED FF F6 FF EF FF E9 FF EC FF F7 FF EF FF E8 FF EF FF F6 FF F1 FF EC FF EF FF F7 FF F2 FF EB FF F0 FF F6 FF F3 FF ED FF F3 FF F9 FF F3 FF ED FF F2 FF FA FF F4 FF EF FF F3 FF F9 FF F5 FF EC FF F3 FF FC FF F7 FF F0 FF F4 FF 9E 00 FE 05 99 0E…

これはセンサーの較正時に出力されたデータであり、本来であれば画像のように出力されるべきですが、うまくいきません。
何かお気づきの方がいらっしゃれば知恵を貸して頂けると幸いです・・・

(目指すのは正、左側のグラフ。現在は右側の誤の状態で表示されてしまいます。)

  1. 匿名 より:

    Array.Reverse(b)
    は 何を意図しているのでしょう

    取得したデータの 上位/下位を入れ替えたいのでしょうか そうなるとぜんぜん違ったデータになってしまうと思います …
    データの振り幅が16bitあるので これによるY軸の補正が必要だと思います

    dim mi, ma as integer
    mi = Integer.MaxValue
    ma = Integer.MinValue
    For i As Integer = 0 To ps.Length – 1
    ps(i) = New Point(dx * i, dy * BitConverter.ToInt16(b, i * 2)) ‘pointの配列に追加
    mi = iif( mi > ps(i).y, ps(i).y, mi ) ’最小値を取得
    ma = iif(ma < ps(i).y, ps(i).y, ma) ’最大値を取得 Next といった具合に データの最小値/最大値を取得して g.ScaleTransform(1, -1) の Y軸のスケーリングをすればいいと思いますよ g.ScaleTransform(1, -(PictureBox1.Height/2.0)/(ma-mi)) といった感じで …



 ⬇人気の記事!⬇

タイトルとURLをコピーしました