问题:
在通过UIGraphicsGetCurrentCont ext得到的CGContextRef上画文字,在Retina设备上显示高清,
但是通过CGBitmapContextCreate得到的CGContextRef上画文字,在 Retina设备 上显示很模糊
但是通过CGBitmapContextCreate得到的CGContextRef上画文字,在 Retina设备 上显示很模糊
原理:
我们必须手动处理自己使用我们的x和y的比例因子为视网膜分辨率,
CGContextRef context = UIGraphicsGetCurrentCont ext(); CGImageRef image =CGBitmapContextCreateIma ge(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 = CGColorSpaceCreateDevice RGB();
CGContextRef context = CGBitmapContextCreate(NULL, size.width * scaleFactor, size.height * scaleFactor, 8, size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipli edFirst);
CGContextScaleCTM(context, scaleFactor, scaleFactor);
该示例是创建一个768×768
点的
区域,新的iPad,这将是1536×1536
像素
。在iPad 2,它是768×768
像素
。
的一个关键因素是,CGContextScaleCTM(上下文,比例因子,比例因子)
是用来调整坐标系统,使任何绘图核心图形,,如CGContextMoveToPoint
等,就会自动工作,无论是标准分辨率的Retina分辨率。
一个更值得注意的是,UIGraphicsBeginImageCont
将创建一个300×300 UIGraphicsBeginImageCont
将创建600×600 0.0
的方法调用自动给出合适的大小为标准的显示器或Retina显示屏。