0

我有一个想要制作位图的 WPF 画布。

具体来说,我想在 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 回答