[Swift] 중첩 색상을 생성합니다(알파 블렌딩)

6745 단어 XcodeiOSSwift
Swift에서, 알파 첨부의 색끼리를 겹쳤을 때의 색을 취득하는 (알파 블렌드 한다) 처리의 실장 방법.



구현



UIColor+overlayColor.swift
extension UIColor {
    /// 色を重ね合わせたときの色を生成する
    /// 参考 https://ja.wikipedia.org/wiki/アルファブレンド
    func overlayColor(_ otherColor: UIColor) -> UIColor {
        /// 背景
        var (dstR, dstG, dstB, dstA) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
        /// 前景
        var (srcR, srcG, srcB, srcA) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))

        getRed(&dstR, green: &dstG, blue: &dstB, alpha: &dstA)
        otherColor.getRed(&srcR, green: &srcG, blue: &srcB, alpha: &srcA)

        let outA = srcA + dstA - dstA * srcA
        let outR = (srcR * srcA + dstR * dstA * (1 - srcA)) / outA
        let outG = (srcG * srcA + dstG * dstA * (1 - srcA)) / outA
        let outB = (srcB * srcA + dstB * dstA * (1 - srcA)) / outA
        return UIColor(red: outR,
                       green: outG,
                       blue: outB,
                       alpha: outA)
    }
}

생성된 색





화살표로 표시된 부분이 이번에 작성한 메소드로 계산된 색입니다.

샘플 코드



Playground를 만들었습니다. 동작 확인을 하고 싶은 분은 이쪽으로부터 부디.
htps : // 기주 b. 코 m / zr 응 - s / 오 ぇ r ぁ y 코 r /

감사의 말



구현은 아래의 사이트를 참고로 했습니다.
  • 알파 블렌드 - Wikipedia
  • 좋은 웹페이지 즐겨찾기