我一直在尝试在我的应用程序中将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])
关于文本为何如此模糊的任何想法?我很快就用完了想法。
非常感谢所有帮助。
答案 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);