RenderTargetBitmap错位

hhddzz 2010-06-30 12:33:01
窗体的Content是一个名为MainCanvas的Canvas,其中有一个名为Graphics的Canvas,在里面绘制各种图形。Graphics相对于MainCanvas居中。

图形绘制完成后,使用RenderTargetBitmap来保存Graphics中的内容。代码简化如下:

' 简化情况,我的DPI是69
Dim render As New RenderTargetBitmap(Graphics.ActualWidth, Graphics.ActualHeight,69, 69, PixelFormats.Pbgra32)
render.Render(Graphics)
Clipboard.SetImage(render)

结果发现剪贴板中的图形错位——左边和上边多了一部分黑色的部分,而Graphics里的东西又没有保存完。
(那部分黑色的应该是空白Visual吧)
就算数值有问题,也应该是右边和下边有空白,而不应该是左边和上边啊

好像论坛上也有类似的问题,不过没有解决
http://topic.csdn.net/u/20100115/16/3e59eef3-21eb-41fb-bbed-040acb80de32.html
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2010-07-04
  • 打赏
  • 举报
回复
这样吧,如果方便提供一个例程下载,我在本地调试看看。
老Key 2010-07-02
  • 打赏
  • 举报
回复
一般人都不会用这个函数。。太麻烦了。。帮你顶一下
hhddzz 2010-07-02
  • 打赏
  • 举报
回复
自顶一下
zhuzhi 2010-06-30
  • 打赏
  • 举报
回复
没用过这个函数,网上看到一段代码,看是否有用。

public static BitmapSource CreateBitmapFromVisual(Visual target, Double dpiX, Double dpiY) { if (target == null) { return null; } Rect bounds = VisualTreeHelper.GetContentBounds(target); RenderTargetBitmap rtb = new RenderTargetBitmap((Int32)(bounds.Width * dpiX / 96.0), (Int32)(bounds.Height * dpiY / 96.0), dpiX, dpiY, 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); return rtb; }


using (FileStream outStream = new FileStream(@"C:\mycanvas.png", FileMode.Create)) { PngBitmapEncoder enc = new PngBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(CreateBitmapFromVisual(myCanvas, 96, 96))); enc.Save(outStream); }http://www.databaseforum.info/8/787993.aspx

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧