有谁知道如何告诉核心图像使用 CPU 而不是 GPU 通过 CIFilter 处理 CIImage?我需要处理一些非常大的图像,并且使用 GPU 得到了奇怪的结果。我不在乎 CPU 需要多长时间。
最佳答案
kCIContextUseSoftwareRenderer 是这里的关键:
+ (CIContext*)coreContextFor:(NSGraphicsContext *)context forceSoftware:(BOOL)forceSoftware
{
//CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSDictionary *contextOptions = [NSDictionary dictionaryWithObjectsAndKeys:
(id)colorSpace, kCIContextWorkingColorSpace,
(id)colorSpace, kCIContextOutputColorSpace,
[NSNumber numberWithBool:forceSoftware], kCIContextUseSoftwareRenderer,
nil];
CIContext* result = [CIContext contextWithCGContext:(CGContext *)[context graphicsPort] options:contextOptions];
CGColorSpaceRelease(colorSpace);
return result;
}
在软件中渲染更多 (CPU) 解决了一些问题,但是......现代机器上的性能损失如此之大,我不能说这是解决方案。我在我的应用程序中使用 CoreImage,我总是在屏幕上使用 GPU 进行渲染,而强制 CPU 仅用于保存。我注意到 CPU 渲染在我的测试硬件上更准确一些,保存过滤后的图像是一个漫长的过程,我可以在这里牺牲速度。
关于image-processing - 如何使用 CPU 而不是 GPU 来处理 CIFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898334/