ios - 如何在图像像素上应用 CIFilter

标签 ios swift core-image cifilter unsafemutablepointer

我知道可以使用像素缓冲区更改像素的颜色,如下面的代码所示,但我只想使用“CIFilter”模糊像素而不是更改颜色。我不想在整个图像上应用“CIFilter”。

//data pointer – stores an array of the pixel components. For example (r0, b0, g0, a0, r1, g1, b1, a1 .... rn, gn, bn, an)
let data : UnsafeMutablePointer<UInt8> = calloc(bytesPerRow, height)!.assumingMemoryBound(to: UInt8.self)

//get the index of the pixel (4 components times the x position plus the y position times the row width)
let pixelIndex = 4 * (location.x + (location.y * width))

//set the pixel components to the color components
data[pixelIndex] = red
data[pixelIndex+1] = green
data[pixelIndex+2] = blue
data[pixelIndex+3] = alpha

我们还可以使用以下代码在 Pixel 上应用 CIFilter 吗?

if let pixelData = self.cgImage?.dataProvider?.data {
   let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
   let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
   let red = CGFloat(data[pixelInfo]) / CGFloat(255.0)
   let green = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
   let blue = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
   let alpha = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)
 }

最佳答案

查看 CIBlendWithMask筛选。它允许您创建任何形状(甚至是单个像素)的 mask ,并使用它来将输入与另一个输入混合。如果您使 inputBackgroundImage 成为原始图像,并使 inputImage 成为应用了所需滤镜的原始图像,则 inputImageMask 是全黑的仅包含您想要更改为白色的单个像素的图像。

关于ios - 如何在图像像素上应用 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57829875/

相关文章:

swift - 具有替代书写方式的 NSComboBox

database - Swift 代码在变量设置期间结束

iphone - UIScrollView 的 contentOffset

ios - iOS 中的自动评估配置

ios - Swift 1.2,如何从 Parse1.7 正确检索图像?

ios - Core Image 颜色内核的 Metal 着色语言,如何传递 float3 数组

macos - 未找到 CoreImage.framework

swift - Xcode 9.x 中 Core Image 和 "sig abrt"的自定义过滤器

ios - 运行 ionic build ios 命令时权限被拒绝错误?

javascript - 如何使用 JavaScriptCore 将错误记录到 XCode?