Снимок экрана в macOS не сохраняет изображение - PullRequest
0 голосов
/ 29 марта 2019

Ниже приведен код для 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)
}
...