苹果手机。我需要以30fps的速度触摸每个全屏像素。可行?

时间:2009-12-22 01:27:59

标签: iphone image-processing image-manipulation

我有兴趣做一些图像黑客应用程序。为了更好地了解预期的性能,有人可以让我了解以全屏分辨率触摸每个像素的开销吗?

典型用例:使用从相册中取出照片,选择视觉效果,并且 - 与Photoshop滤镜不同 - 设备的手势操作可实时驱动效果。

我只是在这里寻找球场表演数据。显然,我的影响越多,我的预期就越多。

干杯, 道格

5 个答案:

答案 0 :(得分:2)

你需要很好地了解OpenGL才能做到这一点。 iPhone OpenGL ES硬件与许多桌面系统相比具有明显的优势,因为内存只有一个位置 - 因此纹理不需要'上传到卡'。有很多方法可以直接访问纹理的内存。

3GS的OpenGL堆栈比3G快得多,你需要在3GS /等效触摸上试用它。

还编译并运行GLImageProcessing示例代码。

答案 1 :(得分:1)

如果您要在设备分辨率或照片本身的分辨率下执行此操作,那么将产生重大影响的一件事情就是如此。通常,从iTunes传输的照片会缩放到640x480(屏幕像素数的4倍)。来自相机胶卷的照片将大于该照片 - 对于3GS照片,最高可达3Mpix。

我只是玩了一下这个,但是以明显的方式做到这一点 - 即你的代码中由数组支持的CGImage - 你可以在5-10 FPS的范围内看到。如果你想要比这更敏感的东西,你将不得不想出一个更有创意的解决方案。也许将图像作为纹理映射到点网格上,然后用OpenGL渲染?

在App Store中查找FaceGoo。这是一个应用程序的示例,它使用简单的OpenGL渲染循环来执行类似于您所说的内容。

答案 2 :(得分:0)

不可行,不适用于当前的API和通用图像过滤器。目前,您只能通过OpenGL或更高的抽象访问屏幕,OpenGL不太适合帧缓冲操作。 (当然不是iPhone上的OpenGL ES实现。)如果每帧都更改图像,则必须上传新纹理,这太贵了。在我看来,唯一的解决方案是在纹理上使用OpenGL操作在GPU上进行效果。

答案 3 :(得分:0)

我的回答只是等待他们摆脱openGL 1.0设备,最后将Core Image带到iphone SDK。

使用Fragment着色器,这在新设备上非常可行。

答案 4 :(得分:0)

我开始认为解决这个问题的唯一方法是编写一套顶点/片段着色器,并在OpenGL ES 2.0中完成所有操作。我不希望将限制应用程序限制在iPhone 3GS上,但我认为这是唯一可行的方法。

我真的希望有一些可行的CoreGraphics方法,但似乎并非如此。

谢谢, 道格