🧑💻/Swift
Swift UIColor 색상 밝은지 어두운지 확인하기
유리맥
2023. 3. 1. 19:38
반응형
UIColor가 밝은 색상인지, 어두운 색상인지 확인해 봅시다~
어떨 때 체크하는가? 필요한가? 하면 제 경우는
카드의 배경 색상이 밝은 색이라면 검은색 케밥 버튼 을, 어두운 색이라면 흰색 케밥 버튼 을 표시해야 했습니다.버튼 이름이 너무 귀여워..
UIColor.isLight()
코드는 간단합니다. 색상을 이루고 있는 RGB 값을 체크하여 밝기를 알아냅니다.
Threshold를 높일 수록 "밝다"고 판단하는 기준이 높아집니다.
import UIKit
extension UIColor {
func isLight(threshold: Float = 0.5) -> Bool {
let originalCGColor = self.cgColor
let RGBCGColor = originalCGColor.converted(to: CGColorSpaceCreateDeviceRGB(), intent: .defaultIntent, options: nil)
guard let components = RGBCGColor?.components,
components.count >= 3 else {
return true
}
let brightness = Float(((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000)
return (brightness > threshold)
}
}
원리
많은 블로그에서는 왜 299, 587, 114 값으로 밝기를 계산하는 지 다루지 않더라구요.
궁금해서 찾아보았습니다.
먼저 RGB (Red, Green, Blue)를 가장 단순한 색인 Gray로 변환합니다.
0x000000은 검은색, 0xFFFFFF는 흰색 으로 표현하죠?
그 사이 값인 회색으로 밝기 정도를 나타낸다고 이해하시면 되겠습니다.
RGB를 Gray 값으로 변경할 때 가볍게 생각해보면 RGB 값의 평균 값을 생각할 수 있을 텐데요.
여러 연구를 통해 확인한 결과, 우리의 눈은 녹색 > 빨간색 > 파란색 순서로 민감합니다.
가중치를 다르게 두어 실험한 결과 아래와 같은 Luminosity Method 방정식이 나오게 되었습니다. 짜잔!
Grayscale = 0.299*R + 0.587*G + 0.114*B
반응형