0

GIFファイルをbyte[]に変換したい。

2つの方法を試しましたが、結果が異なります。どちらが正しいですか?

方法 1:

bytes =File.ReadAllBytes(filepath);の使用 これはバイト配列を返します。

方法 2:

 private byte[] ImageToBytes(Image image, ImageFormat format)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, format);
                return ms.ToArray();
            }
        }

Bitmap image = new Bitmap(@"c:\\1.gif"); 

それから電話する
bytes = ImageToBytes(image, ImageFormat.Gif);

2 バイトには少し違いがあります。どちらを信頼する必要がありますか?

4

2 に答える 2

1

あなたの「方法2」は、ファイルを再エンコード/再圧縮しています。大幅に異なる可能性があり、(おそらく) 品質が低下します。

于 2013-07-24T01:42:19.350 に答える
0

コンピューターに指示したことの結果であるという点で、どちらも「正しい」です。1 つはファイルから直接取得したバイト配列であり、もう 1 つはファイルをデコードして再エンコードした結果であり、最終的にまったく同じ配列になるか、まったく異なる配列になる可能性があります。デコード/エンコードプロセスを実行せず、元のデータを保持するため、非常に高速であるため、必要なものはおそらく最初のものです。2 番目のものを使用する唯一の理由は、何らかの理由で .NET gif エンコーディング プロセスの出力を本当に分析する必要がある場合です。

2 番目のオプションは、メモリ内ですべてを実行するため、一時ファイルを必要としないことを除いて、以下と同じです。したがって、ロードして保存し、再度ロードするだけです。

Bitmap image = new Bitmap(@"c:\1.gif"); 
image.Save("c:\1_temp.gif", ImageFormat.Gif);
bytes = File.ReadAllBytes(@"c:\1_temp.gif");
于 2013-07-24T03:14:54.690 に答える