我試圖給UIImage
添加一個文本,我得到了一個像素化的繪圖。CGContextShowTextAtPoint在Retina設備上產生非Retina輸出
我已經嘗試了一些其他的答案,但沒有成功:
- Drawing on the retina display using CoreGraphics - Image pixelated
- Retina display core graphics font quality
- Drawing with Core Graphics looks chunky on Retina display
我的代碼:
-(UIImage *)addText:(UIImage *)imgV text:(NSString *)text1
{
int w = self.frame.size.width * 2;
int h = self.frame.size.height * 2;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate
(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), imgV.CGImage);
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);
char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
CGContextSelectFont(context, "Arial", 24, kCGEncodingMacRoman);
// Adjust text;
CGContextSetTextDrawingMode(context, kCGTextInvisible);
CGContextShowTextAtPoint(context, 0, 0, text, strlen(text));
CGPoint pt = CGContextGetTextPosition(context);
float posx = (w/2 - pt.x)/2.0;
float posy = 54.0;
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 255, 255, 255, 1.0);
CGContextShowTextAtPoint(context, posx, posy, text, strlen(text));
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];
}
你有沒有考慮過使用'UIGraphicsBeginImageContextWithOptions'和相關函數呢? –
是的,但文字的邊緣保持鋸齒狀。 – ppaulojr
您爲比例因子傳遞了哪個值?另外,請編輯您的問題,以包含「像素化」,「鋸齒狀」文本的屏幕截圖。 –