0

WPF でビジュアル オブジェクトを処理する方法を学習していたので、次のように MSDN でスニペットに遭遇しました。実行されますが、どのようにシリアル化できるかわかりません。ここで物理的にファイル (*.bmp) を作成する方法を教えてください。

URL

ありがとう!

Image myImage = new Image();
FormattedText text = new FormattedText("ABC",
        new CultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(this.FontFamily, FontStyles.Normal, FontWeights.Normal, new FontStretch()),
        this.FontSize,
        this.Foreground);

DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawText(text, new Point(2, 2));
drawingContext.Close();

RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);
myImage.Source = bmp;

Save() メソッドを追加した後:

    Image myImage = new Image();
    FormattedText text = new FormattedText("ABC",
        new CultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(this.FontFamily, FontStyles.Normal, FontWeights.Normal, 
        new FontStretch()),
        this.FontSize,
        this.Foreground);
    DrawingVisual drawingVisual = new DrawingVisual();
    DrawingContext drawingContext = drawingVisual.RenderOpen();
    drawingContext.Close();

    RenderTargetBitmap bmp = 
         new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
    bmp.Render(drawingVisual);
    myImage.Source = bmp;

    var enc = new PngBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(bmp));
    using (var fs = new FileStream("c:\\temp\\Test.png", 
                   FileMode.Create, FileAccess.Write))
    {
        enc.Save(fs);
    }
4

1 に答える 1

1

BitmapEncoder( *.bmp ファイルの場合は使用する必要がありますが、画像には透明度があり、完全に黒い .bmp に変換されるため、使用することをおBmpBitmapEncoder勧めします):PngBitmapEncoder

var enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bmp));
using(var fs = new FileStream("Test.png", FileMode.Create, FileAccess.Write))
{
    enc.Save(fs);
}
于 2012-08-15T18:33:25.507 に答える