2010-05-24 179 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

相關問題