【发布时间】:2016-02-08 20:50:10
【问题描述】:
我有一个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;
此代码适用于纵向图像,但不适用于横向图像,如上面示例中所示。此错误与我的裁剪代码有关还是与其他问题有关?
任何帮助将不胜感激。
【问题讨论】:
标签: ios objective-c image crop cgrect