Created
July 17, 2020 09:21
-
-
Save Coder-ACJHP/1216cdbad383d6607f95bd9c71be05a9 to your computer and use it in GitHub Desktop.
Change rgb colors of UIImage with given multipliers [0-2]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Update image RGB colors with sliders | |
public func updateImageColorsWith(multiplier: [CGFloat], of: UIImage) -> UIImage { | |
guard let inputCGImage = of.cgImage else { | |
print("Unable to get cgImage") | |
return of | |
} | |
let colorSpace = CGColorSpaceCreateDeviceRGB() | |
let width = inputCGImage.width | |
let height = inputCGImage.height | |
let bytesPerPixel = 4 | |
let bitsPerComponent = 8 | |
let bytesPerRow = bytesPerPixel * width | |
let bitmapInfo = RGBA32.bitmapInfo | |
guard let context = CGContext(data: nil, | |
width: width, | |
height: height, | |
bitsPerComponent: bitsPerComponent, | |
bytesPerRow: bytesPerRow, | |
space: colorSpace, | |
bitmapInfo: bitmapInfo) else { | |
print("Cannot create context!"); | |
return of | |
} | |
context.draw(inputCGImage, in: CGRect(x: 0, y: 0, width: width, height: height)) | |
guard let buffer = context.data else { | |
print("Cannot get context data!") | |
return of | |
} | |
let pixelBuffer = buffer.bindMemory(to: RGBA32.self, capacity: width * height) | |
for row in 0 ..< Int(height) { | |
for column in 0 ..< Int(width) { | |
let offset = row * width + column | |
var fRed = CGFloat(pixelBuffer[offset].redComponent) * multiplier[0] | |
if fRed > 255 { fRed = 255 } | |
let redColor = UInt8(fRed); | |
var fGreen = CGFloat(pixelBuffer[offset].greenComponent) * multiplier[1] | |
if fGreen > 255 { fGreen = 255 } | |
let greenColor = UInt8(fGreen) | |
var fBlue = CGFloat(pixelBuffer[offset].blueComponent) * multiplier[2] | |
if fBlue > 255 { fBlue = 255 } | |
let blueColor = UInt8(fBlue) | |
pixelBuffer[offset] = RGBA32(red: redColor, green: greenColor, blue: blueColor, alpha: pixelBuffer[offset].alphaComponent) | |
} | |
} | |
guard let outputCGImage = context.makeImage() else { | |
print("Cannot make image!") | |
return of | |
} | |
return UIImage(cgImage: outputCGImage, scale: image.scale, orientation: image.imageOrientation) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment