renderInContext 使用CGBitmapContextCreate和Retina

手动创建了一个CGBitmapContext 

bitmapContext = CGBitmapContextCreate( myImageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );

并绘制一个图层:

[self.myView.layer renderInContext:bitmapContext];

但是,在Retina上,我的图层仅渲染原始尺寸的一半。或者渲染的不够清楚

 

之前在通过UIGraphicsGetCurrentContext得到的CGContextRef上画文字,在Retina设备上显示高清

但是通过CGBitmapContextCreate得到的CGContextRef上画文字,在Retina设备上显示很模糊

必须手动处理自己使用我们的x和y的比例因子为视网膜分辨率

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);

[self.myView.layer renderInContext:bitmapContext];

该示例是创建一个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显示屏。

 

 

https://www.xuebuyuan.com/1135586.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值