2012-06-25 78 views
1

我有一个画布,其中包含一个Image,在其中展示现有的BMP。我在画布上绘制矩形并将它们添加到儿童角色。当我点击保存时,我想更新底层的BMP文件。绘制到WPF画布的位图

以下代码有效,但绘制到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 

欢迎任何建议!

由于

回答

3

尝试使用System.Windows.Media.Imaging.RenderTargetBitmap类(一个example here)。
Wpf uses Device Independent Graphics所以你必须补偿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时显示的图形会显得更小。

+0

非常好,非常感谢。我实际上没有明白你的答案,但至少我现在有一个地方可以开始阅读。这成像goop对我来说都是新的。 – Jonesie