1

我正在使用几个不同的 UIImageViews 和 UILabels 预渲染合成图像,以加快在大型 tableview 中的滚动。不幸的是,与同一视图上的其他 UILabel 相比,主 UILabel 看起来有点模糊。

黑色字母“PLoS ONE”在 UILabel 中,它们看起来比“Medical”或“Medicine”要模糊得多。标志“PLoS one”可能同样被模糊,但不如清晰的文字那么明显。
整个杂志封面是分配给 UIButton 的单个 UIImage。

PLoS ONE 标签比
(来源:karlbecker.com

这是我用来绘制图像的代码。MagazineView 是一个 125 x 151 像素的矩形。我尝试了不同的缩放质量,但这并没有改变任何东西。它不应该,因为缩放不应该是不同的。我分配此图像的 UIButton 与杂志视图的大小完全相同。

    UIGraphicsBeginImageContextWithOptions(magazineView.bounds.size, NO, 0.0);
    [magazineView.layer renderInContext:UIGraphicsGetCurrentContext()];
    [coverImage release];
    coverImage = UIGraphicsGetImageFromCurrentImageContext();
    [coverImage retain];
    UIGraphicsEndImageContext();

任何想法为什么它是模糊的?

当我开始一个图像上下文并立即渲染到它时,渲染是在一个偶数像素上发生的,还是我需要手动设置渲染发生的位置?

4

3 回答 3

6

确保您的标签坐标是整数值。如果它们不是整数,它们会显得模糊。

于 2012-04-16T04:30:21.887 回答
1

我认为您需要使用 CGRectIntegral 以获取更多信息,请参阅: CGRectIntegral 的用法是什么?CGRectIntegral 的参考

于 2012-04-16T05:51:38.760 回答
0

我今天遇到了同样的问题,当我从 UILabel 文本生成图像时,我的内容被像素化了。

我们UIGraphicsBeginImageContextWithOptions()用来配置绘图环境以渲染成一个接受三个参数的位图:

size: 新位图上下文的大小。这表示 UIGraphicsGetImageFromCurrentImageContext 函数返回的图像的大小。

opaque:一个布尔标志,指示位图是否不透明。如果 opaque 参数为 YES,则忽略 alpha 通道并将位图视为完全不透明。

scale: 应用于位图的比例因子。如果您指定值 0.0,则比例因子设置为设备主屏幕的比例因子。

所以我们应该针对设备显示使用适当的比例因子(1x、2x、3x)来解决这个问题。

斯威夫特 5 版本:

UIGraphicsBeginImageContextWithOptions(frame.size, true, UIScreen.main.scale)
if let currentContext = UIGraphicsGetCurrentContext() {
    nameLabel.layer.render(in: currentContext)
    let nameImage = UIGraphicsGetImageFromCurrentImageContext()
    return nameImage
}
于 2020-05-04T09:29:23.760 回答