【问题标题】:CIImage: set color of one specific pixelCIImage:设置一个特定像素的颜色
【发布时间】:2026-01-14 05:15:02
【问题描述】:

如何设置CIImage 的一个特定像素的颜色?我需要有最高性能的选项来执行此操作...

【问题讨论】:

    标签: ios9 ciimage


    【解决方案1】:

    如果您只想设置 一个 像素,您可以创建一个小的颜色内核,将传递的目标坐标与当前坐标进行比较,并对输出进行适当的着色。例如:

    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)
    

    以下将创建一个名为finalCIImage,在红海中带有一个蓝色像素:

    let args = [image, targetCoord, targetColor]
    let final = kernel?.applyWithExtent(image.extent, arguments: args)
    

    如果你想绘制多个像素,这可能不是最好的解决方案。

    西蒙

    【讨论】: