.NET中的非仿射图像转换

问题描述 投票:7回答:3

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

e.g:

alt text

alt text (来源:last100.com


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

graphics gdi+ image-manipulation
3个回答
8
投票

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

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

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

-Neil


9
投票

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

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

但是,目前投票的解决方案可能对您要做的事情有好处,只要注意它不会开箱即用。

例如:

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

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


1
投票

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

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

在我的情况下,我想要反过来(变形因此扭曲的任意点成为我的矩形窗口的角落),这是矩阵的反向做相反的事情。

© www.soinside.com 2019 - 2024. All rights reserved.