0

vb.net でバイト配列からビットマップを作成する際に問題が発生しています。
GoPro からピクセル データを 1 ビット/ピクセル データとして取得します。
次のようになります。

0 0 0 0 0 0 0 0 1 1 5D 6C 63 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 FF FC 4 0 1C 70 71 C1 0 4 E 0 36 DA DB 61 77 74 4 0 36 D8 DB 63 77 74 11 0 36 D8 DB 63 77 74 E 0 36 DA DB 63 77 74 20 80 36 D8 DB 61 77 74 9F 20 1C 70 71 C1 0 4 40 40 0 0 0 1 FF FC 3F 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF FF FF FF FF FF FF F0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 36 3 E3 F0 0 0 0 C F6 7 FB FC 0 0 0 C C0 6 1B C 0 0 0 D 80 0 1B C 0 0 0 F 80 3 FB C 0 0 0 E 0 3 E3 C 0 0 0 D 80 6 3 C 0 0 0 D C0 6 1B C 0 0 0 C C0 6 1B C 0 0 0 C 30 3 E3 F0 0 0 0 C 30 3 E3 F0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FF FF FF FF FF FF FF F0 FF FF FF FF FF FF BF F0 F0 7 FF FF FF FB BB F0 E0 3 9F E0 7F FD F7 F0 E7 3 1F E0 7F FF 1F F0 E7 2 1F E7 FF FE EF F0 E7 2 1F E7 FF F2 C9 F0 E0 2 1F E7 FF FE 8F F0 E0 2 1F E7 FF FF 1F F0 E0 3 1F E7 FF FD F7 F0 E0 3 9F E7 FF FB BB F0 F0 7 FF FF FF FF BF F0 FF FF FF FF FF FF FF F0 FF FF FF FF FF FF FF F0 0

最初の 15 バイトは、要求の繰り返しです。これと最後のバイトは切り取られます

次のコードを使用して、データをビットマップに変換します。

Private Function GetBitmap(lcdContend) As Bitmap
    Dim lcdBytes(599) As Byte
    Dim split = lcdContend.Split(" ")

    For lci = 0 To 599
        lcdBytes(lci) = Convert.ToByte(split(lci + 15), 16) Xor 255
    Next

    Dim img = New Bitmap(64, 75)

    Dim bmd As BitmapData = img.LockBits(
       New Rectangle(0, 0, img.Width, img.Height),
       ImageLockMode.WriteOnly,
       PixelFormat.Format1bppIndexed)

    Marshal.Copy(lcdBytes, 0, bmd.Scan0, lcdBytes.Length)

    img.UnlockBits(bmd)

    'img.RotateFlip(RotateFlipType.Rotate180FlipX)

    Return img
End Function

ビットマップは幅 64 ピクセル、高さ 75 ピクセル、サイズは 600 バイトです。ビットマップを PictureBox に読み込みます。結果は次のようになります: エラー表示

画像全体が 4 ピクセル左にシフトされます。画像を回転して反転すると、画像全体も左に 4 ピクセル移動します。 画像に欠け ている 4 ピクセルの列を取得するにはどうすればよいですか? 24bppへの変換など、いろいろ試しました。すべてが同じ結果になります

PS: データは問題ありません。手動でビットに変換し、ビットマップを手動で描画しました。すべてのデータがそこにあります。

感謝します!

4

1 に答える 1