如何以编程方式将桌面图像设置为 NSWindow objective c?
How to set desktop image to NSWindow programmatically objective c?
如何在 mac os 应用程序中以编程方式将桌面图像设置为 NSWindow 背景图像。 Suppose 如果我点击一个按钮,那么无论桌面图像是什么,它都应该应用于 NSWindow 背景。
要获取屏幕的桌面图像,您可以使用 NSWorkspace
提供的方法。
方法desktopImageURLForScreen:
returns一个URL图片文件,而方法desktopImageOptionsForScreen:
returns一个桌面图片选项的字典-如何图片是否应该缩放,是否应该平铺等
使用这些方法和 NSImageView
您应该能够显示适当缩放、平铺和对齐的桌面图像作为 window 背景。如果你在多屏系统上支持windows跨屏,它会稍微复杂一点,但方法本质上是一样的。
HTH
如果应用未经过沙盒化,CRD 建议会起作用。如果是,那么你不能用 NSWorkspace.shared.desktopImageURL(for: screen)
.
做任何事情
您可以玩 Core Graphics 并抓取桌面图片:
extension NSImage {
static func desktopPictures() -> [NSImage] {
let info = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [[ String : Any]]
var images = [NSImage]()
for window in info! {
// we need windows owned by Dock
let owner = window["kCGWindowOwnerName"] as! String
if owner != "Dock" {
continue
}
// we need windows named like "Desktop Picture %"
let name = window["kCGWindowName"] as! String
if !name.hasPrefix("Desktop Picture") {
continue
}
// this belongs to a screen
let index = window["kCGWindowNumber"] as! CGWindowID
let cgImage = CGWindowListCreateImage(CGRect.infinite, CGWindowListOption(arrayLiteral: CGWindowListOption.optionIncludingWindow), index, CGWindowImageOption.nominalResolution)
images.append(NSImage(cgImage: cgImage!, size: NSMakeSize(CGFloat(cgImage!.width), CGFloat(cgImage!.height))))
}
// return the array of Desktop images
return images
}
}
然后获取桌面图像
NSImage.desktopPictures()
感谢Cocoa: take screenshot of desktop wallpaper (without icons and windows) and
如何在 mac os 应用程序中以编程方式将桌面图像设置为 NSWindow 背景图像。 Suppose 如果我点击一个按钮,那么无论桌面图像是什么,它都应该应用于 NSWindow 背景。
要获取屏幕的桌面图像,您可以使用 NSWorkspace
提供的方法。
方法desktopImageURLForScreen:
returns一个URL图片文件,而方法desktopImageOptionsForScreen:
returns一个桌面图片选项的字典-如何图片是否应该缩放,是否应该平铺等
使用这些方法和 NSImageView
您应该能够显示适当缩放、平铺和对齐的桌面图像作为 window 背景。如果你在多屏系统上支持windows跨屏,它会稍微复杂一点,但方法本质上是一样的。
HTH
如果应用未经过沙盒化,CRD 建议会起作用。如果是,那么你不能用 NSWorkspace.shared.desktopImageURL(for: screen)
.
您可以玩 Core Graphics 并抓取桌面图片:
extension NSImage {
static func desktopPictures() -> [NSImage] {
let info = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [[ String : Any]]
var images = [NSImage]()
for window in info! {
// we need windows owned by Dock
let owner = window["kCGWindowOwnerName"] as! String
if owner != "Dock" {
continue
}
// we need windows named like "Desktop Picture %"
let name = window["kCGWindowName"] as! String
if !name.hasPrefix("Desktop Picture") {
continue
}
// this belongs to a screen
let index = window["kCGWindowNumber"] as! CGWindowID
let cgImage = CGWindowListCreateImage(CGRect.infinite, CGWindowListOption(arrayLiteral: CGWindowListOption.optionIncludingWindow), index, CGWindowImageOption.nominalResolution)
images.append(NSImage(cgImage: cgImage!, size: NSMakeSize(CGFloat(cgImage!.width), CGFloat(cgImage!.height))))
}
// return the array of Desktop images
return images
}
}
然后获取桌面图像
NSImage.desktopPictures()
感谢Cocoa: take screenshot of desktop wallpaper (without icons and windows) and