在 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 中操作/调整大小/缩放图像的主要内容,如果未能解决你的问题,请参考以下文章

在图像移动/调整大小/旋转操作中在图像周围放置一些指示符

Numpy 调整大小/重新缩放图像

imageresizing.net 插件允许图像调整大小/缩放/裁剪

用户在 iPhone 应用程序中调整图像大小

iPhone SDK 用 2 根手指缩放/调整图像大小!!帮助

在summernote上插入图像后调整图像大小