如何让CGImageForProposedRect在Retina Mac上提供1:1像素数据

时间:2014-02-18 00:38:19

标签: macos nsimage cgimage

在我们的应用中,我们正在创建PDF NSImage(因此可扩展),然后使用CGImage例程将该数据写入TIFF文件。这在非视网膜显示Macintoshes上工作正常,但在视网膜机器上,返回的数据是我们期望的分辨率的两倍(就像屏幕一样)。

我们正在使用的代码工作采用新形成的NSView子类,引用要绘制的数据(不是原始的屏幕视图)作为printingMapView。

NSData *pdfData = [printingMapView dataWithPDFInsideRect: frame];

NSImage *image = [[NSImage alloc] initWithData: pdfData];
[image setSize: size];

NSRect pRect = NSMakeRect( 0, 0, [image size].width, [image size].height);

CGImageRef cgImage = [image CGImageForProposedRect: &pRect context: NULL hints:NULL];

我已经四处寻找可以提交给CGImageForProposedRect:context:hints电话的任何提示,但Apple文档中没有任何关于内容规模的内容。

除了创建完整尺寸的NSBitmapImageRep并将其作为context参数传递给CGImageForProposedRect:context:hints之外,有没有办法做到这一点?

这似乎在操作过程中可能会占用大量内存。

1 个答案:

答案 0 :(得分:1)

因此CGImageForProposedRect会返回1:1像素数据,如果你从大小加倍的函数中获取CGImage,那么NSImage的NSImageRep的大小也必须加倍。检查您的代码,看看您是否有任何对NSImage drawInRect的调用,您正在写入视网膜上下文。这就是发生在我身上的事情。