[英]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;
}
屏幕截圖顯示了問題:
中間的小方塊應充滿嬰兒的臉,而不是全尺寸圖片的地板一部分。
我在這里做錯了什么?
您正在進行的計算似乎不正確。 嘗試這個,
heightRatio=image.size.height/imageView.frame.height;
weidthRatio=image.size.width/imageView.frame.width;
現在,不必傳遞smallCropperWindow.frame
,而要做三件事,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.