手动创建了一个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显示屏。