如何捕获self.view的特定大小

时间:2012-10-02 14:46:42

标签: objective-c ios uiimage capture

我有自我观点,但我只想拍摄300x320。

得到了这段代码:

UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

UIImage * imgPrintScreen = [[UIImage alloc]init];
imgPrintScreen = viewImage;

为了做到这一点,我需要在这里做些什么改变?

感谢分配!

1 个答案:

答案 0 :(得分:2)

只需更改要捕获的大小,而不是使用整个边界,请使用所需的大小。渲染将从视图的原点开始,并在它超出边界时被剪裁。如果您需要更改视图实际剪切的位置,只需在启动图像上下文后翻译上下文:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 320), YES, 0.);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

例如,如果您的视图是600x320,并且您希望捕获宽度中间的300个点,那么您将向左侧翻译150个点:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 320), YES, 0.);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, -150.f, 0.f);
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();