簡體   English   中英

從可調整大小的UIImageView的圖像中裁剪部分

[英]crop section from resizeable UIImageView's image

我有一個UIImageView,它從UIImagePickerController獲取圖像。UIImageView設置為Aspect Fit Im,使用手勢識別器來移動,縮放和旋轉此UIImageView

我有第二個,小得多的UIImageView第二個UIImageView在第一個的前面並居中

我想做的是能夠移動,縮放和旋轉第一個UIImageView到位,然后按一個按鈕以創建一個僅包含原始圖像在第二個UIImageView范圍內可見的部分的新圖像。

我嘗試了很多方法來裁剪圖像而沒有成功。 我嘗試的所有操作都會裁剪圖像,但是返回的圖像不是我期望的。 我得到的結果似乎是“全尺寸”圖像頂部,右側部分的旋轉部分。

我正在使用Trevor的Bike Shed中的UIImage類別

我的代碼:

。H

@interface BubbleBossViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate>{
    IBOutlet UIImageView *smallCropperWindow;
    IBOutlet UIImageView *imageViewForChosenImage;
    IBOutlet UIView *canvas;
    CGFloat _lastScale;
    CGFloat _lastRotation;
    CGFloat _firstX;
    CGFloat _firstY;
    CAShapeLayer *_marque;

}
@property BOOL newMedia;
- (IBAction)useCamera:(id)sender;
- (IBAction)useCameraRoll:(id)sender;
- (IBAction)crop:(id)sender;

@end

相關.m- (void)crop:(id)sender {

smallCropperWindow.image=[imageViewForChosenImage.image croppedImage: (CGRect)smallCropperWindow.frame];

}

在UIImage + Resize.h中

- (UIImage *)croppedImage:(CGRect)bounds;

在UIImage + Resize.m中

- (UIImage *)croppedImage:(CGRect)bounds {
    CGFloat scale = MAX(self.scale, 1.0f);
    CGRect scaledBounds = CGRectMake(bounds.origin.x * scale, bounds.origin.y * scale, bounds.size.width * scale, bounds.size.height * scale);
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], scaledBounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:UIImageOrientationUp];
    CGImageRelease(imageRef);
    return croppedImage;
}

屏幕截圖顯示了問題: 在此處輸入圖片說明

中間的小方塊應充滿嬰兒的臉,而不是全尺寸圖片的地板一部分。

我在這里做錯了什么?

您正在進行的計算似乎不正確。 嘗試這個,

  1. 首先,您必須使圖像外觀合適。
  2. 然后找到比率heightRatio=image.size.height/imageView.frame.height;
  3. 然后找到比率weidthRatio=image.size.width/imageView.frame.width;

現在,不必傳遞smallCropperWindow.frame ,而要做三件事,

  1. 平移小作物窗口的中心。將進行大量計算,因為寬高比適合的圖像不會從imageview的原點開始。
  2. 縮放croppedWindow的寬度和高度,然后傳遞此幀進行裁剪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM