每个 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.
答案 0 :(得分:2)
遗憾的是TransformedBitmap
不支持旋转角度而不是90度的任何倍数(这意味着我们只能旋转90,180,270 ......)。考虑我们可以在位图中放置哪些对象并应用一些Transform
?好吧,我们有DrawingGroup
,DrawingVisual
,ImageBrush
,UIElement
和DrawingContext
。
使用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
。然后我们可以使用BitmapImage
或Transform
属性来应用某些变换。之后我们必须使用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
以及您旋转的程度。