iOS使用一系列JPEG ie MJPEG更新UIView的更快方法。(仪器显示50%的CPU)

iOS使用一系列JPEG ie MJPEG更新UIView的更快方法。(仪器显示50%的CPU),ios,uiview,jpeg,instruments,Ios,Uiview,Jpeg,Instruments,我正在通过网络从一台相机(MJPEG)接收一系列JPEG。我在UIView中接收图像时显示图像。我看到的是,我的应用程序在UIView更新上花费了50%的CPU(设备和模拟器测试) 是否有一种CPU密集度较低的方法来进行屏幕更新?在将JPEG文件移交给UIView之前,我是否应该以某种方式对其进行处理? 接收方法: UIImage *image = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(),^{

我正在通过网络从一台相机(MJPEG)接收一系列JPEG。我在UIView中接收图像时显示图像。我看到的是,我的应用程序在UIView更新上花费了50%的CPU(设备和模拟器测试)

是否有一种CPU密集度较低的方法来进行屏幕更新?在将JPEG文件移交给UIView之前,我是否应该以某种方式对其进行处理? 接收方法:

UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(),^{
    [cameraView updateVideoImage:image];
});
更新方法:

- (void) updateVideoImage:(UIImage*)image {
    myUIView.image = image;
    ...

更新:增加了更好的屏幕截图


更新2:OpenGL是否会为JPEG提供更快的表面渲染?我不清楚仪器在哪里花费时间,渲染或解码。我将按照建议编写一个测试用例,并从中开始工作。

iOS针对PNG图像进行了优化。虽然JPEG极大地减少了传输图像的大小,但它是一种更复杂的格式,因此这种渲染需要花费大量时间并不奇怪。人们说设备上有jpeg硬件辅助,但我不确定,即使它在那里,它也可能针对某些图像类型进行了调整

所以,我有一些建议。设计一个测试,在这个测试中,你可以得到一个你现在拥有的jpeg,并将它渲染到一个上下文中,这一次是基线。拍摄相同的图像并在预览中打开,然后将其以稍微不同的质量值保存到另一个文件中,然后尝试(预览将删除不必要的“垃圾”从图像开始,或者甚至先将其转换为png,然后再转换为jpeg。这里的想法是使用预览输出的图像,这将是您将获得的最干净的图像。图像是否更好


您还可以尝试使用libjpegturbo,看看它是否可以更快地渲染图像。您可以在github项目PhotoScrollerNetwork中看到该库正在运行。您可以在解码JPEG(使用该库)时找到该项目接收时实时显示,然后支持使用CATiledLayers进行缩放查看。

感谢您的指点。我查看了您的项目及其背后的讨论。很高兴您整理了胖库,这真的让我不想使用很多库。尽管我试图限制对第三方库的依赖,因为第三方库已经被烧掉了太多时间是的。我会把这个打开一段时间,看看我是否能得到关于仪器跟踪的反馈,因为我想知道这是怎么回事。我想这可能是我也做过的一些缩放。在libjpegturbo网站上发表的一条评论是PhotoShop加入了某种重启“标记”这会导致该库的性能受到真正的损害。有一些命令行程序可以删除它。很可能是我们的JPEG格式的构造方式导致了您的悲伤。如果我站在您的立场上,我希望100%确定我的图像没有问题。祝您好运!