我在Cocoa应用程序中有一系列屏幕外NSView,用于组合PDF进行打印 . 这些观点不在NSWindow中,也不以任何方式显示 .
我希望能够生成该视图的缩略图,就像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的框架 .
有关最佳方法的任何建议吗?
2 回答
这就是我最终做的,它完美地运作 . 我们直接绘制到
NSBitmapImageRep
,但事先使用CGContextScaleCTM
显式缩放上下文 .graphicsContext.graphicsPort
为NSGraphicsContext
提供了CGContextRef
的句柄 .如何使用
scaleUnitSquareToSize:
然后传入一个较小的矩形到bitmapImageRepForCachingDisplayInRect:
和cacheDisplayInRect:toBitmapImageRep:
?所以,如果你将它缩小2倍,你就会将一个矩形传递给一半有边界和高度 .