2012-05-07 78 views
12

我被困在我的應用程序功能。我想裁剪功能類似於凸輪掃描儀裁剪。 CAM-SCANNER的屏幕是: 我創建了類似的作物視圖。裁剪UIImage像camscanner

enter image description here

enter image description here

我已經獲得的四角CGPoint。 但是我怎樣才能獲得傾斜的裁剪圖像。

如果可能,請給我一些建議。

+0

嗨,你能告訴我你是如何實現上述的事情或者如果可能的話可以請你分享任何教程或有用的鏈接? –

+0

嗨開發,你是否得到解決這個問題?請,您可以添加此功能的代碼。我需要這樣。 – Mani

回答

3

我看到2種可能性。首先是計算一個變形矩陣,使圖像偏斜,並將其安裝到視圖圖層的CATransform3D屬性中。

這很簡單,假設你知道如何形成進行拉伸的變換矩陣。我從來沒有學過如何構建能夠拉伸或傾斜圖像的變換矩陣,所以我不能提供任何幫助。我會建議谷歌搜索轉換矩陣和拉伸/傾斜。

另一種方法是將正在裁剪的圖像部分轉換爲OpenGL紋理並將紋理映射到輸出。實際的紋理繪製部分很容易,但是大約有1000公斤的OpenGL設置要做,而且爲了完成任何事情需要學習很多東西。如果你想追求這條路線,我建議使用新的iOS 5 GLKit搜索簡單的2D紋理示例。

4

這是一個透視變換問題。在這種情況下,他們正在2D平面上繪製3D投影。因爲第一個圖像具有四邊形形狀的選擇角,當您將其轉換爲矩形形狀時,則需要添加更多像素信息(interpolation)或刪除一些像素。

所以現在的實際問題是添加額外的像素信息裁剪圖像和項目它產生第二個圖像。它可以以各種方式實現:

<>您可以通過自己應用透視轉換矩陣和插值來實現它。

<>您可以使用OpenGL

<>您可以使用OpenCV。 ..還有更多的方法來實現它。

我已經使用OpenCV解決了這個問題。 OpenCV中的以下功能將幫助您實現這一目標。

  1. cvPerspectiveTransform

  2. cvWarpPerspective

首先功能將使用源和目的地投影座標計算變換矩陣。在你的情況下,src數組將在所有角落都有來自CGPoint的值。例如{(0,0)(200,0)(200,150)(0,150)},dest將具有矩形投影點。

一旦獲得轉換矩陣,您將需要將其傳遞給第二個函數。你可以訪問這個thread

OpenCV庫可能有其他幾種替代方案,但它有很好的圖像處理算法集合。

帶opencv庫的iOS應用程序可在eosgarden

+0

嘿你怎麼能得到這些廣場的CGPoint,以便我們可以繪製uiview點裁剪 – Mukesh

0

使用給出的鏈接代碼:http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

而不是使用的CGRect和CGContextClipToRect嘗試使用CGContextEOClip或CGContextClosePath

。雖然我havnt嘗試這個...但我已經嘗試關閉繪圖使用CGContextClosePath路徑上的touchesBegan和TouchesMoved和TouchesEnd事件。

希望這能對您的問題給予更多的有識之士...