Tôi có một chuỗi NSView ngoài màn hình trong ứng dụng Cocoa, được sử dụng để soạn một tệp PDF để in. Các quan điểm không ở trong một NSWindow, hoặc có thể nhìn thấy trong bất kỳ cách nào.Tạo hình ảnh được chia tỷ lệ từ NSView
Tôi muốn có thể tạo hình thu nhỏ của chế độ xem đó, chính xác như PDF sẽ trông, nhưng được thu nhỏ lại để vừa với kích thước pixel nhất định (bị hạn chế với chiều rộng hoặc chiều cao). Điều này cần phải càng nhanh càng tốt, vì vậy tôi muốn tránh hiển thị cho PDF, sau đó chuyển đổi thành raster và mở rộng quy mô - Tôi muốn chuyển trực tiếp đến raster.
Tại thời điểm tôi đang làm:
NSBitmapImageRep *bitmapImageRep = [pageView bitmapImageRepForCachingDisplayInRect:pageView.bounds];
[pageView cacheDisplayInRect:pageView.bounds toBitmapImageRep:bitmapImageRep];
NSImage *image = [[NSImage alloc] initWithSize:bitmapImageRep.size];
[image addRepresentation:bitmapImageRep];
Cách tiếp cận này hoạt động tốt, nhưng tôi không thể làm việc ra làm thế nào để áp dụng một tỉ lệ với NSView trước khi render các bitmapImageRep. Tôi muốn tránh sử dụng scaleUnitSquareToSize
, bởi vì khi tôi hiểu nó, chỉ thay đổi giới hạn, chứ không phải khung của NSView.
Bất kỳ đề xuất nào về cách tốt nhất để thực hiện việc này?
Tôi đã sử dụng 'bitmapImageRepForCacheDisplayInRect:' và 'cacheDisplayInRect: toBitmapImageRep:' để tạo hình thu nhỏ động cho ứng dụng sổ ghi chép khi khởi chạy. Với> 40 trang (NSViews lớp được lưu trữ) với nhiều nội dung trực quan, việc tạo hình thu nhỏ đã mất gần 90 giây. Đây không phải là trường hợp trong các phiên bản trước của macOS. Tôi đã thay thế phương pháp này bằng cách tiếp cận @ tomtaylor ở trên, sử dụng thang tỷ lệ 1.0 (vì tôi cần hình thu nhỏ để thu nhỏ trở lên kích thước đầy đủ) và thế hệ hình thu nhỏ giảm xuống 20 giây (nền), với khoảng một nửa dung lượng bộ nhớ ảo! – Dalmazio