CGBitmapContextCreate 在配备Retina的设备上绘制模糊的 解决方法

本文详细解释了在iOS Retina设备上使用Core Graphics API绘制文字时出现的清晰度问题,并提供了解决方案。通过手动处理坐标比例因子,可以确保文字在Retina设备上显示高清,而不会在标准分辨率设备上显得模糊。本文还介绍了如何在不同设备上创建正确大小的上下文以适应Retina屏幕。
摘要由CSDN通过智能技术生成
问题: 在通过UIGraphicsGetCurrentContext得到的CGContextRef上画文字,在Retina设备上显示高清,
但是通过CGBitmapContextCreate得到的CGContextRef上画文字,在 Retina设备 上显示很模糊



原理: 我们必须手动处理自己使用我们的x和y的比例因子为视网膜分辨率,
CGContextRef context = UIGraphicsGetCurrentContext(); CGImageRef image =CGBitmapContextCreateImage(context); NSLog(@"width of context %i", (int)CGImageGetWidth(image)); NSLog(@"height of context %i", (int)CGImageGetHeight(image));
在新的iPad,禁用状态栏, 打印结果为  2048和1536,iPad 2将显示为1024和768), 实际上,ios自动处理 1点= 4个像素。


解决:

float scaleFactor = [[UIScreen mainScreen] scale]; 
CGSize size = CGSizeMake(768, 768); 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, size.width * scaleFactor, size.height * scaleFactor, 8, size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst); 

CGContextScaleCTM(context, scaleFactor, scaleFactor);
该示例是创建一个768×768  点的 区域,新的iPad,这将是1536×1536  像素 在iPad 2,它是768×768  像素

的一个关键因素是,CGContextScaleCTM(上下文,比例因子,比例因子)是用来调整坐标系统,使任何绘图核心图形,,如CGContextMoveToPoint等,就会自动工作,无论是标准分辨率的Retina分辨率。


一个更值得注意的是,UIGraphicsBeginImageContext(CGSizeMake(300,300));将创建一个300×300 像素的 Retina显示屏,而UIGraphicsBeginImageContextWithOptions(CGSizeMake(300,300),NO,0.0);将创建600×600 像素的Retina上显示。0.0的方法调用自动给出合适的大小为标准的显示器或Retina显示屏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值