2012-06-01 43 views
1

我確定已經從各種不同的角度提出了很多次,但我在這裏還找不到答案。允許用戶在UIImage上繪製矩形,並打算裁剪圖像

我想實現 我想這樣做是爲了顯示一個UIImage,並允許用戶在圖像上繪製一個矩形,並最終裁剪他們的選擇是什麼。

研究至今 我已經在這裏找到前面的問題上,這樣處理裁剪,但是他們經常處理靜態種植區不會改變,這也導致這種機制

以下限制
  1. 您感興趣的圖片區域可能位於任何地方 ,例如,如果您嘗試裁剪道路標誌,它可能會集中在一個圖像上,但會左對齊,因此您 無法預測要裁剪哪個區域。
  2. 的大小和感興趣的區域可能會改變的規模,例如 一個圖像可能是一個特寫的是路標,因此種植面積 將更大,但另一個圖像可能已經從 距離意味着採取作物面積會更小。

通過上述兩個變量的組合,它幾乎是不可能準確預測,其中的圖像中的關注區域會是這樣,所以我依靠用戶通過能「畫」來定義這個一個圍繞我們感興趣的區域的盒子,在這種情況下是一個路標。

這是Android上的所有桃色的,因爲你可以委派所有的辛勤工作,用一個漂亮的意圖,如:

Intent intent = new Intent("com.android.camera.action.CROP");

但是,我找不到iOS的等價物。

我發現這段代碼從這個source

- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image 
{ 
    // begin a graphics context of sufficient size 
    UIGraphicsBeginImageContext(image.size); 

    // draw original image into the context 
    [image drawAtPoint:CGPointZero]; 

    // get the context for CoreGraphics 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    // set stroking color and draw circle 
    [[UIColor redColor] setStroke]; 

    // make circle rect 5 px from border 
    CGRect circleRect = CGRectMake(0, 0, 
       image.size.width, 
       image.size.height); 
    circleRect = CGRectInset(circleRect, 5, 5); 

    // draw circle 
    CGContextStrokeEllipseInRect(ctx, circleRect); 

    // make image out of bitmap context 
    UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext(); 

    // free the context 
    UIGraphicsEndImageContext(); 

    return retImage; 
} 

我相信這是裁剪一個很好的起點(但它確實麥田圈),它依賴於預先定義你想要的區域撥打CGRectMake時需要裁剪。

previous question也詳細說明如何做實際的裁剪。

我假設允許用戶繪製矩形,我需要與手勢集成?

問題: 我該如何允許用戶在圖像視圖中繪製矩形,以修剪該區域?

+0

我想這將是更容易去vith額外的UIView作爲你的UIImageView的子視圖添加 - 或簡單地在它的頂部。用戶將調整此UIView的大小,並準備裁剪時只使用其尺寸。 –

回答

2

你可以給BJImageCropper一試:

一個簡單的UIView子類,允許用戶裁剪圖像。如果你使用它,我很想知道!推特:@barrettjacobsen