我的UIScrollView
内有UIImageView
。对于我的应用程序的这一部分,用户可以从他们的相机胶卷中选择照片并缩放并裁剪它们。
我已成功让用户可以选择不同的照片,然后放大和缩小&平移图像。此外,用户可以缩小以使图像中心垂直或水平,具体取决于图像是纵向还是横向。
问题是,我尝试将滚动视图中可见矩形的照片裁剪为新图像,但它仅适用于肖像照片。
这是一个工作然后不工作的例子:
以下是缩小以适合屏幕的肖像图像:
接下来,我放大图像,以便没有黑色空间。
最后,我裁剪照片,你可以看到它在左上角完美裁剪。
但是,出于某些原因,当我尝试使用风景图像进行此操作时,裁剪会混乱?!这是一个不起作用的例子。
以下是缩小的风景图片。
接下来,我放大,因此没有留下黑色空间。请注意我是如何专门放大的,因此照片中没有白板的物理边框。
现在,我像以前一样裁剪照片并且没有正确裁剪。注意图像的左上角如何与之前不同。它似乎已缩小,您可以看到白板的更多底部。
我需要弄清楚为什么会发生这种情况以及如何解决它。
以下是我用来从UIScrollView
裁剪照片的确切代码。
//Get the scale
float scale = 1.0f/_libraryScrollView.zoomScale;
//Create a new rect
CGRect visibleRect;
visibleRect.origin.x = _libraryScrollView.contentOffset.x * scale;
visibleRect.origin.y = _libraryScrollView.contentOffset.y * scale;
visibleRect.size.width = _libraryScrollView.bounds.size.width * scale;
visibleRect.size.height = _libraryScrollView.bounds.size.height * scale;
//Get the source image
UIImage *src = libraryPreviewImageView.image;
//Create the new cropped image with the rect
CGImageRef cr = CGImageCreateWithImageInRect(src.CGImage, visibleRect);
UIImage *finalImage = [[UIImage alloc]initWithCGImage:cr];
//Set the new image to the preview image view
self.imagePreviewView.image = finalImage;
此代码适用于纵向图像,但不适用于横向图像,如上例所示。这个错误与我的裁剪代码有关,还是与其他东西有关?
任何帮助都将不胜感激。
答案 0 :(得分:0)
最后,我不知道问题是什么,但是尝试使用数学从滚动视图中裁剪图像非常困难!
我找到了一种非常简单的方法,就是在滚动视图中拍摄可见内容的屏幕截图,它就像这样简单:
UIGraphicsBeginImageContextWithOptions(_libraryScrollView.bounds.size, YES, [UIScreen mainScreen].scale);
CGPoint offset = _libraryScrollView.contentOffset;
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y);
[_libraryScrollView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Set the new image to the preview image view
self.imagePreviewView.image = finalImage;
我真的希望这个答案也可以帮助其他人!