【问题标题】:iPhone: Retina Display Writing Font to a UIImageiPhone:视网膜显示将字体写入 UIImage
【发布时间】:2012-02-15 22:39:07
【问题描述】:

Objective-C 答案很好,我用 MonoTouch 作为参考。

我在 UIImage 上写文本。 Retina 以断断续续的方式显示字体。看起来像素翻了一番,我猜这就是正在发生的事情。如何将清晰的字体写入 UIImage?

 //context is a CGBitmapContext

 context.SetFillColor (color.CGColor);
 context.SelectFont (font.Name, font.PointSize, CGTextEncoding.MacRoman);

 context.SetTextDrawingMode (CGTextDrawingMode.Fill);
 context.ShowTextAtPoint (pt.X, pt.Y, text);

【问题讨论】:

  • 你在哪里做这幅画?您使用 CGBitmapContext 是否有特殊原因?

标签: iphone ios xamarin.ios uifont cgbitmapcontext


【解决方案1】:

当你创建图像上下文时,你应该调用

UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

不是常规的 UIGraphicsBeginImageContext,这将在 Retina 显示屏中生成支持上下文的显示。

【讨论】:

  • 太棒了,太棒了,太棒了!谢谢你。我遇到了同样的问题(当绘制到 UIImage 上时字体看起来很模糊),这完美地解决了它。
【解决方案2】:

尝试对显示文本的坐标进行四舍五入。还检查按钮作为一个整体是在整数偏移量上。如果您将元素定位在非整数偏移量处,iOS 会很高兴地插入您的图形,使事物变得“模糊”。

【讨论】:

  • 虽然你的答案在某些情况下是正确的,但在这种情况下它是不正确的。通过绘制为非视网膜显示大小的 CGBitmapContext 图像将被光栅化小然后按比例放大。只有在常规上下文中,当后备存储可能是也可能不是点大小的两倍时,才真正需要远离像素边界
  • 但是谁说这个CGBitmapContext的内容最终会以整数偏移量显示呢?
  • 不管它们是否存在,事实是 CGBitmapContexts 的大小以像素为单位,而不是点,因此不会针对视网膜显示器自动调整。开发人员看到的像素化是由像素加倍和未将字体与像素偏移对齐造成的。
  • 哦,现在我明白你的意思了。鉴于同样像素化的箭头和相当大的文本,我假设我们看到的是实际图形的放大版本。因为仍然如此,美元符号中的垂直线比必要的更模糊(4px 半透明,我希望 2px 实心)并且文本比我预期的更模糊。我们需要查看更多代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2011-09-02
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多