Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何为Mac OS截图NSView?_Swift_Macos_Nsview - Fatal编程技术网

Swift 如何为Mac OS截图NSView?

Swift 如何为Mac OS截图NSView?,swift,macos,nsview,Swift,Macos,Nsview,我目前有一个功能,可以在Mac应用程序中创建整个窗口的屏幕截图。然而,我想针对一个特定的观点。我知道在iOS中,您可以执行以下操作: extension WKWebView { var screenshot: UIImage { if #available(iOS 10.0, *) { return UIGraphicsImageRenderer(size: bounds.size).image { _ in dr

我目前有一个功能,可以在Mac应用程序中创建整个窗口的屏幕截图。然而,我想针对一个特定的观点。我知道在iOS中,您可以执行以下操作:

extension WKWebView {

    var screenshot: UIImage {
        if #available(iOS 10.0, *) {
            return UIGraphicsImageRenderer(size: bounds.size).image { _ in
                drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
            }
        } else {
            UIGraphicsBeginImageContext(bounds.size)
            drawHierarchy(in: bounds, afterScreenUpdates: true)
            let image = UIGraphicsGetImageFromCurrentImageContext()!
            return image
        }
    }
}
如何使用AppKit而不是UIKit将其转换为Mac OS。下面是我当前为整个窗口的屏幕截图计算的属性

extension WKWebView {

    var screenshot: NSImage {
        let displayID = CGWindowID() // cgmaindisplayid
        let imageRef = CGDisplayCreateImage(displayID)
        return NSImage(cgImage: imageRef!, size: (NSScreen.main?.frame.size)!)
    }
}

您可以使用
NSView
方法
func dataWithPDF(在rect:NSRect内部)->Data

extension NSView {
    var image: NSImage? {
        return NSImage(data: dataWithPDF(inside: bounds))
    }
}

我认为这种方法并不总是有效的,因为在不锁定图像的情况下不会渲染图像。这些数据可以放置在NSPasteboard对象上、写入文件或用于创建NSImage对象。谢谢。但是,如果我使用你的代码,图像将在视网膜显示器上以72 dpi的分辨率创建。数据与绘制视图时使用的数据完全相同。没有损失,我道歉。。。我错了。我猜HEIC不支持超过72 dpi的更高分辨率。