1

我有一个包含图像的画布,其中显示了现有的 BMP。我在画布上绘制矩形并将它们添加到 Children 集合中。当我单击保存时,我想更新底层 BMP 文件。

以下代码有效,但绘制到 BMP 的矩形比我绘制的要小得多。我猜坐标有一些差异?也许我不应该使用 System.Drawing?

        using (Graphics g = Graphics.FromImage(image))
        {
          g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;

          foreach (var child in canvas.Children)
          {
            if (child is System.Windows.Shapes.Rectangle)
            {
              var oldRect = child as System.Windows.Shapes.Rectangle;

              // need to do something here to make the new rect bigger as the scale is clearly different
              var rect = new Rectangle((int)Canvas.GetLeft(oldRect), (int)Canvas.GetTop(oldRect), (int)oldRect.Width, (int)oldRect.Height);
              g.FillRectangle(Brushes.Black, rect);
            }
          }
          ... code to save bmp   

欢迎所有建议!

谢谢

4

1 回答 1

3

尝试使用System.Windows.Media.Imaging.RenderTargetBitmap类(这里是一个例子)。
Wpf 使用与设备无关的图形,因此您必须补偿 DPI:

RenderTargetBitmap bmp = new RenderTargetBitmap((int)Canvas1.Width, (int)Canvas1.Height, 96, 96, PixelFormats.Default);
bmp.Render(Canvas1);

从第三个链接:

有两个系统因素决定了屏幕上文本和图形的大小:分辨率和 DPI。分辨率描述了屏幕上出现的像素数。随着分辨率越来越高,像素越来越小,导致图形和文本看起来越来越小。当分辨率更改为 1600 x 1200 时,显示在设置为 1024 x 768 的显示器上的图形会显得更小。

于 2012-06-26T03:01:05.043 回答