ios,quartz2d,将位图上下文绘制到窗口上下文中的最快方法吗?
你好,对不起我的英语不好,我很难找到重绘位图的最快方法 上下文(其中包含指向可能原始位图数据的指针)到iphone上 查看窗口上下文
在我发现的网络人们正在做的这个例子中 从这样的位图上下文制作CGImage然后制作UIImage 从中并将其绘制到视图
我在想它是否是最快的方式呢?我需要创造吗? 然后发布CGImage - 在文档中有信息 制作CGImage复制数据 - 是否可以发送我的位图上下文 数据直接到窗口上下文而不分配/复制 在CGImage中发布它? (看起来没有必要)
游行
答案 0 :(得分:1)
嗯,我做了一些测量,这就是我得到的 -
无需担心创建CGImage和UIImage的东西因为它只需要大约2毫秒 - 我自己的图像处理程序花费最多的时间(大约100毫秒)绘制UIImage点需要20毫秒 - 还有第三件事:当我在我的视频帧准备委托中接收图像缓冲区时,我通过performSelectorOnMainThread调用setNeedsDisplay - 此操作有时需要2毫秒,有时大约需要40毫秒 - 是否有人知道它是什么 - 我可以加速这件事吗?提前谢谢
游行
答案 1 :(得分:0)
我想我知道你得到了什么。你有一个指向位图数据的指针,你只想让窗口显示它。在旧的Mac OS(9和之前的版本)上,您可以直接将绘图写入视频内存,但您不能再这样做了。当时视频内存是RAM的一部分,现在它都在OpenGL卡上。
在某种程度上,位图数据必须至少复制一次。您可以直接通过从数据创建OpenGL纹理并在OpenGL上下文中绘制它来直接执行,也可以使用UIImage方法。 UIImage方法速度较慢,可能包含两个或多个位图数据副本,一次到UIImage,一次在渲染UIImage时。
在任何一种情况下,您都需要创建并释放CGImage。
答案 2 :(得分:0)
副本是必要的。首先必须将位图放入GPU中,因为只有GPU才能访问将任何层合成到显示窗口。并且GPU必须复制到它的不透明(依赖于设备)格式。一种方法是从位图上下文创建一个图像(其他替代方法包括上传OpenGL纹理等)。
创建图像后,您可以绘制图像,或将其指定给可见的CALayer内容。后者可能会更快。