0

次の方法で、WPF (4.0) ビジュアル (ベクター図) をいくつかの画像形式にエクスポートしています...

    public void ExportImageTo(BitmapEncoder Encoder, Stream ExportStream, Visual SourceVisual, int Width, int Height)
    {
        var Result = new RenderTargetBitmap(Width, Height, WPF_DPI, WPF_DPI, PixelFormats.Default);
        Result.Render(Source);

        Encoder.Frames.Add(BitmapFrame.Create(Result));
        Encoder.Save(ExportStream);

        ExportStream.Flush();
        ExportStream.Close();
    }

問題は、PngBitmapEncoder (ロスレス アルゴリズム) を使用しても、画面内のピクセルとは異なるいくつかの小さなピクセルが生成されることです。

WPF がテキストをレンダリングする方法やアンチエイリアスを処理する方法、および UseLayoutRounding、SnapsToDevicePixels、BitmapScalingMode などのプロパティが存在する方法に関連していると思います (注: コードでこれらのプロパティを使用していません)。

では、エクスポートされたビジュアルを画面にレンダリングされたものと同じように見せるにはどうすればよいでしょうか? ありがとう!

4

1 に答える 1

1

どうやら、透明な背景をターゲットにしている場合、WPF は ClearType テキストをレンダリングしません (これをグーグルで検索: RenderOptions.ClearTypeHint)。24 ビットのイメージ フォーマット (アルファ チャネルなし) を使用した方がうまくいくのではないかと思います。また、Width/Height は ActualWidth/ActualHeight と同じではありません。

于 2012-08-04T05:47:41.040 に答える