我想从电话画廊中选择一张汽车照片,或者拍摄一张照片并更改其颜色。 我试着改变它的RGB。 但它不工作的照片,我添加到项目。 我怎么能做到呢? 有没有我可以使用的库或任何对我有用的东西? 这是我使用的代码。
func render() {
let centerHueAngle: Float = defaultHue/360.0
var destCenterHueAngle: Float = colorRange.value
let minHueAngle: Float = (defaultHue - hueRange/2.0) / 360
let maxHueAngle: Float = (defaultHue + hueRange/2.0) / 360
let hueAdjustment = centerHueAngle - destCenterHueAngle
if destCenterHueAngle == 0 {
destCenterHueAngle = 1 //force red if slider angle is 0
}
let size = 64
var cubeData = [Float](repeating: 0, count: size * size * size * 4)
var rgb: [Float] = [0, 0, 0]
var hsv: (h : Float, s : Float, v : Float)
var newRGB: (r : Float, g : Float, b : Float)
var offset = 0
for z in 0 ..< size {
rgb[2] = Float(z) / Float(size) // blue value
for y in 0 ..< size {
rgb[1] = Float(y) / Float(size) // green value
for x in 0 ..< size {
rgb[0] = Float(x) / Float(size) // red value
hsv = RGBtoHSV(rgb[0], g: rgb[1], b: rgb[2])
if hsv.h < minHueAngle || hsv.h > maxHueAngle {
newRGB.r = rgb[0]
newRGB.g = rgb[1]
newRGB.b = rgb[2]
} else {
hsv.h = destCenterHueAngle == 1 ? 0 : hsv.h - hueAdjustment //force red if slider angle is 360
newRGB = HSVtoRGB(hsv.h, s:hsv.s, v:hsv.v)
}
cubeData[offset] = newRGB.r
cubeData[offset+1] = newRGB.g
cubeData[offset+2] = newRGB.b
cubeData[offset+3] = 1.0
offset += 4
}
}
}
let b = cubeData.withUnsafeBufferPointer { Data(buffer: $0) }
let data = b as NSData
let colorCube = CIFilter(name: "CIColorCube")!
colorCube.setValue(size, forKey: "inputCubeDimension")
colorCube.setValue(data, forKey: "inputCubeData")
colorCube.setValue(ciImage, forKey: kCIInputImageKey)
if let outImage = colorCube.outputImage {
let context = CIContext(options: nil)
let outputImageRef = context.createCGImage(outImage, from: outImage.extent)
imgCar.image = UIImage(cgImage: outputImageRef!)
}
}
尝试使用UImage
的WithRenderingMode
和UImageView
的.TintColor
属性。
imageView.image = UIImage(named: "myImage")?.withRenderingMode(.alwaysTemplate)
imageView.tintColor = .red