在 vb.net 中操作/调整大小/缩放图像
Posted
技术标签:
【中文标题】在 vb.net 中操作/调整大小/缩放图像【英文标题】:Manipulating / Resizing / Scaling an image in vb.net 【发布时间】:2010-05-24 22:22:59 【问题描述】:假设我有一个 400 像素 x 300 像素的矩形。然后假设我想在其中加载图像。使用Sytem.Drawing.DrawImage,所有这些都非常容易。
Rectangle http://img576.imageshack.us/img576/2363/rectangle.gif
但是我想将左侧保留为 300 像素,但将右侧更改为 250 像素。我可以使用 4 DrawLines 来绘制框,但我不知道如何将图像压缩成新形状。我希望形状的右侧为 250,左侧为 300,顶部和底部为 400px。
Resized http://img85.imageshack.us/img85/3479/rectangle2.gif
我不能使用 DrawImage,因为它希望左右尺寸相同。有没有办法将图像操纵成新的形状?
我看过otherquestions,但它们只适用于左右两侧相等的情况。
关于如何将图像压缩成没有平行边的形状有什么想法吗?
(如果有帮助,我很乐意牺牲图像质量以适应正确的形状。)
【问题讨论】:
【参考方案1】:免责声明:我为 Atalasoft 工作。
我们的 DotImage 产品有一个名为 QuadrilateralWarpCommand 的命令可以执行此操作。它在DotImage Photo。
【讨论】:
【参考方案2】:你想做的事不平凡(但也很强大)。
@Heinzi 是正确的,通用类称为经纱变换。您正在尝试做的具体是透视转换。在高层次上,它涉及通过变换矩阵运行各个坐标以获得它们的新位置,然后根据新旧位置在像素值之间进行插值。
This 文章讨论了一些转换,其中一个是纯粹的,因此总体上可能会有所帮助。我不确定,我没有仔细阅读它。一般来说,您想在 Google 上搜索类似“c# image transformation”或“c# image perspective transform”之类的东西。
根据您打算使用它的目的,购买一个库可能是最好的方法,尽管通过自己动手来学习图像处理还有很多。
【讨论】:
【参考方案3】:我没有找到解决您问题的方法,但我有一些信息可能对您有所帮助:
你想要的叫做 warp 变换。
据我所知,.net 框架本身只支持GraphicsPath
的这种转换,即GraphicsPath.Warp 方法。不幸的是,我认为这对您没有帮助,除非您愿意使用 .net GraphicsPath 对象重绘您的图像。
如果您需要直接在 UI 层进行转换,您的 UI 库可能会有所帮助:例如,Silverlight 包含 PlaneProjection class,可用于此类效果;在 WPF 中,3D 引擎可能对此有用(需要更多的编程工作,通过)。
【讨论】:
以上是关于在 vb.net 中操作/调整大小/缩放图像的主要内容,如果未能解决你的问题,请参考以下文章
imageresizing.net 插件允许图像调整大小/缩放/裁剪