我有一个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;
此代码适用于肖像图像,但不适用于景观图像,如上面的示例所示。这个错误是与我的裁剪代码有关还是与其他事情有关?
任何帮助都将不胜感激。
发布于 2015-11-09 04:45:36
最后,我不知道是什么问题,但是尝试用数学从滚动视图中裁剪图像是非常困难的!
我找到了一种非常简单的方法,就是对滚动视图中的可见内容进行屏幕截图,就像这样:
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;
我真的希望这个答案也能帮到别人!
https://stackoverflow.com/questions/33588275
复制相似问题