ios,quartz2d,将位图上下文绘制到窗口上下文的最快方法?
你好,很抱歉我的英语不好,
我正在努力寻找最快的方法来重新绘制位图上下文(保存指向可能的原始位图数据的指针)到iphone视图窗口上下文中
在我在网络上发现的例子中,人们是通过从这样的位图上下文中制作CGImage,然后从中制作UIImage并将其绘制到视图上来实现这一点的
我在想,这是不是最快的方法?我是否需要创建然后释放CGImage -在文档中有让CGImage复制数据的信息-是否可以将我的位图上下文数据直接发送到窗口上下文,而不需要在CGImage中分配/复制然后释放它?(这在物理上似乎是不必要的)
游行
发布于 2011-03-02 23:46:31
我想我明白你的意思了。您有一个指向位图数据的指针,您只想让窗口显示该数据。在旧的Mac (9和更早的版本)上,你可以直接将draw写到显存中,但你不能再这样做了。当时显存是内存的一部分,现在都在OpenGL显卡上了。
在某种程度上,位图数据必须至少复制一次。您可以通过从数据创建OpenGL纹理并在OpenGL上下文中绘制来直接执行此操作,也可以使用UIImage方法。UIImage方法将较慢,并且可能包含位图数据的两个或更多副本,一次是写入UIImage,一次是在呈现UIImage时。
在这两种情况下,您都需要创建并释放CGImage。
发布于 2011-03-03 20:24:28
好吧,我做了一些测量,这是我得到的-
不需要担心创建CGImage和UIImage的东西,因为这一切只需要2毫秒-我自己的图像处理例程花费了最多的时间(大约100毫秒)在点绘制UIImage需要20毫秒-还有第三件事:当我在我的视频帧就绪委托中收到图像缓冲区时,我通过performSelectorOnMainThread调用setNeedsDisplay -这个操作有时需要2毫秒,有时大约40毫秒-有人知道这是什么吗-我能加快速度吗?提前感谢
游行
发布于 2011-03-03 00:10:16
副本是必要的。您首先必须将位图放入GPU,因为只有GPU才能将任何层合成到显示窗口中。并且GPU必须以其不透明(依赖于设备)的格式进行复制。其中一种方法是从位图上下文创建图像(其他方法包括上载OpenGL纹理等)。
创建图像后,可以绘制该图像,或将其指定给可见CALayer的内容。后者可能更快。
https://stackoverflow.com/questions/5169580
复制相似问题