WPF中的图像剪切

时间:2010-09-29 09:35:35

标签: wpf image transformation

我正在尝试使用纯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>

我正在使用矩阵变换来获得效果。 但是,我正在寻找其他方法来获得此效果可能是旋转视口的相机。

2 个答案:

答案 0 :(得分:2)

使用线性变换无法实现这种效果(在数学上是不可能的)。

您可以使用WPF 3D获得此效果。

答案 1 :(得分:0)

您可以使用自定义像素着色器实现此效果。

下载Shazzam的副本(免费)并查看纸张样本(shazzam-tool.com)。虽然它不是你在问题中显示的剪切效果,但它很接近。

您之前是否曾使用着色器?如果你想使用自定义着色器,我有一个原型剪切效果,我在几个月前工作。我可以清理HLSL并在此发布。

修改

Shazzam包含一个教程部分和大约80个样本着色器。这是一个很好的起点。使用自定义着色器最难的部分是您必须学习一种新语言(HLSL)。

http://blog.shazzam-tool.com/index.php/shader-articles/

上有一个着色器文章列表