2015-05-05 30 views
1

許多問題都可以在SO上,但不幸的是我無法解決我的問題,使用它們。 我在我的相機上添加了覆蓋視圖,現在想要在藍色邊框內(僅水瓶)獲取圖像。作物形象與慾望Rect

我試圖代碼塊像下面

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 

[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 

CGImageRelease(imageRef); 

,但有兩個問題

  1. 無論是裁剪圖像變得過於龐大
  2. 取向的變化爲-90。

對於第1點,我想我提供的cropRect太小,這就是爲什麼它顯示圖像的一小部分太放大視圖。在我的其他viewController我有UIImageView(其中裁剪圖像需要顯示)與藍色邊框內的相機矩形大小相同。 所以問題是如何裁剪圖像,我應該提供什麼值cropRect

enter image description here

回答

0

假設圖像尺寸1280 * 1080和您的作物視圖的尺寸爲320 * 480,您需要做以下

  1. 轉換你的作物視圖的幀圖像尺寸矩形(0,0 ,1280,1080)通過找到所述比例因子通過比例因子

    float xScale = 1280/320; 
    float yScale = 1080/480; 
    
    float scaleFactor = (xScale < yScale) ? xScale : yScale; 
    
  2. 乘法cropView幀。這會將屏幕座標映射到圖像大小座標。然後使用新的cropRect與

    CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 
    

不同方向的問題是,CoreGraphics中使用不同的座標系作爲比較,查看的座標系。 Quartz 2D Coordinate Systems所以嘗試設置

[UIImage imageWithCGImage:imageRef].imageOrientation = largeImage.imageOrientation 
+0

我需要在'cropRect'中提供什麼值? – Ans

+0

假設圖像大小爲1280 * 1080並且裁切爲{40,50,320,480}。通過{40 * scaleFactor,50 * scaleFactor,320 * scaleFactor,480 * scaleFactor}來轉換croprect,並使用這個新矩形爲'imageOrientation'剪輯 –

+0

它說'賦值爲只讀屬性。' – Ans