用两种不同的颜色给图像着色

Posted

技术标签:

【中文标题】用两种不同的颜色给图像着色【英文标题】:Tint image with two different colors 【发布时间】:2017-10-05 08:34:01 【问题描述】:

我有一个有两种颜色的图像:中心用红色填充的圆圈和周围的白色环。

有没有办法用两种不同的颜色为该图像着色?例如:用绿色填充内圈,用蓝色填充外圈。

是否可以只改变外圈的颜色?

为图像着色:

let image = UIImage(named: "circles")?.tintWithColor(UIColor.red)

总是改变两个圆圈的颜色。

【问题讨论】:

你能显示你在问题中描述的图像吗? 你不能对图像进行更改,所以使用 UIView。 为什么这被否决了? 【参考方案1】:

您不能像这样对图像进行更改,所以请使用 UIView。

使用这个自定义类

import UIKit

@IBDesignable
class CircleView: UIView 

    @IBInspectable var strokeWidth: CGFloat = 0
    @IBInspectable var outerFillColor: UIColor = UIColor.clear
    @IBInspectable var innerFillColor: UIColor = UIColor.red
    @IBInspectable var strokeColor: UIColor = UIColor.clear
    @IBInspectable var innerWidth: CGFloat = 0

    @IBInspectable var bgColor: UIColor = UIColor.white 
        didSet 
            backgroundColor = bgColor
        
    


    override func draw(_ rect: CGRect) 
        self.backgroundColor = bgColor
        let circlePath = UIBezierPath(ovalIn: rect)

        let shapeLayer = CAShapeLayer()
        shapeLayer.path = circlePath.cgPath

        shapeLayer.fillColor = outerFillColor.cgColor

        shapeLayer.strokeColor = strokeColor.cgColor

        shapeLayer.lineWidth = strokeWidth

        self.layer.addSublayer(shapeLayer)

        let iFrame = CGRect(x: self.frame.width/2 - innerWidth/2,
                            y: self.frame.height/2 - innerWidth/2,
                            width: innerWidth, height: innerWidth)

        let innerCirclePath = UIBezierPath(ovalIn: iFrame)

        let shapeLayerInner = CAShapeLayer()
        shapeLayerInner.path = innerCirclePath.cgPath
        shapeLayerInner.fillColor = innerFillColor.cgColor
        self.layer.addSublayer(shapeLayerInner)
    



如何使用

    从情节提要中获取 UIView 并分配类。

    现在使用该属性

    StrokeWidth:外圆宽度。

    StrokeColor:外圈颜色。

    outerFillColor:外圈填充颜色。

    innerWidth :内圈宽度。

    innerFillColor:内圈填充颜色。

    bgcolor: uiview 的背景色,在storyboard 中已经有。这是额外的。

输出

现在从情节提要更改更改颜色并检查。属性会立即应用于情节提要,因此您无需运行项目。

【讨论】:

以上是关于用两种不同的颜色给图像着色的主要内容,如果未能解决你的问题,请参考以下文章

如何为图像视图的一种颜色着色?

基于顶点的openGL中具有不同颜色的三角形的平面着色

LeetCode图专题(未完成)

将精灵从灰度着色为彩色

二分着色

图的着色算法