2

2 つのコントロールがあり、1 つはベクター グラフィックを表示します。これは正常に動作します。ベクター グラフィックスをビットマップとして表示する 2 番目のコントロールが問題です。RenderTargetBitmap を使用して、必要なサイズのビットマップを作成し、そのビットマップにスケーリングされたバージョンのベクター グラフィックスを描画しています。しかし、ぼやけて出てきます。

double scale = Math.Min(width == 0 ? 1 : targetWidth / frameworkElement.Width, height == 0 ? 1 : targetHeight / frameworkElement.Height);
frameworkElement.RenderTransform = new ScaleTransform(scale, scale);

if (width > 0 && height > 0)
{
    RenderTargetBitmap scaledBitmap = new RenderTargetBitmap((int)targetWidth , (int)targetHeight , 96, 96, PixelFormats.Default);
    scaledBitmap.Render(metaImage);

    Image image = new Image();
    image.Source = scaledBitmap;
    _visualChild = image;
}

ここで、frameworkElement はベクター グラフィックスを表示できる拡張 FrameworkElement です。下の画像は、同じサイズで表示された 2 つのコントロールの違いを示しています。右側のビューボックス内に表示されている生のベクター グラフィックです。左側の RenderTargetBitmap にスケーリングおよびレンダリングされたベクター グラフィックス。

私も試しました:

  1. プログラムでビューボックスを作成し、その視覚的な子をベクター グラフィックス フレーム作業要素に設定し、ビューボックス (基本的には右の画像に表示されているものとまったく同じ) を測定して配置し、RenderTargetBitmap に描画します。

  2. 2 つの RenderTargetBitmaps を作成し、ベクター グラフィックスを目的のサイズのベクター グラフィックスで最初にレンダリングします。次に、DrawingGroup と DrawingVisual を使用して、最初の RenderTargetBitmap のスケーリングされたバージョンを 2 番目に描画します。これにより、RenderOptions を設定できました。

     RenderOptions.SetBitmapScalingMode(group, BitmapScalingMode.Fant);
    

しかし、Fant オプションでも同じ結果が得られ、他のオプションではさらに悪い結果が得られたようです。

また、レンダリング オプションでエッジ モードを設定しようとしましたが、EdgeMode.Unspecified と EdgeMode.Aliased の間のオプションしか取得できません。

ビューボックス内にあるときにベクターグラフィックスコントロールによってビットマップに表示される画像を正確に描画するにはどうすればよいですか?

4

0 に答える 0