将[[uicolor]]转换为uiimage



我正在使用一个过滤器应用程序,该应用需要将UIImage分解为像素矩阵[[UIColor]]本质上。

进行操作后,我需要将[[UIColor]]转换回UIImage,但找不到这样做的方法。

我唯一发现的是.setFill(color),它将整个图像设置为具有单一颜色。

有什么像.setData(color:[[UIColor]])这样的东西吗?这是我过去从 UIImage->转到颜色矩阵(在堆栈溢出中找到的...)

extension UIImage {
    func getPixelColor(pos: CGPoint) -> UIColor {
        var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
        var data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
        var pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
        var r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
        var g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
        var b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
        var a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)
        return UIColor(red: r, green: g, blue: b, alpha: a)
    }
}

关于如何转换的任何想法?

有点...

首先,您应该意识到UIImage只是其他东西的包装器,很可能是CGImageUIColor主要用于使用绘图命令时使用,因此您可以创建一个CGContext并绘制一系列的1x1px rects。这不是您想要的。

创建一个结构

您想创建一个结构以保持您的颜色值。

struct PixelData 
{
    var red: UInt8
    var green: UInt8
    var blue: UInt8
    var alpha: UInt8
}

因此,通过拥有此结构,您具有一个非常简单的中间形式,然后一旦将这些数据塞入[Pixeldata],就可以很容易地将其写入CGimage。注意:这是具有宽度时间高度pixelsdata structs的1-d阵列,其中一行数据随后是另一个。

最新更新