我在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中的文字模糊和像素化以及我如何修复它?
答案 0 :(得分:0)
想出来,花了我一会儿!答案很简单。只需要使newSize与绘制图像的矩形大小相同。
CGSize newSize = CGSizeMake(300, 120);
使图像尺寸与绘制图像的矩形尺寸相同是有意义的,对吗?