我有以下代码来拍摄该应用的屏幕截图:
var imageSize = CGSize.zero
let orientation = UIApplication.shared.statusBarOrientation
if UIInterfaceOrientationIsPortrait(orientation) {
imageSize = UIScreen.main.bounds.size
} else {
imageSize = CGSize(width: UIScreen.main.bounds.size.height, height: UIScreen.main.bounds.size.width)
}
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0)
for window in UIApplication.shared.windows {
window.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
}
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.captureImageView.image = image
这是我显示相机的代码:
let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)
do {
let input = try AVCaptureDeviceInput(device: captureDevice!)
captureSession = AVCaptureSession()
captureSession?.addInput(input)
} catch {
print(error)
}
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
videoPreviewLayer?.frame = view.layer.bounds
self.cameraView.layer.addSublayer(videoPreviewLayer!)
let previewLayerConnection: AVCaptureConnection? = videoPreviewLayer?.connection
if previewLayerConnection?.isVideoOrientationSupported != nil {
previewLayerConnection?.videoOrientation = AVCaptureVideoOrientation.landscapeLeft
}
captureSession?.startRunning()
关于这个问题,我已经尝试了其他stackoverflow用户的所有尝试,但实际上并没有奏效。可能是什么原因以及如何解决?
答案 0 :(得分:0)
for window in UIApplication.shared.windows {
window.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
}
在这里您将窗口用作屏幕截图视图。默认情况下,您的窗口颜色为black
,这就是为什么您获得黑色屏幕截图的原因。
使用视图控制器子视图之一。
尝试获取具有更新代码的第一个屏幕截图。然后用相机实施。
您的代码应如下所示
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
答案 1 :(得分:0)
在我的一个项目中,我使用此功能来获取经过爬坡处理的图像。
func screenshotTaken(){
UIGraphicsBeginImageContext(self.view.bounds.size)
self.view.layer.render(in: UIGraphicsGetCurrentContext()!)
let screenShot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.captureImageView.image = screenShot
}