当使用CGContextDrawImage的renderInContext时,UILabel文本像素化

时间:2011-11-05 19:14:05

标签: iphone uilabel core-text

我在iPhone上使用CoreText在UIScrollView中获取斜体文本。 iPhone上的CoreText不支持图像。因此,我告诉CoreText为图像提供一些空间,然后使用CGContextDrawImage在300 x 120的矩形中绘制一个图像blendImage,这是一个2.5比率的矩形。创建的图像(下面的代码中为blendedImage)具有相同的大小比例,因为175/70 = 2.5。由于我正在创建的图像,mixedImage也有我想要自动换行的文本,我使用renderInContext为图像中的UILabel创建图像。问题是UILabels中的文本模糊不清并且像素化。有谁知道我怎么解决这个问题?

以下是代码:

CGRect dccFrame                      = CGRectIntegral(CGRectMake(0, 60, 70, 72));  // 20, 60, 100, 72
UILabel *dccLabel                    = [[UILabel alloc] initWithFrame:CGRectIntegral(dccFrame)];
dccLabel.backgroundColor             = [UIColor clearColor];
dccLabel.numberOfLines               = 0;
dccLabel.lineBreakMode               = UILineBreakModeWordWrap;
NSString *titledccString             = self.dccString;
dccLabel.textColor                   = [UIColor blackColor];
dccLabel.font                        = [UIFont fontWithName:@"Arial-BoldMT" size:7];
[dccLabel setText:titledccString];
[dccLabel sizeToFit];

CGSize newSize  = CGSizeMake(176, 70);  

UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
CGContextRef gc = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(gc, 1, 1, 1, 1);
CGContextSetShouldSmoothFonts(gc, YES);
CGContextSetAllowsAntialiasing(gc, YES);
CGContextSetShouldAntialias(gc, YES);
UIGraphicsPushContext(gc);

CGAffineTransform trf1       = CGAffineTransformMakeTranslation(0, 0);      
CGContextSaveGState(gc);
CGContextConcatCTM(gc, trf1);               
[[UIImage imageNamed: imageString] drawInRect:CGRectIntegral(CGRectMake(70, 0, 46, 60))];  
CGContextRestoreGState(gc);
UIGraphicsPopContext();

CGAffineTransform trf3 = CGAffineTransformMakeTranslation(0, 30);       
CGContextSaveGState(gc);
CGContextConcatCTM(gc, trf3);
[dccLabel.layer renderInContext:gc];
CGContextRestoreGState(gc);

UIImage *blendedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[dccLabel release];

我已经读过,如果位置不是可能导致像素化的整数。但我认为这不是问题所在。我还在Core Animation模式下运行了Instruments并启用了“Color Misaligned Images”,但是我创建的图像并没有显示为彩色,尽管其他图像也是如此。

有谁知道为什么UILabel dccLabel中的文字模糊和像素化以及我如何修复它?

1 个答案:

答案 0 :(得分:0)

想出来,花了我一会儿!答案很简单。只需要使newSize与绘制图像的矩形大小相同。

 CGSize newSize  = CGSizeMake(300, 120); 

使图像尺寸与绘制图像的矩形尺寸相同是有意义的,对吗?