【问题标题】:How to get exact measurement in WPF shapes如何在 WPF 形状中获得精确的测量值
【发布时间】:2020-12-24 13:49:59
【问题描述】:

我目前正在 WPF 中开发一个简单的绘图应用程序。 我的应用程序中的一项功能是根据用户给定的测量值生成基本几何形状的图像。

所以我只是尝试生成宽度/高度为 96 个单位的正方形。所以为此我应该得到 1 英寸(根据与设备无关的单位(1/96 英寸))。但是当我打印生成的图像时,它小于 1 英寸(边长为 2.22 厘米)

我使用下面的代码来渲染图像。

RenderTargetBitmap rtb = new RenderTargetBitmap((Int32)bounds.Width, (Int32)bounds.Height, 96, 96, PixelFormats.Pbgra32);

DrawingVisual dv = new DrawingVisual();

using (DrawingContext dc = dv.RenderOpen())
{
    VisualBrush vb = new VisualBrush(target);
    dc.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}

rtb.Render(dv);

谁能帮我解决这个问题?

【问题讨论】:

  • 您似乎认为像素具有固定的物理表示/大小。他们没有。
  • 所以为了打印 1inch squre。 WPF 的大小是多少?
  • 正如我所说,没有直接的相关性。没有“WPF 大小”。打印时必须设置正确的 DPI/PPI。
  • 您还没有告诉我们您实际上是如何打印您的图纸,但您应该使用PrintDialog.PrintVisual 获得准确的结果。此外,将 RenderTargetBitmap 保存到图像文件并随后以“自然”大小打印应该可以。

标签: c# wpf


【解决方案1】:

以下内容在纸上打印一个“正好”为 1x1 英寸且位于距左上角 1 英寸的矩形:

<Canvas x:Name="canvas">
    <Rectangle Stroke="Black" Width="96" Height="96" Canvas.Left="96" Canvas.Top="96"/>
</Canvas>

后面的代码:

var pd = new PrintDialog();

if ((bool)pd.ShowDialog())
{
    pd.PrintVisual(canvas, "");
}

【讨论】:

    【解决方案2】:

    不知道为什么其他答案不只是说使用“英寸”作为单位,或者当时可能不可用,但这就是解决方案。

    下面是一个创建 Canvas 设置为 8.5" x 11" 以模拟信纸大小的示例的示例。然后,它在页面的左上角、右上角和右下角添加三个 1 英寸的正方形,每个边距“纸”边缘有一英寸的边距。

    <Canvas x:Name="Paper"
        Width="8.5in" Height="11in"
        Background="White">
    
        <Rectangle Fill="Black"
            Width="1in" Height="1in"
            Canvas.Left="1in" Canvas.Top="1in" />
    
        <Rectangle Fill="Black"
            Width="1in" Height="1in"
            Canvas.Left="6.5in" Canvas.Top="1in" />
    
        <Rectangle Fill="Black"
            Width="1in" Height="1in"
            Canvas.Left="6.5in" Canvas.Top="9in" />
    
    </Canvas>
    

    如果您随后调用此代码,则可以打印它以查看结果。

    var printDialog = new PrintDialog();
    
    if (printDialog.ShowDialog() == true) {
        printDialog.PrintVisual(Paper, "My First Print Job");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2012-12-22
      • 2020-09-09
      相关资源
      最近更新 更多