0

現在、HEX の文字列から変換された画像ファイルを保存しようとするスクリプトをテストしていますが、Save コマンドを実行しようとすると、無効なパラメーターが表示されます。

        // Some junk hex image data
        string hexImgData = @"FFD8FFE000104A46494600010200006400640000FFFFD9";

        // Call function to Convert the hex data to byte array
        byte[] newByte = ToByteArray(hexImgData);
        MemoryStream memStream = new MemoryStream(newByte);

        // Save the memorystream to file
        Bitmap.FromStream(memStream).Save("C:\\img.jpg");


    // Function converts hex data into byte array
    public static byte[] ToByteArray(String HexString)
    {
        int NumberChars = HexString.Length;

        byte[] bytes = new byte[NumberChars / 2];

        for (int i = 0; i < NumberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
        }
        return bytes;
    }

現在原因を調査中ですので、アドバイスをお願いします。

4

2 に答える 2

0

コメントで述べたように、ビットマップ形式が間違っています。ランダムな16進データBitmap.FromStreamしかなく、メソッドはそれをどうするかわかりません。16進エディタでビットマップファイルを作成する方法について説明しているこのリンクを見るとBitmapHeader、、、、BitmapInfoHeaderおよびPixel RGB Data. サンプルからデータを取得して使用することで、コードを使用してビットマップを作成できました。

string bitmapHeader = "424D860000000000000036000000";
string bitmapInfoHeader = "280000000500000005000000010018000000000050000000C40E0000C40E00000000000000000000";
string pixelData = "0000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF000000FF0000FF0000FF0000FF0000FF00";


string hexImgData =  bitmapHeader + bitmapInfoHeader + pixelData;

// Call function to Convert the hex data to byte array
byte[] newByte = ToByteArray(hexImgData);
MemoryStream memStream = new MemoryStream(newByte);

pictureBox1.Image  = Bitmap.FromStream(memStream);
于 2013-05-07T03:53:53.713 に答える