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(); } (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |