我正在尝试使用纯XAML在WPF(C#)中剪切图像。我已经使用了诸如倾斜,缩放和矩阵之类的转换,但我没有得到我想要的结果。以下是我正在使用的代码
<Image Source="G:\Demo\virtualization\virtualization\img3.bmp" Stretch="Fill" Height="70" Width="240" Margin="0,170,-312,-29" >
<Image.RenderTransform>
<TransformGroup>
<MatrixTransform Matrix="1,.1,-4.2,1,0,0" />
<!--<ScaleTransform ScaleX=".2" ScaleY=".6"/>-->
</TransformGroup>
</Image.RenderTransform>
</Image>
使用上面的代码,下面是我得到的类似效果:
/----/
/ /
/ /
/----/
但我想要效果如下:
/---\
/ \
/ \
/---------\
由于新用户,我暂时不允许发布图片...
由于
修改 的
我尝试过viewport3d来获得此效果。以下是代码:
<Grid>
<Image Source="G:\Demo\virtualization\virtualization\2.jpg"/>
<Viewport3D Name="mainViewport" ClipToBounds="True" HorizontalAlignment="Stretch" Height="300">
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0, 20" />
</Viewport3D.Camera>
<Viewport2DVisual3D>
<Viewport2DVisual3D.Transform>
<MatrixTransform3D Matrix="1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1" />
</Viewport2DVisual3D.Transform>
<Viewport2DVisual3D.Geometry>
<MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
</Viewport2DVisual3D.Geometry>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
</Viewport2DVisual3D.Material>
<Grid>
<Image Source="G:\Demo\virtualization\virtualization\img3.bmp"/>
</Grid>
</Viewport2DVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF" Direction="0,-1,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
我正在使用矩阵变换来获得效果。 但是,我正在寻找其他方法来获得此效果可能是旋转视口的相机。
答案 0 :(得分:2)
使用线性变换无法实现这种效果(在数学上是不可能的)。
您可以使用WPF 3D获得此效果。
答案 1 :(得分:0)
您可以使用自定义像素着色器实现此效果。
下载Shazzam的副本(免费)并查看纸张样本(shazzam-tool.com)。虽然它不是你在问题中显示的剪切效果,但它很接近。
您之前是否曾使用着色器?如果你想使用自定义着色器,我有一个原型剪切效果,我在几个月前工作。我可以清理HLSL并在此发布。
Shazzam包含一个教程部分和大约80个样本着色器。这是一个很好的起点。使用自定义着色器最难的部分是您必须学习一种新语言(HLSL)。
上有一个着色器文章列表