3
1

More than 3 years have passed since last update.

[Swift] 重ね合わせの色を生成する(アルファブレンドする)

Last updated at Posted at 2021-02-11

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を作成しました。動作確認をしたい方はこちらからどうぞ。
https://github.com/zrn-ns/OverlayColor/

謝辞

実装は下記のサイトを参考にさせていただきました。

3
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
3
1