2011-01-21 16 views
1
using (var bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb)) 
using (var g = Graphics.FromImage(bmp)) 
{ 
    g.Clear(Color.Transparent); 
    g.DrawImage(image, 0, 0); 
    bmp.Save("image.bmp", ImageFormat.Bmp); 
} 

透明性を保持していないとの質問が明確でなければなりません:PNGそれを保つに節約しながら、なぜBMPへの保存は、に透明性をゴミ?ただ、明確にする保存ビットマップ32bppでは

画像フォーマットをFormat8bppIndexedされ、そのパレットは、(それがフォーム/ピクチャボックス上に正しく描画など)透明色を含んでいます

編集:私の悪い、Bitmap.Save( )は、実際にビットマップ形式がFormat32bppArgbであっても、Format32bppRgb形式でBMPを保存します。

+1

画像が24bppの場合、透明ピクセルをどのように含むことができますか? – CodesInChaos

+0

誤って申し訳ありません。これはFormat8bppIndexed形式であり、そのパレットは透明なものも含む色を変更しました – mnn

+0

なぜパレットを使用していますか? –

答えて

5

デフォルトではbmpファイル形式は透過形式をサポートしていないため、pngファイル形式はサポートしていません。

透明性が必要な場合は、pngを使用する必要があります。圧縮アルゴリズムは無損失ですので、画像にアーチファクトを持たないでしょう。ファイルはディスク上のスペースも少なくなります。

+1

私はそうは思わない。 http://en.wikipedia.org/wiki/BMP_file_format#Pixel_Format – mnn

+4

技術的には、BMP形式はアルファチャンネル/ 32ビットをサポートしていると思いますが、ほとんどの実装(特にMSのもの)はこのようなビットマップをサポートしていません。 – CodesInChaos

+0

@mnn - それは私にとってはニュースですが、その場合は、32 bppであることを保存するようにフラグを設定する必要があります。 – ChrisF

関連する問題