Skip to content

Instantly share code, notes, and snippets.

@Coder-ACJHP
Created July 17, 2020 09:21
Show Gist options
  • Save Coder-ACJHP/1216cdbad383d6607f95bd9c71be05a9 to your computer and use it in GitHub Desktop.
Save Coder-ACJHP/1216cdbad383d6607f95bd9c71be05a9 to your computer and use it in GitHub Desktop.
Change rgb colors of UIImage with given multipliers [0-2]
/// 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