我正在尝试从屏幕上获取显示器指定部分的像素颜色。
我正在使用CGDIsplayCreateImage(_:)
来执行此操作,但是由于某种原因而不是创建当前打开的窗口的屏幕快照,它只是提供了墙纸和任务栏的图像。
为了可视化屏幕截图,我使用了SwiftUI视图。在我的应用程序中,我实际上不需要显示屏幕截图。
struct ScreenshotView: View {
let cgImage: CGImage
var body: some View {
Image(decorative: cgImage,scale: 3)
}
}
applicationDidFinishlaunching(_:)
方法看起来像这样。
func applicationDidFinishlaunching(_ aNotification: Notification) {
let contentRect = NSRect(x: 0,y: 0,width: 240,height: 240)
// Create the window and set the content view.
window = NSWindow(
contentRect: contentRect,styleMask: [.titled,.closable,.miniaturizable,.resizable,.fullSizeContentView],backing: .buffered,defer: false)
window.center()
window.setframeAutosaveName("Main Window")
window.contentView = NSHostingView(rootView: ScreenshotView(cgImage: CGDisplayCreateImage(CGMainDisplayID())!))
window.makeKeyAndOrderFront(nil)
}
由于XCode和其他一些应用程序已打开,因此应该为我提供所有打开的窗口的当前屏幕截图。相反,我得到了墙纸的屏幕截图和显示我的应用名称的任务栏。没有应用程序显示,并且停靠站也丢失了。
我做错了还是这是一个错误?
在this中,stackoverflow的答案表明我正确使用了该函数。