- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以像裁剪图像一样裁剪视频预览层?
image
.clipShape(Circle())
.overlay(Circle().stroke(Color.green, lineWidth: 1))
视频预览层来自哪里:
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = CGRect(x: 20, y: 60, width: 335, height: 200)
previewLayer.videoGravity = .resizeAspectFill
view.layer.addSublayer(previewLayer)
我一直在寻找,但没有找到。谢谢!
最佳答案
在 macOS 10.15 Catalina 上测试
下面的演示代码是针对 SwiftUI/macOS 的,但它可能会有所帮助,因为只需对代码进行少量更改即可使其与 iOS 保持一致。
注意:这是一个演示,所以代码有点乱
结果如下:
这是演示模块代码:
import SwiftUI
import AppKit
import AVFoundation
class PreviewView: NSView {
private var captureSession: AVCaptureSession?
init() {
super.init(frame: .zero)
var allowedAccess = false
let blocker = DispatchGroup()
blocker.enter()
AVCaptureDevice.requestAccess(for: .video) { flag in
allowedAccess = flag
blocker.leave()
}
blocker.wait()
if !allowedAccess {
print("!!! NO ACCESS TO CAMERA")
return
}
// setup session
let session = AVCaptureSession()
session.beginConfiguration()
// this part might be different in iOS
let videoDevice = AVCaptureDevice.default(for: .video)
guard let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice!),
session.canAddInput(videoDeviceInput)
else { return }
session.addInput(videoDeviceInput)
session.commitConfiguration()
self.captureSession = session
// instead of below, use layerClass on iOS
self.wantsLayer = true
self.layer = AVCaptureVideoPreviewLayer()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var videoPreviewLayer: AVCaptureVideoPreviewLayer {
return layer as! AVCaptureVideoPreviewLayer
}
override func viewDidMoveToSuperview() { // on iOS .didMoveToSuperview
super.viewDidMoveToSuperview()
if nil != self.superview {
self.videoPreviewLayer.session = self.captureSession
self.videoPreviewLayer.videoGravity = .resizeAspect
self.captureSession?.startRunning()
} else {
self.captureSession?.stopRunning()
}
}
}
// for iOS NSView just rename to UIView
struct PreviewHolder: NSViewRepresentable {
func makeNSView(context: NSViewRepresentableContext<PreviewHolder>) -> PreviewView {
PreviewView()
}
func updateNSView(_ uiView: PreviewView, context: NSViewRepresentableContext<PreviewHolder>) {
}
typealias NSViewType = PreviewView
}
struct DemoPreviewLayer: View {
var body: some View {
VStack {
PreviewHolder()
.mask(Circle())
}.frame(width: 400, height: 300)
}
}
struct DemoPreviewLayer_Previews: PreviewProvider {
static var previews: some View {
DemoPreviewLayer()
}
}
关于ios - 视频预览的自定义形状 : AVCaptureVideoPreviewLayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58931747/
我有这段代码,它发出黄色警告。我不知道如何编码,所以黄色警告消失了。从 Swift-2 -> 3 -> 4 转换后尝试清理我的代码。 if let previewLayer = AVCaptureVi
如何一次在屏幕上显示多个相机预览? 如果我开始一个新的 AVCaptureSession,另一个就会停止。如果我使用与另一个 session 相同的 session 初始化一个新的 AVCapture
我正在开发一个允许用户拍照的应用程序。我已经开始使用AVCam苹果提供了,但我实际上有一个问题只是我无法将相机层放置在我想要的位置,但它会自动放置在 View 的中心 在左侧,您可以看到我实际拥有的内
我在将 AVCaptureVideoPreviewLayer 安装在其父级范围内时遇到问题。 这是上下文代码: capturePreview = AVCaptureVideoPreviewLa
当我尝试扫描条形码时,我仍然将 AVCaptureVideoPreviewLayer 添加到我的整个 View 中,如果我将条形码放在 View 中心,它会扫描。请帮我解决问题 最佳答案 AVCapt
我试图首先让我的应用程序显示广角相机的相机预览。但我所做的只是没有显示出来。 (该应用程序具有视频和音频权限,正在 iPhone 7 Plus 上进行测试) 这是我的 session 配置代码: fu
我正在使用一个库,使用相机和视频在我的 swift 应用程序上创建自定义相机 https://github.com/yonat/CameraBackground 但是我遇到了延迟,当闪光灯设置关闭时,
是否可以像裁剪图像一样裁剪视频预览层? image .clipShape(Circle()) .overlay(Circle().stroke(Color.gr
我在 AVCaptureVideoPreviewLayer 方面遇到问题。我是这样创建的: self.previewLayer = [AVCaptureVideoPreviewLayer layerW
我正在尝试从 ios 设备的摄像头获取提要以显示在屏幕上,但我不想使用 ImagePickerController,因为我想更好地控制屏幕上 View 的外观,并且我想要更多地控制相机的光圈和采样率。
当我将我的设备从横向向左旋转到横向或从横向向右旋转时,AVCaptureVideoPreviewLayer 会上下颠倒。当我将设备从纵向模式旋转到横向模式时,它工作得很好。这是我的代码 { ov
我正在设置带有预览层的自定义相机。一切正常。我设置了方向和所有内容。请问如何设置自动对焦?第二,如何启动摄像头录制视频?(因为它只是显示前置摄像头显示的内容,你看到你了)...但是我想开始录制。 我更
我正在尝试在我的应用程序中显示自定义摄像头 View 的视频预览,但目前预览非常偏离中心 - 使用前置摄像头时尤其明显。 我是这样定位的: if let previewLayer = AVCaptur
我使用 AVCaptureVideoPreviewLayer 来显示预览视频层、来自该预览的样本图像并对其进行一些处理。该处理识别图像上的一些点并将它们返回。我想(几乎)实时地在预览层上显示这些点。
我有一个 iPhone 相机应用程序,我在其中使用了 AVCaptureVideoPreviewLayer。当有人拍摄照片/静止图像时,这会显示在新的 ViewController 中。一旦这个 Vi
我有一个 AVCaptureVideoPreviewLayer,我想将它填充到我的 UIView 的边界。不过,它似乎无法正常工作。它只显示在大约 3/4 的屏幕上。 CGRect bounds=se
我有一个应用程序可以添加一些实时动画和图像以在 AV Foundation 相机中预览 View 。我可以做“硬件屏幕截图”(按住侧边按钮和提高音量按钮),没问题。但是,我需要一个制作屏幕截图的按钮。
我正在使用 AVCaptureVideoPreviewLayer 来允许用户从 iPhone 相机拍摄照片。所以我有一个 AVCaptureSession,输入为 AVCaptureDeviceInp
如何获取 AVCaptureVideoPreviewLayer 中的图像大小: self.cameraPreviewLayer.frame = self.cameraView.frame; // (0
我目前正在我的 Swift 应用程序中处理 QR 扫描 View 。我想将 VideoPreview 置于 View 中间。 View 看起来像这样: View (白色)称为 ScanView,我想让
我是一名优秀的程序员,十分优秀!