Ниже приведен код для macOS, который намеревается сделать снимок экрана всего экрана и каждого окна в кадре, а затем сохранить его на рабочем столе.При вызове функции скриншота ничего не происходит. Я попытался записать изображение на консоль, чтобы проверить, что сохраняется, и оно имеет ширину и высоту 1x1.Есть ли идея, что может быть причиной этого?
func screenshot(){
let windowImage: CGImage =
CGWindowListCreateImage(.infinite, .optionIncludingWindow, kCGNullWindowID,
[.boundsIgnoreFraming, .nominalResolution])!
print(windowImage)
let unixTimestamp = CreateTimeStamp()
let filename = NSHomeDirectory()
var paths = NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true) as [String]
let homeDirURL = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("/Desktop/screenshot.jpg")
print(homeDirURL.path)
let bitmapRep = NSBitmapImageRep(cgImage: windowImage)
let jpegData = bitmapRep.representation(using: NSBitmapImageRep.FileType.jpeg, properties: [:])!
do {
try jpegData.write(to: homeDirURL, options: .atomic)
} catch {
print("error: \(error)")
}
}
Изображение выводится на консоль:
<CGImage 0x101116a40> (DP)
<<CGColorSpace 0x600002601ec0> (kCGColorSpaceDeviceRGB)>
width = 1, height = 1, bpc = 8, bpp = 32, row bytes = 4
kCGImageAlphaPremultipliedFirst | 0 (default byte order) | kCGImagePixelFormatPacked
is mask? No, has masking color? No, has soft mask? No, has matte? No, should interpolate? No
/Users/adrianalonzo//Desktop/screenshot.jpg
Обновление: исправлены параметры скриншота.Код теперь работает (:
func screenshot(){
let windowImage: CGImage = CGWindowListCreateImage(CGRect.infinite, .optionAll, kCGNullWindowID, .nominalResolution)!
print(windowImage)
let unixTimestamp = CreateTimeStamp()
let filename = NSHomeDirectory()
var paths = NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true) as [String]
let homeDirURL = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("/Desktop/screenshot_\(unixTimestamp).jpg")
print(homeDirURL.path)
let bitmapRep = NSBitmapImageRep(cgImage: windowImage)
let jpegData = bitmapRep.representation(using: NSBitmapImageRep.FileType.jpeg, properties: [:])!
do {
try jpegData.write(to: homeDirURL, options: .atomic)
} catch {
print("error: \(error)")
}
}
func CreateTimeStamp() -> Int32
{
return Int32(Date().timeIntervalSince1970)
}