如何从WPF图像控件获取渲染图像

时间:2014-07-20 10:29:01

标签: wpf rendertargetbitmap rendertransform

每个 WPF图像控件都有 RenderTransform 属性设置比例偏斜旋转还有更多转化为图像。调用 RenderTransform 属性后,如何将渲染图像导入 BitmapImage RenderTargetBitmap 类或任何其他类?

这是我的代码:

Dim InImage As New BitmapImage(New Uri("My Image Path"))

Dim TG As New TransformGroup
TG.Children.Add(New RotateTransform(190))

Dim MyImg As New Image
MyImg.Source = InImage
MyImg.RenderTransform = TG

'Here i need get Transformed Image into a BitmapImage or RenderTargetBitmap Variable  or Any other class variable.

1 个答案:

答案 0 :(得分:2)

遗憾的是TransformedBitmap不支持旋转角度而不是90度的任何倍数(这意味着我们只能旋转90,180,270 ......)。考虑我们可以在位图中放置哪些对象并应用一些Transform?好吧,我们有DrawingGroupDrawingVisualImageBrushUIElementDrawingContext

  • 使用DrawingGroup,我们必须输入ImageDrawing并通过Transform的{​​{1}}属性应用转换。然后我们必须使用DrawingGroup,将DrawingImage属性设置为Drawing

  • 使用DrawingGroup,我们必须打开DrawingVisual,在推送一些转换后使用DrawingContext方法。然后,我们可能必须在DrawImage方法中传递RenderTargetBitmap来使用DrawingVisual

  • 使用Render(就像您使用UIElement控件作为媒介的想法一样),我们必须在Image上渲染图像。所以UIElement控件最适合这种情况。每个Image都有一个UIElement属性,允许我们添加任何变换。最后,我们还必须在Transform方法中传递RenderTargetBitmap来使用UIElement

  • 使用Render,我们必须将ImageBrush属性设置为ImageSource。然后我们可以使用BitmapImageTransform属性来应用某些变换。之后我们必须使用RelativeTransform。使用DrawingImage作为画笔创建一个简单的GeometryDrawing,并使用ImageBrush作为其几何图形。最后,我们只需将此RectangleGeometry设置为GeometryDrawing的{​​{1}}属性即可。输出是Drawing。我想用这种方法在这里编写代码:

    DrawingImage

关于DrawingImage的注释。我发现如果你没有与构建的exe文件在同一级别的任何Image文件夹,使用Dim InImage As New BitmapImage(New Uri("My Image Path")) Dim ImgBrush As New ImageBrush(InImage) ImgBrush.Viewport = New Rect(0.1,0.1,0.8,0.8) ImgBrush.ViewportUnits = BrushMappingMode.RelativeToBoundingBox Dim Rotating As New RotateTransform(190) Rotating.CenterX = 0.5 Rotating.CenterY = 0.5 ImgBrush.RelativeTransform = Rotating Dim ImgSize As New Rect(0,0,300,400) Dim DrawImage As New DrawingImage() DrawImage.Drawing = New GeometryDrawing(ImgBrush, null, ImgSize) 图像将无法工作。如果您不想将某个图像文件夹与应用程序一起部署,则可以将图像添加为 资源 。要在后面的代码中引用作为资源添加的图像,您必须使用一种特殊的路径:

"My Image Path"

请注意,要确保将图像添加为资源,请尝试右键单击图像(在“项目”树视图下),在弹出菜单中选择属性,然后查看 构建操作 字段,应为 资源

另请注意Relative,正确设置会阻止图像被切断(这是因为转换的图像被旋转)。这取决于pack://application:,,,/Your_Relative_Image_Path 以及您旋转的程度。