web-dev-qa-db-ja.com

C#:BITMAPバイト配列をJPEG形式に変換する方法

.net 2.0を使用してバイト配列形式のBITMAPをJPEG形式に変換するにはどうすればよいですか?

25
Marc

_byte[]_とはどういう意味ですか?生ファイルストリームデータ?その場合、(クライアントアプリケーションで_System.Drawing.dll_を使用して)のようなものはどうでしょうか。

_    using(Image img = Image.FromFile("foo.bmp"))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }
_

または、実際に_byte[]_がある場合は、new MemoryStream(arr)とともにFromStreamを使用します。

_    byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
    using(Image img = Image.FromStream(new MemoryStream(raw)))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }
_
44
Marc Gravell

それが生のピクセルデータの単なるバッファーであり、完全な画像ファイル(JPEGなどのヘッダーなどを含む)ではない場合、Image.FromStreamを使用できません。

あなたが探しているのはSystem.Drawing.Bitmap.LockBitsで、System.Drawing.Imaging.ImageDataを返すと思います。これにより、メモリへのポインタを使用して画像のピクセルを読み書きするアクセスが提供されます。

3
baretta