asp.net – 在渲染到位图之前缩放WPF内容
背景:
目的: 问题: 我完全不了解传递到Arrange()和Measure()中的维度,因为这些代码中的一些代码是从在线示例中获取的.我也不完全明白RenderTargetBitmap的东西.任何指导将不胜感激. Public Sub Capture(ByVal MyImage As Canvas) ' Determine the constraining scale to maintain the aspect ratio and the bounds of the image size Dim scale As Double = Math.Min(Width / MyImage.Width,Height / MyImage.Height) 'Dim vbox As New Viewbox() 'vbox.Stretch = Stretch.Uniform 'vbox.StretchDirection = StretchDirection.Both 'vbox.Height = Height * scale * 300 / 96.0 'vbox.Width = Width * scale * 300 / 96.0 'vbox.Child = MyImage Dim bounds As Rect = New Rect(0,MyImage.Width * scale,MyImage.Height * scale) MyImage.Measure(New Size(Width * scale,Height * scale)) MyImage.Arrange(bounds) 'MyImage.UpdateLayout() ' Create the target bitmap Dim rtb As RenderTargetBitmap = New RenderTargetBitmap(CInt(Width * scale * 300 / 96.0),CInt(Height * scale * 300 / 96.0),300,PixelFormats.Pbgra32) ' Render the image to the target bitmap Dim dv As DrawingVisual = New DrawingVisual() Using ctx As DrawingContext = dv.RenderOpen() Dim vb As New VisualBrush(MyImage) 'Dim vb As New VisualBrush(vbox) ctx.DrawRectangle(vb,Nothing,New Rect(New System.Windows.Point(),bounds.Size)) End Using rtb.Render(dv) ' Encode the image in the format selected Dim encoder As System.Windows.Media.Imaging.BitmapEncoder Select Case Encoding.ToLower Case "jpg" encoder = New System.Windows.Media.Imaging.JpegBitmapEncoder() Case "png" encoder = New System.Windows.Media.Imaging.PngBitmapEncoder() Case "gif" encoder = New System.Windows.Media.Imaging.GifBitmapEncoder() Case "bmp" encoder = New System.Windows.Media.Imaging.BmpBitmapEncoder() Case "tif" encoder = New System.Windows.Media.Imaging.TiffBitmapEncoder() Case "wmp" encoder = New System.Windows.Media.Imaging.WmpBitmapEncoder() End Select encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(rtb)) ' Create the memory stream to save the encoded image. retImageStream = New System.IO.MemoryStream() encoder.Save(retImageStream) retImageStream.Flush() retImageStream.Seek(0,System.IO.SeekOrigin.Begin) MyImage = Nothing End Sub 解决方法这应该足以让你开始:private void ExportCanvas(int width,int height) { string path = @"c:tempTest.tif"; FileStream fs = new FileStream(path,FileMode.Create); RenderTargetBitmap renderBitmap = new RenderTargetBitmap(width,height,1/300,PixelFormats.Pbgra32); DrawingVisual visual = new DrawingVisual(); using (DrawingContext context = visual.RenderOpen()) { VisualBrush brush = new VisualBrush(MyCanvas); context.DrawRectangle(brush,null,new Rect(new Point(),new Size(MyCanvas.Width,MyCanvas.Height))); } visual.Transform = new ScaleTransform(width / MyCanvas.ActualWidth,height / MyCanvas.ActualHeight); renderBitmap.Render(visual); BitmapEncoder encoder = new TiffBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); encoder.Save(fs); fs.Close(); } (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC Razor视图中使用@RenderBody有什么意
- asp.net 读取并修改config文件实现代码
- asp.net – 选择框更改事件中的setTimeout
- asp.net-mvc – 使用NLog记录未处理的异常? ELMAH和NLog应
- asp.net-mvc-4 – 通过ADAL JavaScript Ajax和KnockoutJs的
- asp.net-mvc-2 – 如何使用Castle Windsor在MVC中注入UrlHe
- ASP.Net 分页控件源码
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET 3.0子应用
- asp.net – 转发器控件中的单选按钮列表
- asp.net-mvc-4 – 表单身份验证:角色(MVC 4)C#
- asp.net-mvc – ASP.NET MVC V2 – 好友类
- ASP.NET性能优化之局部缓存分析
- ASP.NET Core 1.0 ConfigurationBuilder().AddJs
- asp.net-mvc-2 – 使用’class(或其他保留关键字
- asp.net-core – 如何使用ASP.NET注册OData 5
- asp.net – 何时覆盖OnError?
- asp.net – Web Forms MVP项目有哪些好的资源?
- 序列化 – Newtonsoft中的TypeNameHandling需要$
- 什么是使用aspnet_compiler.exe预编译ASP.NET项目
- 使用C#读取dbf行情文件