0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Swift] 補色 と 反対色

Posted at

 
Swift言語に限った内容ではありませんが、

補色 と 反対色

補色 と 反対色 は、異なる色です。

  • 補色 :色相上 正反対に位置する色
  • 反対色:色相だけでなく 明度や彩度も 反対に位置する色

color.png

コード

UIColor/NSColorから 補色反対色 を求める Swift のコードです。

Swift
#if os(macOS)
typealias UIColor = NSColor
#endif

extension UIColor {
    
    //補色を求める
    var complementaryColor: UIColor {
        guard let (r, g, b, a) = self.getRGBA() else { return self }
        let mix = [r, g, b].min()! + [r, g, b].max()!
        return UIColor(red: mix - r, green: mix - g, blue: mix - b, alpha: a)
    }
    
    //反対色を求める
    var oppositeColor: UIColor {
        guard let (r, g, b, a) = self.getRGBA() else { return self }
        return UIColor(red: 1 - r, green: 1 - g, blue: 1 - b, alpha: a)
    }

    //RGBAを求める
    func getRGBA() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat)? {
        var r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat
        (r, g, b, a) = (0, 0, 0, 0)
#if os(macOS)
        self.getRed(&r, green: &g, blue: &b, alpha: &a)
#else
        guard self.getRed(&r, green: &g, blue: &b, alpha: &a) else { return nil }
#endif
        return (r, g, b, a)
    }

    //おまけ
    //RGB を 0-255 で指定するイニシャライザ
    convenience init(_ r: Int, _ g: Int, _ b: Int) {
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: 1)
    }
}

今さらの内容ですが、補色の求め方を間違って理解していたので、ここに残しておきます。

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?