您的位置:首页 > 其它

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

2013-05-16 09:05 633 查看
问题:在通过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,iPad2将显示为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 像素。在iPad2,它是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显示屏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: