我在Cocoa應用程序中有一系列屏幕外NSView,用於組合PDF打印。視圖不在NSWindow中,或以任何方式顯示。從屏幕外生成縮放圖像NSView
我希望能夠生成該視圖的縮略圖圖像,完全按照PDF查看,但按比例縮小以適合某個像素大小(限制爲寬度或高度)。這需要儘可能快,所以我想避免渲染爲PDF,然後轉換爲光柵和縮放 - 我想直接轉到光柵。
在我做的那一刻:
NSBitmapImageRep *bitmapImageRep = [pageView bitmapImageRepForCachingDisplayInRect:pageView.bounds];
[pageView cacheDisplayInRect:pageView.bounds toBitmapImageRep:bitmapImageRep];
NSImage *image = [[NSImage alloc] initWithSize:bitmapImageRep.size];
[image addRepresentation:bitmapImageRep];
這種方法是行之有效的,但我不能工作,如何渲染bitmapImageRep之前應用的縮放比例調整的NSView。我想避免使用scaleUnitSquareToSize
,因爲據我所知,它只改變邊界,而不是NSView的框架。
有關這麼做的最佳方式的任何建議?
我正在使用'bitmapImageRepForCacheDisplayInRect:'和'cacheDisplayInRect:toBitmapImageRep:'在發佈時動態生成筆記本應用程序的縮略圖。使用大量可視內容的大於40頁(分層託管的NSViews),生成縮略圖的時間將接近90秒。以前版本的macOS中並不是這種情況。我用上面的@ tomtaylor的方法替換了這個方法,使用了1.0的縮放比例(因爲我需要縮略圖將流暢地向上縮放到全尺寸),縮略圖生成降到20秒(背景),大約有一半的虛擬內存使用! – Dalmazio 2017-07-09 00:49:18