我正在开发一个过滤器应用,它需要将UIImage
分解为像素矩阵[[UIColor]]
。
执行操作后,我需要将[[UIColor]]
转换回UIImage
,但我找不到这样做的方法。
我唯一能找到的是.setFill(color)
,它将整个图像设置为单一颜色。
是否有类似.setData(color:[[UIColor]])
的内容?这就是我过去常常从UIImage
- >到一个颜色矩阵(在Stack Overflow中找到它...)
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)
}
}
有关如何将其转换回来的任何想法?
答案 0 :(得分:-1)
首先,您应该知道UIImage
只是其他内容的包装器,很可能是CGImage
。 UIColor
主要用于使用绘图命令,因此您可以创建CGContext并绘制一系列1x1px rects。这不是你想要的。
您想要创建一个结构来保存颜色值。
struct PixelData
{
var red: UInt8
var green: UInt8
var blue: UInt8
var alpha: UInt8
}
因此,通过使用这个结构,您可以获得一个非常简单的中间形式,然后一旦将这些数据填充到[PixelData]中,就可以很容易地将其写入CGImage。注意:这是一维数组,宽度乘以高度PixelsData结构,一行数据后跟另一行。