.NET中的非仿射图像转换

时间:2009-02-10 21:31:20

标签: graphics gdi+ image-manipulation

.NET库中是否有任何类,方法或任何算法,以执行非affine转换? (即不仅涉及旋转,缩放,平移和剪切的转换)

e.g:

alt text

alt text
(来源:last100.com


non-affine transformation s还有另一个术语吗?

3 个答案:

答案 0 :(得分:9)

我不知道.Net中集成了任何内容,让你进行非仿射变换。

我猜你想尝试某种3D纹理贴图?如果是这种情况,你需要一个同质的仿射变换,这在.Net中是不可用的。我也不知道在.Net中进行像素位移变换的任何集成方法。

然而,目前投票的解决方案可能对你想要做的事情有好处,只要知道它不会开箱即用的角度修正。

例如:

alt text

左边的图片是使用Neil N提供的单四方扭曲库生成的。右边的图片是使用DirectX中的单个四边形(实际上是两个三角形)生成的。

这可能对你要做的事情没有任何影响,但如果你想做3D东西,请记住这一点,如果没有透视正确的映射,它会显得非常奇怪。

答案 1 :(得分:8)

您发布的所有示例图像都可以使用四边形失真来完成。虽然我无法确定四边形失真会覆盖所有非仿射变换。

在C#中有一个不太好的实现的链接...它有效,但速度很慢。在维基百科周围寻找可用于这些计算的许多不同优化

http://www.vcskicks.com/image-distortion.html

-Neil

答案 2 :(得分:1)

您可以使用Viewport3d控件和非仿射变换矩阵在wpf中执行此操作。再次将其渲染为位图可能很有趣......我通过包含一个不可见的< image>来“修复”它。使用与纹理平面相同的图像进行控制...(另外,我必须通过分割平面和裁剪图像来解决最大纹理尺寸问题...)

http://www.charlespetzold.com/blog/2007/08/060605.html

在我的情况下,我希望与此相反(变形使得扭曲的任意点成为我的矩形窗口的角落),这是矩阵的反向反向。