[C#] Image -> Stream

んで、何が言いたかったかというと、ImageデータをTCP/IPで送信したい衝動に駆られて(?)、Image->byte に変換したかったのだが、どうやら直接は無理らしい。そこでいったんStreamに格納して、byteにすればいいのではないかと考えた。Image -> Stream は以下のようにすればできるようだ。


// 画像データ読み込み
System.Drawing.Image img = System.Drawing.Image.FromFile(@"H:\tmp1\010.jpg");

// Stream作成
System.IO.MemoryStream ms = new System.IO.MemoryStream(1024*1024);

// Streamに画像データ読み込み
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

上の例では、JPGフォーマットのファイルを読み込んで、PNGフォーマットのStreamに変換している。ちなみにこれをまたファイルに書き戻したければ、以下のようにすればよい


// Streamから画像データ読み込み
System.Drawing.Image img_png = System.Drawing.Image.FromStream(ms);

// 画像データ保存
img_png.Save("hoge.png");

これで作成されるファイルは 50KB -> 500KB と10倍に膨れ上がった。.NET のPNGフォーマットはどういうデータ構造になってるんだ?(笑)