もくじ
→https://qiita.com/tera1707/items/4fda73d86eded283ec4f
Bitmap関連
→BitmapSource派生クラスの使い方
やりたいこと
WPFアプリでよく使うBitmapSource
やその派生のBitmapImage``RenderTargetBitmap``TransformedBitmap
をSystem.Drawing.Bitmap
に変換したい。
(新しく作る処理ではBitmapSource
を使いたいが、もともとあるロジックでSystem.Drawing.Bitmap
を使ってるときに、そこに合わせに行きたい)
やり方
BmpBitmapEncoder
を使う。
サンプル
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// BitmapSourceの派生クラス「RenderTargetBitmap」で、画像を取ってくる
// 「RouletteWhole」は、Gridの名前。
var canvas = new RenderTargetBitmap((int)RouletteWhole.ActualWidth, (int)RouletteWhole.ActualHeight, 96, 96, PixelFormats.Pbgra32);
canvas.Render(RouletteWhole);
// BmpBitmapEncoderに画像を入れる
using (var stream = new MemoryStream())
{
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(canvas));
encoder.Save(stream);
// BmpBitmapEncoderからSystem.Drawing.Bitmapをつくる
var bitmap = new System.Drawing.Bitmap(stream);
bitmap.Save(@".\aaa.bmp");
}
}
参考
Convert RenderTargetBitmap to Bitmap
https://stackoverflow.com/questions/20083210/convert-rendertargetbitmap-to-bitmap
親クラスの「BitmapEncoder」クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.imaging.bitmapencoder?view=netframework-4.8