2

UILabel在将对象存储为图像时,我在重新缩放对象的内容时遇到了一些问题。由于渲染图像必须大于原始图像UILabel,我计算了imageScale重新缩放原始图像所需的比例并将其保存到CGSize变量中。在下文中,我将解释采用(和失败)的方法。

用于渲染图像的代码

以下代码用于在画布上渲染提取的图像。

[labelImage drawInRect:CGRectMake(xCoordinate/imageScale.width,
                                  yCoordinate/imageScale.height,
                                  newSize.width,
                                  newSize.height)
                          blendMode:kCGBlendModeNormal alpha:0.8];

其中变量newSize计算如下:

  • newSize.width = originalWidth/imageScale.width;
  • newSize.height = originalHeight/imageScale.height

方法一

我使用以下代码提取了标签:

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

其中labelUILabel变量,并且newSize是重新缩放的图像应具有的大小(有关详细信息,请参见上文)。

但是,我获得了以下图像,这显然是失败的,因为内容很少且不居中:

在此处输入图像描述

方法二

我使用以下代码提取了标签:

UIGraphicsBeginImageContextWithOptions([label bounds].size, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是,由于我使用原始图像大小来提取图像,所以我获得的效果如下:

在此处输入图像描述

如您所见,气球中的文本分辨率不高,因此无法正确显示。

问题

如何纠正这两种方法中的一种以便以高分辨率可视化图像?

4

1 回答 1

0

似乎您只需要为生成的图像设置适当的比例。

这是功能:

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

您将比例设置为0.0。尝试将其替换为[UIScreen mainScreen].scale.

于 2013-09-16T16:09:47.447 回答