Image processing 如何使用CPU而不是GPU处理CIFilter?
有人知道如何告诉core image使用CPU而不是GPU通过CIFilter处理CIImage吗?我需要处理一些非常大的图像,我用GPU得到奇怪的结果。我不在乎CPU需要多长时间就可以了。不是答案,但您始终可以将CIkernel重新编写为对像素RGB值进行操作的函数,然后在图像的Image processing 如何使用CPU而不是GPU处理CIFilter?,image-processing,cpu,gpu,core-image,Image Processing,Cpu,Gpu,Core Image,有人知道如何告诉core image使用CPU而不是GPU通过CIFilter处理CIImage吗?我需要处理一些非常大的图像,我用GPU得到奇怪的结果。我不在乎CPU需要多长时间就可以了。不是答案,但您始终可以将CIkernel重新编写为对像素RGB值进行操作的函数,然后在图像的无符号字符[]数据上循环应用该函数,并将结果转换为CIImage。KCIContextureSoftwareRenderer是关键: + (CIContext*)coreContextFor:(NSGraphicsCo
无符号字符[]
数据上循环应用该函数,并将结果转换为CIImage。KCIContextureSoftwareRenderer是关键:
+ (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渲染在我的测试硬件上更加精确,保存过滤后的图像是一个漫长的过程,我可以在这里牺牲速度 以下是Swift版本:
func coreContextFor(context : CGContext,forceSoftware force : Bool) -> CIContext {
let colorSpace = CGColorSpaceCreateDeviceRGB()
let options : [String:AnyObject] = [
kCIContextWorkingColorSpace: colorSpace!,
kCIContextOutputColorSpace : colorSpace!,
kCIContextUseSoftwareRenderer : NSNumber(bool: force)
]
return CIContext(CGContext: context, options: options)
}
谢谢我来试一试。我所尝试的非常类似,但似乎从未正常工作(它总是在GPU上运行)。//创建一个CIContext,允许用户指定使用CPU-(CIContext*)CpuonlyContextFromCgContext:(CGContextRef)cgContext withFlag:(BOOL)flag{NSDictionary*contextOptions=[NSDictionary Dictionary WithObjects和Keys:[NSNumber numberWithBool:flag],KCIContextsSoftwareRenderer,nil];返回[CIContext contextWithCGContext:CGContextOptions:contextOptions];]抱歉…我不知道如何将注释指定为代码段。如何使用它?它工作正常。获取NSGraphicsContext*用于渲染CIImage的位置,使用上面的函数获取适当的CIContext,然后调用CIContext方法来绘制图像。这是使用CoreImage在CPU上进行渲染的常规方法,它包含在Apple中它应该可以正常工作