-3

私がやろうとしているのは、画像をバイト配列に変換してから、そのバイト配列をファイルに書き込むことです。ここにコードがあります

public static byte[] Convert(Image img)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            // or whatever output format you like
            return ms.ToArray();
        }
    }

    public Form1()
    {
        InitializeComponent();
        Bitmap pic = new Bitmap("tulips.jpg");
        pictureBox1.Image = pic;
        byte[] img_array;
        img_array = Convert(pic);
        File.WriteAllBytes("test.txt", img_array);

    }

これで、画像をバイト配列に変換できました。ブレークポイントを使用してバイト配列の値を確認しましたが、すべて有効です。

ただし、配列をファイルに書き込んでからファイルを開こうとすると、ゴミが表示されます。

何か不足していますか?

4

3 に答える 3

2

あなたBitmapImageです。byte単純に呼び出すことができるのに、なぜ配列に変換するのですか(ここにSave文書化されています)

Bitmap pic = new Bitmap("tulips.jpg");
pictureBox1.Image = pic;
pic.Save("test.gif", System.Drawing.Imaging.ImageFormat.Gif); 

画像を操作するには、通常、ファイル タイプ ヘッダーとピクセルpixel dataが含まれている にアクセスします。ピクセルの操作については、こちらを参照してください (ここに文書化されています) 。Bitmap.LockBits

于 2013-01-15T15:49:48.073 に答える
1

画像ビューアでファイルを開こうとしていますか? 通常、この.txt拡張機能により、代わりにテキスト エディターで開かれます。イメージ ファイルの形式はバイナリであるため、テキストとしてレンダリングした場合にのみ「ガベージ」が表示されることが予想されます。.gifファイルを保存するときに、正しい拡張子を使用すると役立ちます。

File.WriteAllBytes("test.gif", img_array);
于 2013-01-15T15:43:22.350 に答える
1

何を期待していましたか?バイト配列をテキスト ファイルに保存しています。画像ファイルのバイトを含むテキスト ファイルを開くと、良い結果が得られるわけではありません。

ファイルを適切なタイプで保存していることを確認してから、何が起こるかを確認してください。

于 2013-01-15T15:43:35.863 に答える