Last active
December 22, 2016 15:06
-
-
Save takayoshiotake/5407f684041067cc464857737d7c01d9 to your computer and use it in GitHub Desktop.
Color blending with Swift
This file contains hidden or 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
| #if os (macOS) | |
| import AppKit | |
| typealias ColorType = NSColor | |
| #elseif os (iOS) | |
| import UIKit | |
| typealias ColorType = UIColor | |
| #endif | |
| extension ColorType { | |
| var r: CGFloat { | |
| get { return redComponent } | |
| } | |
| var g: CGFloat { | |
| get { return greenComponent } | |
| } | |
| var b: CGFloat { | |
| get { return blueComponent } | |
| } | |
| var a: CGFloat { | |
| get { return alphaComponent } | |
| } | |
| } | |
| func & (a: ColorType, b: ColorType) -> ColorType { | |
| var temp = ColorType.init(red: a.r * a.a + b.r * b.a, green: a.g * a.a + b.g * b.a, blue: a.b * a.a + b.b * b.a, alpha: 1) | |
| let m = [temp.r, temp.g, temp.b].max(by: { $0 < $1 })! | |
| if m > 1 { | |
| temp = ColorType.init(red: temp.r / m, green: temp.g / m, blue: temp.b / m, alpha: 1) | |
| } | |
| return temp | |
| } | |
| let orange = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 1, blue: 0, alpha: 0.5) | |
| let pink = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) | |
| let white = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 1, blue: 0, alpha: 1) & #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment