我使用以下代碼將文本添加到圖像:圖像的像素化視網膜顯示器上加入文本
+(的UIImage *)addTextToImage:(的UIImage *)IMG文本:(的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顯示屏上測試它時,圖像和文字都是像素化的。我搜索了一個解決方案,並遇到像這樣的計算器問題:CoreGraphics for retina display
我嘗試了什麼被建議(你可以看到它在代碼中註釋掉),但它沒有幫助。我試着用比例因子縮放我的座標,我也試過只做 CGContextScaleCTM(UIGraphicsGetCurrentContext(),scale,scale);
圖像保持像素化。下面是我如何加載圖像並調用addTextToImage方法:
frameImg = [UIImage imageNamed:@「thumbnail_frame_stacked」]; frameImg = [使用addTextToImage:frameImg text:text];
不用說,我有圖像的非視網膜和視網膜版本。我究竟做錯了什麼?