Iphone 重新缩放和光栅化UILabel时的图像质量问题
当Iphone 重新缩放和光栅化UILabel时的图像质量问题,iphone,ios,image,uilabel,scale,Iphone,Ios,Image,Uilabel,Scale,当UILabel对象存储为图像时,我在重新缩放其内容时遇到了一些问题。由于渲染图像必须大于原始UILabel,因此我计算了重新缩放原始图像所需的比例imageScale,并将其保存到CGSize变量中。在下文中,我将解释采用(和失败)的方法 用于渲染图像的代码 以下代码用于在画布上渲染提取的图像 [labelImage drawInRect:CGRectMake(xCoordinate/imageScale.width, yCo
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=原始高度/imageScale.height
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[[label layer] renderInContext: UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions([label bounds].size, NO, 0.0);
[[label layer] renderInContext: UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
其中,label
是UILabel
变量,newSize
是重缩放图像应具有的大小(有关详细信息,请参见上文)
但是,我得到了下面的图像,这显然是失败的,因为内容很少,也没有居中:
方法2
我使用以下代码提取标签:
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[[label layer] renderInContext: UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions([label bounds].size, NO, 0.0);
[[label layer] renderInContext: UIGraphicsGetCurrentContext()];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是,由于我使用原始图像大小来提取图像,因此我获得的效果如下:
正如您所注意到的,引出序号中的文本分辨率不高,因此无法正确显示
问题
如何纠正这两种方法中的一种,以便以高分辨率显示图像?似乎您只需要为生成的图像设置适当的比例 这就是功能:
void UIGraphicsBeginImageContextWithOptions(
CGSize size,
BOOL opaque,
CGFloat scale
);
将比例设置为
0.0
。尝试将其替换为[UIScreen mainScreen]。缩放
不幸的是,这并不能解决问题。您找到了解决方案吗?