如何使用CPU而不是GPU来处理CIFilter?
有谁知道如何告诉核心图像使用CPU而不是GPU通过CIFilter处理CIImage?我需要处理一些非常大的图像,但使用 GPU 得到了奇怪的结果。我不在乎CPU要花多长时间就可以了。
Does anyone know how to tell core image to process a CIImage through a CIFilter using the CPU instead of the GPU? I need to process some very large images and I get strange results using the GPU. I don't care how long it takes to CPU will be fine.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
kCIContextUseSoftwareRenderer 是这里的关键:
在软件中渲染更多(CPU)解决了一些问题,但是......现代机器上的性能损失如此之大,我不能说这是解决方案。我在应用程序中使用 CoreImage,并且总是使用 GPU 在屏幕上进行渲染,而强制 CPU 仅用于保存。我注意到 CPU 渲染在我的测试硬件上更加准确,并且保存过滤后的图像是一个漫长的过程,我可以在这里牺牲速度。
kCIContextUseSoftwareRenderer is key here:
Rendering in software more (CPU) solves some issues, but... Performance penalty is so strong on modern machines that I can't say it is solution. I use CoreImage in my apps and I always render with GPU on-screen while forced CPU is used for saving only. I have noticed that CPU rendering is a bit more accurate on my test hardwares, and saving filtered image is a long process, I can sacrifice the speed here.
这是一个 Swift 版本:
Here is a Swift version :
不是答案,但您始终可以将 CIkernel 重写为对像素 RGB 值进行操作的函数,然后在图像的
unsigned char []
数据上循环应用该函数并将结果转换为 CIImage 。Not an answer, but you always can re-write CIkernel as function which operates on pixel RGB value, and after that apply that function in a loop on
unsigned char []
data of image and convert result to CIImage.