【问题标题】:NSString drawAtPoint - blurryNSString drawAtPoint - 模糊
【发布时间】:2011-06-07 22:29:08
【问题描述】:

我一直在尝试将 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])

关于为什么文字如此模糊的任何想法?我的想法很早之前就用完了。

非常感谢所有帮助。

【问题讨论】:

  • 我正在尝试实现您的代码,生成的矩形对象是什么,一个 NSView?绘图不应该在 drawRect: 方法中进行吗?
  • 生成的矩形是一个 NSImage。很抱歉造成混乱。

标签: objective-c cocoa macos


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 大多数情况下这是正确的答案,但听从布拉德的建议也是可行的。
      • @BootMaker 当然,现在有 CGRect().integral 来涵盖这种情况
      【解决方案4】:

      刚刚遇到这个问题。这就是你所需要的:

      CGContextSetShouldAntialias(yourcontext, true);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 2021-04-03
        相关资源
        最近更新 更多