Цель-C: захват скриншота всех видов в пользовательской рамке
У меня есть игра, в которой пользователи могут создавать собственные уровни и загружать их на мой сервер для других пользователей, и я хочу получить скриншот "области действия", прежде чем пользователь проверит свой уровень, чтобы загрузить его на мой сервер в виде "предварительного изображения".
Я знаю, как получить скриншот всего представления, но я хочу определить его в пользовательский кадр. Рассмотрим следующий образ:
Я хочу просто сделать скриншот области красным цветом, " область действия.- А Я Могу добиться этого?
2 ответа:
Просто вам нужно сделать прямую кишку из области, которую вы хотите захватить, и передать прямую кишку в методе.
Свифт 3.x:
extension UIView { func imageSnapshot() -> UIImage { return self.imageSnapshotCroppedToFrame(frame: nil) } func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage { let scaleFactor = UIScreen.main.scale UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor) self.drawHierarchy(in: bounds, afterScreenUpdates: true) var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() if let frame = frame { let scaledRect = frame.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor)) if let imageRef = image.cgImage!.cropping(to: scaledRect) { image = UIImage(cgImage: imageRef) } } return image } } //How to call : imgview.image = self.view.imageSnapshotCroppedToFrame(frame: CGRect.init(x: 0, y: 0, width: 320, height: 100))
Цель С:
-(UIImage *)captureScreenInRect:(CGRect)captureFrame { CALayer *layer; layer = self.view.layer; UIGraphicsBeginImageContext(self.view.bounds.size); CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame); [layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenImage; } //How to call : imgView.image = [self captureScreenInRect:CGRectMake(0, 0, 320, 100)];
- (UIImage *) getScreenShot { UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; CGRect rect = [keyWindow bounds]; UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); [keyWindow.layer renderInContext:context]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; }