Tôi cần lấy nội dung của NSView
và đặt chúng vào một NSImage
, cho một dự án thử nghiệm. Điều này có thể không? Tôi đã làm một số Googling, đã thử hai phương pháp mà tôi tìm thấy - nhưng họ đã không thực sự làm việc. Bất kỳ đề xuất?Làm cách nào để chụp "ảnh chụp màn hình" của NSView?
Trả lời
[[NSImage alloc] initWithData:[view dataWithPDFInsideRect:[view bounds]]];
Cảm ơn bạn rất nhiều. – Debashis
+1 Cần lưu ý rằng, mặc dù đây là một cách đúng đắn nói chung, có một số trường hợp nó sẽ không hoạt động, ví dụ như các khung nhìn như 'NSOpenGLView' có ngữ cảnh dựng hình OpenGL của riêng chúng. Trong trường hợp đó, bạn cần lấy dữ liệu pixel trực tiếp và tạo một đại diện bitmap từ nó, điều này ít gọn gàng hơn một chút. – walkytalky
Obs: shadows và cornerRadius sẽ bị bỏ qua – codrut
tôi thinkt, Debashis đang nghĩ hơn về những thứ như http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaDrawingGuide/Images/Images.html#//apple_ref/doc/uid/TP40003290-CH208-BCIIIJFB
Greetings
liên kết đã bị hỏng – Supertecnoboff
let dataOfView = view.dataWithPDFInsideRect(view.bounds)
let imageOfView = NSImage(data: dataOfView)
Từ WWDC 2012 phiên 245 (dịch sang Swift):
let viewToCapture = self.window!.contentView!
let rep = viewToCapture.bitmapImageRepForCachingDisplayInRect(viewToCapture.bounds)!
viewToCapture.cacheDisplayInRect(viewToCapture.bounds, toBitmapImageRep: rep)
let img = NSImage(size: viewToCapture.bounds.size)
img.addRepresentation(rep)
swift 3 let rep = viewToCapture.bitmapImageRepForCachingDisplay (in: viewToCapture.bounds)! viewToCapture.cacheDisplay (in: viewToCapture.bounds, to: rep) let img = NSImage (kích thước: viewToCapture.bounds.size) img.addĐại diện (rep) – spacecash21
Lưu ý: không phải lúc nào cũng hoạt động chính xác. Tôi đang phát hành một nhãn có hệ tọa độ xoay. – Ash
Đây là giải pháp tốt nhất cho tôi, không giống như phiên bản pdf, điều này cũng chiếm các vùng tối và góc tròn. Không giống như phiên bản nắp cửa sổ, điều này chỉ chụp chế độ xem hiện tại. Mã Obj C: '- (NSImage *) screenCap { \t NSBitmapImageRep * bitmap = [self bitmapImageRepForCachingDisplayInRect: self.bounds]; \t [self cacheDisplayInRect: self.bounds toBitmapImageRep: bitmap]; \t Kết quả NSImage * = [[Phân bổ NSImage] initWithSize: self.bounds.size]; \t [kết quả bổ sungĐại diện: bitmap]; \t kết quả trả về; } ' – codrut
Những phương pháp didn 't làm việc và tại sao? –