1

我有一个自定义 NSView,它在我的应用程序中绘制图表。我正在生成一个包含图像的 PDF。在 iOS 中,我使用如下代码执行此操作:

UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
[self drawRect:self.frame];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

在 iOS 中,显示器是视网膜,这意味着图像非常高分辨率,但是,我现在正尝试在我的 Mac 应用程序中执行此操作,并且图像质量很差,因为非视网膜 Mac 会生成非高分辨率图像的版本。

当我使用它来生成图像时,我想强制我的 NSView 表现得好像它是视网膜一样。这样,当我将图像放入我的 PDF 时,它的分辨率会更高。现在,它非常模糊,没有吸引力。

4

2 回答 2

0

当放大到足够大时,即使是 Retina 位图也会变得模糊且没有吸引力。假设视图在 中绘制其内容drawRect:,而不是试图以固定分辨率将视图呈现为 PDF,更好的方法是直接绘制到PDF 图形上下文中。这将产生一个很好的可扩展 PDF。绘图代码将需要被考虑在内,以便它可以用于视图drawRect:和 PDF。

此外,iOS 文档指出您永远不应该给drawRect:自己打电话。调用renderInContext:视图层,或使用较新的drawViewHierarchyInRect:afterScreenUpdates:.

于 2015-05-04T21:57:28.770 回答
0

您可以调用-[NSView dataWithPDFInsideRect:]以从视图中的绘图中获取 PDF 数据。例如:

NSData* data = [someView dataWithPDFInsideRect:someView.bounds];
[data writeToFile:@"/tmp/foo.pdf" atomically:YES];

您的视图及其子视图所做的任何矢量绘图(例如文本、Bezier 路径等)最终都将在 PDF 中作为可缩放矢量图形。

于 2015-05-04T22:08:56.840 回答