有没有比 Quartz 2D 更好/更快的方法来处理相机图像?
我目前正在开发一个 iPhone 应用程序,它允许用户使用相机拍照,然后使用 Quartz 2D 对其进行处理。
使用 Quartz 2D,我转换上下文以使图片以正确的方向显示(缩放和平移,因为它是镜像的),然后我使用混合模式堆叠一堆图层来处理图片。
初始(和最终结果)图片为 3mp 或 5mp,具体取决于设备,并且绘制后会占用大量内存。 提醒:它不是内存中的 jpeg,而是位图数据。
我的图层与初始图片的大小相同,因此每次我在图片顶部绘制新图层时,我都需要当前图片状态内存 (A) + 混合层内存空间 (B) + 内存中用于写入结果的空间 (C)。
当我得到结果时,我放弃“A”和“B”,将“C”带到下一阶段的处理,在那里它成为新的“A”...
我需要像这样的4次传递才能获得最终图片。
考虑到这些图片的分辨率,我的内存使用量可能会很高。 我可以看到 14Mo-15Mo,大多数时候我只收到 1 级警告,但 2 级警告有时会向我挥手并杀死我的应用程序。
- 关于一般流程,我是否以正确的方式这样做?
- 有没有办法加快处理速度?
- 为什么哦为什么内存警告随机产生?
- 为什么第二个图片过程比第一个图片过程长,如您在这张图片中看到的:
I'm currently working on an iphone app that lets the user take a picture with the camera and then process it using Quartz 2D.
With Quartz 2D I transform the context to make the picture appear with the right orientation (scale and translate because it's mirrored) and then I stack a bunch of layers whith blending modes to process the picture.
The initial (and the final result) picture is 3mp or 5mp depending on device and it takes a great amount of memory once drawn. Reminder : it's not a jpeg in memory, it's bitmap data.
My layers are the same size as the initial picture so every time i draw a new layer on top of my picture i need the current picture state in memory (A) + the layer to blend memory space (B) + the space in memory to write the result (C).
When i get the result i ditch "A" and "B", takes "C" to the next stage of processing where it become the new "A"...
I need 4 pass like this to obtain the finale picture.
Giving the resolution of these pictures my memory usage can climb high.
I can see a peek at 14Mo-15Mo and most of the time i only get level 1 warnings but level 2s sometimes wave at me and kill my app.
- Am i doing this the right way regarding general process ?
- Is there a way to speed up the processing ?
- Why oh why memory warnings spawn randomly ?
- Why the second picture process is longer than the first as you can see in this pic:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为持续时间看起来大约是原来的两倍;我想说它的处理量是原来的两倍。拍摄第三张照片需要三倍的时间吗?
如果是这样,这似乎表明它正在处理之前拍摄的所有照片/图层。当然,这是您代码中某处的错误。
Because the duration looks to be about twice as long; I'd say it was doing twice as much processing. Does the third photo taken take three times as long?
If so, that would seem to indicate it's processing all previous photos / layers taken. Which - of course - is a bug in your code somewhere.