要绘制位图,我们使用常规Quartz 2D函数:CGImageCreate与由CGDataProviderCreateWithData创建的数据提供者,32位RGBA格式与kCGImageAlphaNoneSkipLast.在显示位图的UIView中,在drawRect:中,我们使用CGContextDrawImage将其绘制到UIGraphicsGetCurrentContext返回的上下文中.
请注意,我甚至不想用双分辨率绘制:因为现在我使用与iPad 2上使用的分辨率相同的分辨率.它看起来像是CoreGraphics内部加倍的像素,然后发送到GPU,即使我正在制作的CGImage应该直接传递给GPU.有任何想法吗?
解决方法
It looks like CoreGraphics is internally doubling the pixels,and then sending that to the GPU,
很多更精确(精神至少):
> UIKit使CGBitmapContext成为视图边界的大小,以设备像素为单位
它使上下文成为当前的上下文
>将CGImage绘制到该上下文中
> …所以CG必须重新缩放源图像,并触摸所有的目标像素
>完成绘制之后,UIKit从位图上下文中创建一个CGImage
>并将其分配给视图的图层的内容.
the CGImage that I’m making should be fine for passing to the GPU directly.
如果你想要这样做,你需要告诉系统这样做,通过删除上面的一些步骤.
(UIKit,CoreAnimation和CoreGraphics之间没有链接,它提供了一个像您所期待的“快速路径”).
最简单的方法是制作UIImageView,并将其图像设置为包装CGImageRef的UIImage.
或者,将您的view.layer.contents设置为CGImageRef. (并且确保不覆盖-drawRect :,不调用-setNeedsDisplay,并确保contentMode不是UIViewContentModeRedraw.更容易使用UIImageView.)