iPhone: 将Retina显示器的写字体转换为UIImage

3

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);

enter image description here


你在哪里进行这个绘图?你使用CGBitmapContext有特殊的原因吗? - jackslash
2个回答

6
当您创建图像上下文时,应调用以下函数:createGraphics()
UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

不是常规的UIGraphicsBeginImageContext,它将生成一个Retina显示屏可用的上下文。


太棒了,太棒了,太棒了!谢谢。我也遇到了同样的问题(在UIImage上绘制字体时出现模糊),这个解决方法完美地解决了它。 - Mike Gledhill

1

尝试将显示文本的坐标四舍五入。还要检查按钮是否整体处于整数偏移量上。如果您将元素定位在非整数偏移量上,iOS 将会愉快地进行插值处理,渲染出“模糊”的效果。


虽然您的答案在某些情况下是正确的,但在这种情况下不正确。通过绘制到适用于非Retina显示器的CGBitmapContext中,图像将被缩小并放大。只有在后备存储区可能是双倍点大小时,在常规上下文中才真正需要远离像素边界的绘图。 - jackslash
但是谁说这个CGBitmapContext的内容最终会以整数偏移量显示? - mvds
无论它们是否如此,事实是CGBitmapContexts的大小是以像素为单位而不是点,并且因此不会自动调整视网膜显示器。开发人员看到的像素化是由于像素加倍和字体未对齐到像素偏移引起的。 - jackslash
哦,现在我明白你的意思了。考虑到箭头像素相同,而文本又比较大,我以为我们看到的是实际图形的放大版本。因为即便是这样,美元符号中的垂直线条也比必要的模糊(4px 半透明,而我预期的是 2px 实心),而且文本也比我预期的更模糊。我们需要看更多的代码。 - mvds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接