macos - 对于macOS Cocoa,如何指定屏幕上的某个窗口或矩形进行截图?

标签 macos user-interface cocoa screenshot

我编写了一个用于测量图像文件的 macOS 应用程序,我希望添加一个捕获屏幕截图的功能。我希望它有一个用户界面来执行此操作,就像 macOS 应用程序“预览”所具有的那样。

要使用其屏幕截图功能,请执行"file">“截屏”,然后会出现一个包含以下选项的子菜单:

  • 来自选择...
  • 从窗口...
  • 从整个屏幕

“从选择...”允许您通过单击并拖动来选择屏幕上的矩形。

“从窗口...”让您选择一个应用程序窗口。

“从整个屏幕”就是它所说的。

我可以找到将屏幕截图作为图像对象的代码,但我无法找到用户界面部分(用于选择矩形或窗口的部分)的任何代码。有谁知道这是怎么做到的吗?或者有一些代码可以做到这一点。

最佳答案

以下代码应该为您提供一个窗口截图:

@objc func myBtnAction(_ sender:AnyObject ) {
 let windowID : Int = window!.windowNumber
 let windowImage: CGImage? = CGWindowListCreateImage(.null, .optionIncludingWindow, CGWindowID(windowID), [.nominalResolution])
 let bitmapRep = NSBitmapImageRep(cgImage: windowImage!)
 let image = NSImage()
 image.addRepresentation(bitmapRep)
 let pngData = bitmapRep.representation(using: .png, properties:[:])
 // your fileURL here
 let fileURL = URL(fileURLWithPath: "/Users/xxxx/Desktop/WndShot.png")
 do {
   try pngData!.write(to: fileURL)
   print("File saved: \(fileURL.absoluteURL)")
   } catch {
   print(error.localizedDescription)
  }
}

我关闭了沙盒。

关于macos - 对于macOS Cocoa,如何指定屏幕上的某个窗口或矩形进行截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61731812/

相关文章:

c++ - Mac OS X 声音输出

xcode - Xcode 4-启动可执行文件时出错

html - 汉堡菜单 : how do I make the spaces between checkbox label "slices" clickable?

java - 使用属性绑定(bind)Javafx获取圆心

objective-c - ASIHttprequest 与 Apache CXF Restful Web 服务

cocoa - NSArrayController "Content set"绑定(bind)到 NSTreeController 问题

objective-c - 围绕某些 NSRect 剪切 NSImage

cocoa - 苹果系统。如何禁用暴露

java - 如何将 Eclipse 项目从 Windows 导入到 Mac OS

c++ - 用于 C 或 C++ 的类似于 SWT 的 GUI 工具包