0

ビットマップを作成したい WPF Canvas があります。

具体的には、300dpi ビットマップで実際のサイズでレンダリングしたいと考えています。キャンバス上のオブジェクトの「実際のサイズ」は、実際には 10デバイスに依存しないピクセル= 1" です。理論的には、WPF デバイスに依存しないピクセルは 96dpi です。

私はこれを機能させるために何日も費やしてきましたが、困惑しています。

私の理解では、一般的な手順はおおよそ次のとおりです。

var masterBitmap = new RenderTargetBitmap((int)(canvas.ActualWidth * ?SomeFactor?),
                                          (int)(canvas.ActualHeight * ?SomeFactor?),
                                          BitmapDpi, BitmapDpi, PixelFormats.Default);
masterBitmap.Render(canvas);  

また、キャンバスの LayoutTransform を ScaleTransform の ?SomeOtherFactor? に設定する必要があります。次に、キャンバスの測定と配置を ?SomeDesiredSize? に行います。

私が立ち往生しているのは、?SomeFactor?、?SomeOtherFactor? の値に何を使用するかです。と?SomeDesiredSize? これを機能させるために。 MSDN のドキュメントには、どの要素を使用するべきかが示されていません。

4

1 に答える 1

0

このコードを使用して、1:1 ピクセル精度で画像を表示します。

double dpiXFactor, dpiYFactor;  
Matrix m = PresentationSource.FromVisual(Application.Current.MainWindow).CompositionTarget.TransformToDevice;
if (m.M11 > 0 && m.M22 > 0)
{
    dpiXFactor = m.M11;
    dpiYFactor = m.M22;
}
else
{
    // Sometimes this can return a matrix with 0s.
    // Fall back to assuming normal DPI in this case.
    dpiXFactor = 1;
    dpiYFactor = 1;
}

double width = widthPixels / dpiXFactor;
double height = heightPixels / dpiYFactor;

コントロールでも UseLayoutRounding を有効にすることを忘れないでください。

于 2012-12-03T20:40:45.927 に答える