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