2016-09-25 35 views
7

Có thể chụp ảnh màn hình lập trình của desktop trên mac bằng Swift 3 không? Tôi không thể tìm thấy một chủ đề hoặc bài đăng trên diễn đàn về chủ đề, ngay cả trong tài liệu chính thức của apple.Lập trình Ảnh chụp màn hình | Swift 3, macOS

Tôi đã thấy điều này cho đến nay nhưng nó dường như không giúp: onetwo

+0

vì lý do bảo mật và quyền riêng tư rất đáng kể từ cả nhà phát triển và quan điểm của người dùng. – holex

+0

Có, tôi hiểu nhưng tôi không có ý định phát hành phần mềm này, nó phù hợp hơn cho việc học tập và các mục đích phổ biến trong nhà và tôi sẽ ổn nếu một cửa sổ "chấp nhận ảnh chụp màn hình" nhỏ xuất hiện. – user6879072

+1

'NSTask' -' screencapture' – vadian

Trả lời

9

Có thể của nó. Chức năng này chụp tất cả các ảnh chụp màn hình được kết nối và ghi vào đường dẫn được chỉ định dưới dạng tệp jpg. Tạo tên tệp dưới dạng dấu thời gian unix.

func TakeScreensShots(folderName: String){ 

    var displayCount: UInt32 = 0; 
    var result = CGGetActiveDisplayList(0, nil, &displayCount) 
    if (result != CGError.success) { 
     print("error: \(result)") 
     return 
    } 
    let allocated = Int(displayCount) 
    let activeDisplays = UnsafeMutablePointer<CGDirectDisplayID>.allocate(capacity: allocated) 
    result = CGGetActiveDisplayList(displayCount, activeDisplays, &displayCount) 

    if (result != CGError.success) { 
     print("error: \(result)") 
     return 
    } 

    for i in 1...displayCount { 
     let unixTimestamp = CreateTimeStamp() 
     let fileUrl = URL(fileURLWithPath: folderName + "\(unixTimestamp)" + "_" + "\(i)" + ".jpg", isDirectory: true) 
     let screenShot:CGImage = CGDisplayCreateImage(activeDisplays[Int(i-1)])! 
     let bitmapRep = NSBitmapImageRep(cgImage: screenShot) 
     let jpegData = bitmapRep.representation(using: NSBitmapImageFileType.JPEG, properties: [:])! 


     do { 
      try jpegData.write(to: fileUrl, options: .atomic) 
     } 
     catch {print("error: \(error)")} 
    } 
} 

func CreateTimeStamp() -> Int32 
{ 
    return Int32(Date().timeIntervalSince1970) 
} 
+0

Tôi chưa kiểm tra mã của bạn nhưng có vẻ như chất lượng, không giống như cách tôi đã giải quyết nó bằng cách sử dụng tập lệnh và thiết bị đầu cuối. Tôi đã không mong đợi bất kỳ câu trả lời sau khi quá lâu. – user6879072

+0

Nó hoạt động, nó thực sự thực sự tốt đẹp xử lý nhiều màn hình. – Magrafear

+0

@ B.Tekkan @Magrafear Tôi nhận được một lỗi CreateTimeStamp(): 'let unixTimestamp = CreateTimeStamp()' "sử dụng định danh chưa được giải quyết 'CreateTimeSpan'" – user6879072

2
let displayID = CGMainDisplayID() 
let imageRef = CGDisplayCreateImage(displayID) 
Các vấn đề liên quan