添加文本的图像在视网膜显示器上像素化

时间:2013-01-07 23:03:24

标签: ios retina-display

我使用以下代码向图像添加文字:

+(UIImage *)addTextToImage:(UIImage *)img text:(NSString *)text1 {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

//   float scaleFactor = [[UIScreen mainScreen] scale];
int w = img.size.width;

int h = img.size.height;

//    CGSize size = CGSizeMake(768, 768);

CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);

// CGContextScaleCTM(context, scaleFactor, scaleFactor);


CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);

CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);

char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];// \"05/05/09\";

CGContextSelectFont(context, "Times New Roman", 14, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);

CGContextSetRGBFillColor(context, 0, 0, 0, 1);



//rotate text

CGContextSetTextMatrix(context, CGAffineTransformMakeRotation( -M_PI/8 ));

CGContextShowTextAtPoint(context, 70, 88, text, strlen(text));

CGImageRef imageMasked = CGBitmapContextCreateImage(context);

CGContextRelease(context);

CGColorSpaceRelease(colorSpace);
UIImage* newImg = [UIImage imageWithCGImage:imageMasked];

CGImageRelease(imageMasked);

return newImg;

}

这适用于非视网膜。但是当我在Retina显示器上测试它时,图像和文本都是像素化的。我搜索了一个解决方案,遇到了像这样的stackoverflow问题:CoreGraphics for retina display

我尝试了建议的内容(你可以在代码中看到它被注释掉),但它没有帮助。我尝试按比例因子缩放坐标,我也尝试过 CGContextScaleCTM(UIGraphicsGetCurrentContext(),scale,scale);

图像保持像素化。这是我加载图像并调用addTextToImage方法的方法:

frameImg = [UIImage imageNamed:@“thumbnail_frame_stacked”];   frameImg = [Utils addTextToImage:frameImg text:text];

毋庸置疑,我有非视网膜和视网膜版本的图像。我做错了什么?

1 个答案:

答案 0 :(得分:0)

几天前我问过一个非常类似的问题,我用自己的解决方案回答了这个问题。见here