2014-05-08 94 views
0

我一直在四處尋找找到一種方法來裁剪圖像(imageView)內滾動查看。我需要在這裏實現的是用戶捏放大圖像,(這是很好的工作),然後能夠僅縮放在縮放後顯示在屏幕上的圖像部分。所以換句話說,如果我有一系列的數字1到10,用戶縮放它只能看到數字4和5,當用戶點擊裁剪時,我只需要在裁剪時可見的4和5的圖像。我使用這個代碼...裁剪UIImage從捏/縮放狀態

- (UIImage *)croppedImageWithImage:(UIImage *)image zoom:(CGFloat)zoom 
{ 
    CGFloat zoomReciprocal = 1.0f/zoom; 
    CGRect croppedRect = CGRectMake(self.scrollView.contentOffset.x*zoom, 
            self.scrollView.contentOffset.y*zoom, 
            image.size.width * zoomReciprocal, 
            image.size.height * zoomReciprocal); 

    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([image CGImage], croppedRect); 

    UIImage* croppedImage = [[UIImage alloc] initWithCGImage:croppedImageRef scale:[image scale] orientation:[image imageOrientation]]; 

    CGImageRelease(croppedImageRef); 

    return croppedImage; 
} 

這種方法但是裁剪圖像,x和y的值是不正確的......我有什麼做的就是我的作物面積的正確x和y ?

僅供參考..我試圖裁剪的圖像是2200 * 3200,不知道這是否會有所作爲?

回答

3

我解決了它!以下是可能遇到此問題的其他人的更新方法。

- (UIImage *)croppedImageWithImage:(UIImage *)image zoom:(CGFloat)zoom { 
    CGFloat zoomReciprocal = 1.0f/zoom; 
    CGFloat xOffset = image.size.width/self.scrollViewBackground.contentSize.width; 
    CGFloat yOffset = image.size.height/self.scrollViewBackground.contentSize.height; 

    CGRect croppedRect = CGRectMake(self.scrollViewBackground.contentOffset.x * xOffset, 
            self.scrollViewBackground.contentOffset.y * yOffset, 
            image.size.width * zoomReciprocal, 
            image.size.height * zoomReciprocal); 

    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([image CGImage], croppedRect); 
    UIImage *croppedImage = [[UIImage alloc] initWithCGImage:croppedImageRef scale:[image scale] orientation:[image imageOrientation]]; 
    CGImageRelease(croppedImageRef); 
    return croppedImage; 

}