【发布时间】:2026-01-14 05:15:02
【问题描述】:
如何设置CIImage 的一个特定像素的颜色?我需要有最高性能的选项来执行此操作...
【问题讨论】:
如何设置CIImage 的一个特定像素的颜色?我需要有最高性能的选项来执行此操作...
【问题讨论】:
如果您只想设置 一个 像素,您可以创建一个小的颜色内核,将传递的目标坐标与当前坐标进行比较,并对输出进行适当的着色。例如:
let kernel = CIColorKernel(string:
"kernel vec4 setPixelColorAtCoord(__sample pixel, vec2 targetCoord, vec4 targetColor)" +
"{" +
" return int(targetCoord.x) == int(destCoord().x) && int(targetCoord.y) == int(destCoord().y) ? targetColor : pixel; " +
"}"
)
然后,给定一个图像,假设是纯红色:
let image = CIImage(color: CIColor(red: 1, green: 0, blue: 0))
.imageByCroppingToRect(CGRect(x: 0, y: 0, width: 640, height: 640))
如果我们要设置像素为500,100为蓝色:
let targetCoord = CIVector(x: 500, y: 100)
let targetColor = CIColor(red: 0, green: 0, blue: 1)
以下将创建一个名为final 的CIImage,在红海中带有一个蓝色像素:
let args = [image, targetCoord, targetColor]
let final = kernel?.applyWithExtent(image.extent, arguments: args)
如果你想绘制多个像素,这可能不是最好的解决方案。
西蒙
【讨论】: