根据Apple文档,我对CIColorCube进行了非常简单的设置。使用默认的未修改值进行过滤时,输出图像完全关闭 - 99.9%的图像是透明的,此处只有几个像素可见。
更新
我(部分)弄明白问题是什么 - 我使用Metal进行CIImage处理。在标准OpenGL上下文中处理时,一切都按预期工作。
这个问题仍然有效 - 为什么在Metal Context中处理CIColorCube
过滤器时图像完全关闭?
金属上下文创建:
guard
let device:MTLDevice = MTLCreateSystemDefaultDevice()
else {
return nil
}
let context = CIContext(
mtlDevice: device
)
OpenGL上下文创建:
let context = CIContext()
输出图像的比较:
END OF UPDATE
标准CIColorCube的代码:
let size = 64
var cubeData = [Float](repeating: 0, count: size * size * size * 4)
var rgb:[Float] = [0, 0, 0]
var offset = 0
for z in 0 ..< size {
rgb[2] = Float(z) / Float(size) // blue
for y in 0 ..< size {
rgb[1] = Float(y) / Float(size) // green
for x in 0 ..< size {
rgb[0] = Float(x) / Float(size) // red
cubeData[offset] = rgb[0]
cubeData[offset+1] = rgb[1]
cubeData[offset+2] = rgb[2]
cubeData[offset+3] = 1.0
offset += 4
}
}
}
let data = Data(buffer: UnsafeBufferPointer(start: &cubeData, count: cubeData.count))
guard
let colorCubeFilter = CIFilter(name: "CIColorCube")
else {
return nil
}
colorCubeFilter.setValue(inputImage, forKey: "inputImage")
colorCubeFilter.setValue(size, forKey: "inputCubeDimension")
colorCubeFilter.setValue(data, forKey: "inputCubeData")
guard
let result = colorCubeFilter.outputImage
else {
return nil
}