7

.NET 库中是否有任何类、方法或任何一般算法来执行非仿射转换?(即不仅仅涉及旋转、缩放、平移和剪切的变换)

例如:

替代文字

替代文字
(来源:last100.com


非仿射变换还有其他术语吗?

4

3 回答 3

9

我不知道 .Net 中集成的任何东西可以让您进行非仿射变换。

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

但是,当前投票的解决方案可能对您正在尝试做的事情有好处,请注意它不会开箱即用地进行透视校正。

例如:

替代文字

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

这可能对您尝试做的事情没有任何影响,但是如果您想做 3D 的东西,请记住这一点,如果没有透视正确的映射,它看起来会很奇怪。

于 2009-02-10T22:07:29.633 回答
8

您发布的所有示例图像都可以使用四边形扭曲来完成。虽然我不能肯定地说四边形失真会覆盖所有非仿射变换。

这是一个在 C# 中不太好的实现的链接......它可以工作,但速度很慢。浏览 Wikipedia,了解可用于此类计算的许多不同优化

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

-尼尔

于 2009-02-10T21:50:20.453 回答
1

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

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

在我的情况下,我想要这个的相反(将扭曲上的任意点转换为我的矩形窗口的角),这是矩阵的逆来做相反的事情。

于 2010-01-27T05:02:30.030 回答