在我的iPad应用程序中,我正在渲染到离屏位图,然后将该位图绘制到屏幕上。(这是因为我想重用现有的位图渲染代码。) 在iPad 2 上,这非常顺畅,但在新的带Retina显示屏的iPad上,绘制位图非常慢,尽管分辨率仍然相同。
为了绘制位图,我们使用常规的Quartz 2D函数: 使用由CGDataProviderCreateWithData创建的数据提供程序的CGImageCreate,32位RGBA格式并使用kCGImageAlphaNoneSkipLast。在显示位图的UIView中,在drawRect:中,我们使用CGContextDrawImage将其绘制到由UIGraphicsGetCurrentContext返回的上下文中。
请注意,我甚至没有尝试以双倍分辨率绘制:目前我对与iPad 2上使用的相同分辨率感到满意。看起来CoreGraphics在内部加倍像素,然后将其发送到GPU,即使我正在制作的CGImage应该适合直接传递给GPU。有任何想法吗?
为了绘制位图,我们使用常规的Quartz 2D函数: 使用由CGDataProviderCreateWithData创建的数据提供程序的CGImageCreate,32位RGBA格式并使用kCGImageAlphaNoneSkipLast。在显示位图的UIView中,在drawRect:中,我们使用CGContextDrawImage将其绘制到由UIGraphicsGetCurrentContext返回的上下文中。
请注意,我甚至没有尝试以双倍分辨率绘制:目前我对与iPad 2上使用的相同分辨率感到满意。看起来CoreGraphics在内部加倍像素,然后将其发送到GPU,即使我正在制作的CGImage应该适合直接传递给GPU。有任何想法吗?
view.layer.contents = (id) myUIImage.CGImage;
当使用 ARC 时,你还应该使用桥接转换view.layer.contents = (__bridge id) myUIImage.CGImage;
。详情请参见此处:https://dev59.com/Bm035IYBdhLWcg3wYO91#5455139 - nacross