NSString drawAtPoint - 模糊

时间:2011-01-12 15:56:27

标签: objective-c cocoa macos

我一直在尝试在我的应用程序中将NSString添加到NSImage。由于某种原因,它似乎非常模糊和嘈杂。以下是保存为jpeg的输出。

http://i.stack.imgur.com/QHVQF.jpg

我已经读过它可能是因为它在一个非圆形数字的点上绘制,但它似乎没有改变任何东西。我确保绳子完全是整数。

以下是我添加文字的方式:

[generatedRectangle lockFocus];
//Draw according to the settings
[color set];
NSRectFill(NSMakeRect(0, 0, sizeX, sizeY));


NSPoint p = NSMakePoint(round(sizeX/2), round(sizeY/2));

[text drawAtPoint:p withAttributes:NULL];

然后我通过使用NSBitmapImageRep捕获它来保存它并将其传递给保存面板。 我实际上是通过这个命令编写文件:

[[generatedRect representationUsingType: NSJPEGFileType properties: nil]
   writeToFile:[save filename] atomically: YES])

关于文本为何如此模糊的任何想法?我很快就用完了想法。

非常感谢所有帮助。

4 个答案:

答案 0 :(得分:15)

当我创建要绘制的上下文时,我的问题是没有使用适当的视网膜显示比例因子:

UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);

如果您使用UIGraphicsBeginImageContext(<#CGSize size#>)那么这就是iOS 4.0及更低版本的API,因此它会像在视网膜显示屏上一样绘制它。

答案 1 :(得分:8)

请注意,Quartz绘制中像素边界,因此您可能需要确保-drawAtPoint:withAttributes:坐标不是整数,而是偏移X和Y中的半个像素(例如:10.5,10.5) 10.0,10.0)。

此外,请确保绘制的层次结构中的视图的起源都是整数像素边界。即使文本绘图视图的一个超视图关闭也可能导致渲染模糊。如果这些视图是图层支持的,您可以使用Core Animation工具的Color Misaligned Layers选项来跟踪它。

答案 2 :(得分:2)

在我看来,像是过度的JPEG压缩。您可以通过NSImageCompressionFactor属性指定压缩量。要不进行压缩,请将其设置为[NSNumber numberWithFloat:1.0]

答案 3 :(得分:2)

刚出现这个问题。这就是你所需要的:

CGContextSetShouldAntialias(yourcontext, true);