我想从WPF用户控件中保存图像。它有效但我的右侧和底部都有黑条。如果我更改dpiX(96)和dpiY(96)它可以工作,但是当我最大化窗口时,它又错了(然后缺少一些用户控件)。
这就是我将图像保存为位图的方式:
Dim parentWindow As Window = Window.GetWindow(_Map)
Dim rtb As New RenderTargetBitmap(parentWindow.ActualWidth, parentWindow.ActualHeight, 96, 96, PixelFormats.Pbgra32)
rtb.Render(_Map)
Dim ms As New MemoryStream()
Dim bp As New BmpBitmapEncoder()
bp.Frames.Add(BitmapFrame.Create(rtb))
bp.Save(ms)
Dim saveMap As New Bitmap(ms)
答案 0 :(得分:0)
窗口的宽度和高度略大于UserControl,因为它包含标题栏和边框。如果您使用控件的尺寸,它可以正常工作:
Dim rtb As New RenderTargetBitmap(_Map.ActualWidth, _Map.ActualHeight, 96, 96, PixelFormats.Pbgra32)
我建议您在渲染前使用当前或所需尺寸调用Measure
和Arrange
,确保控件正确布局。
如果您使用的是控件的LayoutTransform
或RenderTransform
属性,则可能需要进行其他尺寸计算。
顺便说一句:WPF总是使用96 DPI进行大小计算,所以你不应该改变它。