2010-05-24 184 views
2

想象一下,我有一个长方形,例如400px x 300px。然后我们假设我想在其中加载图像。使用Sytem.Drawing.DrawImage这一切都非常简单。在vb.net中操纵/调整大小/缩放图像

Rectangle http://img576.imageshack.us/img576/2363/rectangle.gif

但后来我想离开左侧为300像素,但右侧更改为250像素。我可以使用4个DrawLine绘制盒子,但我不知道如何将图像挤压成新形状。我希望形状的右侧为250,左侧为300,顶部和底部为400px。

Resized http://img85.imageshack.us/img85/3479/rectangle2.gif

,因为它预计,左边和右边的大小是一样的,我不能使用的DrawImage。有没有办法将图像操作为新形状?

我看过otherquestions,但它们只适用于左侧和右侧相等的地方。

有关如何将图像挤压成没有平行边的形状的任何想法?

(如果有帮助,我很高兴以牺牲图像质量,以适应​​正确的形状。)

回答

1

你想要做的是不平凡的(但也非常强大)。

@海因兹是正确的,一般类叫做warp转换。你想要做的是特定的透视转换。在高层次上,它涉及通过变换矩阵运行各个坐标以获取其新位置,然后基于旧位置和新位置在像素值之间进行插值。

This文章谈到了一些转变,其中一个是纯粹的,所以它可能有助于整体。我不确定,我没有仔细阅读。一般来说,你想谷歌的东西近似像“C#图像转换”或“C#图像透视变换”。

根据你的使用计划,购买一个图书馆可能是最好的方式去做,尽管你自己做很多关于图像处理的知识。

1

我没有找到一个解决问题的方法,但我有一些信息可能一起帮助您:

你想要什么叫做经纱转换

据我所知,.net框架本身只支持GraphicsPath这种转换方式,即GraphicsPath.Warp方法。不幸的是,我认为这不会对你有帮助,除非你愿意使用.net GraphicsPath对象来重绘你的图像。

如果您需要在UI层直接进行转换,您的UI库可能会有所帮助:例如,Silverlight包含PlaneProjection class,可用于此类效果;在WPF中,3D引擎可能对此很有用(需要更多的编程工作)。

2

声明:我为Atalasoft工作。

我们的DotImage产品有一个叫QuadrilateralWarpCommand的命令可以做到这一点。它在DotImage Photo

相关问题