【发布时间】:2013-11-07 20:08:43
【问题描述】:
我有一个UIImageView,其图像为 640x1136。我希望用户能够在裁剪区域(也是 640x1136)内缩放和转换图像,然后将新裁剪的图像重新保存为 640x1136(捏/拉/滑动),所以我将其卡在 UIScrollView 中并缩小了两者它们缩小到 100x178 左右,并添加了滚动功能-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
一切正常!我可以移动图像,缩小和缩放它,它在子视图的边缘被“剪裁”了!所以现在我被困在试图弄清楚如何以最大分辨率截取它的屏幕截图?我可以使用CGContext 截取屏幕截图,它会显示正确的“裁剪”图像部分,但分辨率是 100x178,所以我将整个画面缩放到 640x1136,然后截取屏幕截图,但问题是滚动视图中的内容没有不要扩大规模,所以现在作物都搞砸了!有什么好的解决办法吗?
这是我尝试过的代码;它没有用:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(640, 1136), YES, 0.0);
UIImageView *theImageToCrop = [[UIImageView alloc] initWithFrame:CGRectMake(0-(theScrollView.contentOffset.x*(640/theScrollView.frame.size.width)), 0-(theScrollView.contentOffset.y*(1136/theScrollView.frame.size.height)), theScrollView.contentSize.width*(640/theScrollView.frame.size.width), theScrollView.contentSize.height*(1136/theScrollView.frame.size.height))];
theImageToCrop.contentMode = UIViewContentModeScaleAspectFill;
theImageToCrop.image = originalImageView.image;
CGContextRef context = UIGraphicsGetCurrentContext();
[theImageToCrop.layer renderInContext:context];
croppedImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我已经可以看出问题是当我截取最终屏幕截图时图像没有被翻译。它正在缩放到在UIImageView 中缩放到的正确大小,但未设置内容偏移量。我将它设置在我使用CGRectMake 创建的框架中,但我有一种感觉,当我使用此代码时:[theImageToCrop.layer renderInContext:context]; 大小保持不变,但原点重置为(0,0)。如何保持尺寸和原点?
【问题讨论】:
标签: ios objective-c uiscrollview crop cgcontext