0

私は画像の配列を持つ構造体を持っています:

public struct ObjectImages
{

    public System.Drawing.Image[] _images;
    public ObjectImages(System.Drawing.Image[] images)
    {
          _images = images; 
    }

}

オブジェクトに 10 kb の 2 つの画像を配置してシリアル化しようとすると、メモリ ストリーム ターゲットが 160 kb であることがわかりました。私が確認したところ、各画像のサイズは 10 ~ 11kb です。

ObjectImages o = new ObjectImages(x); // where x is an array of images from my webcam
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, o); 

私はそれが本当に奇妙だと思いました!どこが問題なのか分かる方教えてください。

4

1 に答える 1

2

ハードディスクに画像が表示されると、たとえばPNGまたはJPEGファイルとして圧縮されています。画像をC#で読み込むと、画像が解凍されるため、ピクセルをレンダリングできます。したがって、実際には、イメージはハードディスクに保存されているよりも多くのバイトで構成されています。

C#オブジェクトには非圧縮データが含まれているため、大まかに(RGBAイメージの場合)(4 * width * height) + further data、.NETではメモリ内のサイズが必要になります。バイナリフォーマッタは画像を(PNGまたはJPEGとして)保存せず、画像を表すオブジェクトを保存します。

于 2012-11-30T10:16:58.260 に答える