【问题标题】:Manipulating color in Tcl在 Tcl 中处理颜色
【发布时间】:2016-06-18 07:28:11
【问题描述】:

我想取一种颜色并获得更深的颜色。颜色可以是 Tcl 中允许的颜色的任何一种形式,即blue#0000FF 或 tcl 识别为颜色的任何其他形式。

有没有办法做到这一点?

我需要的示例,当我得到一种颜色时,我想从它的红色、蓝色和绿色值中减去一个常数(或常数部分,即 * 0.8),以使其成为相同颜色的较暗阴影。

【问题讨论】:

    标签: colors tcl tk


    【解决方案1】:

    要获取颜色的 RGB 值,请使用 winfo rgb

    lassign [winfo rgb . $thecolor] r g b
    

    唉,您返回的值在 0–65535 范围内。当你想将它们重新打包成可解析的颜色时,你需要做一些工作:

    set thecolor [format "#%02x%02x%02x" [expr {$r/256}] [expr {$g/256}] [expr {$b/256}]]
    

    因此,要获得更深的颜色,请执行以下操作:

    proc darker {color {ratio 0.8}} {
        lassign [winfo rgb . $color] r g b
    
        set r [expr {$r * $ratio}]
        set g [expr {$g * $ratio}]
        set b [expr {$b * $ratio}]
    
        return [format "#%02x%02x%02x" \
                [expr {int($r/256)}] [expr {int($g/256)}] [expr {int($b/256)}]]
    }
    

    【讨论】:

    • Of course, when picking “darker” colors you should arguably work in the HSV colorspace instead of the RGB one, but that's only really necessary when changing hues.
    • 我给winfo rgb命令(你把.放在哪里)的窗口有关系吗?
    【解决方案2】:

    游戏迟到了,但是 Tk 的标准发行版中内置了一个函数可以做到这一点:

    ::tk::Darken color percent
    

    其中 color 是任何有效的 Tk 颜色名称,percent 是“整数,以百分比表示变亮或变暗:50 表示变暗 50%,110 表示变亮 10%。”

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 2011-02-07
      • 2012-11-02
      • 2012-12-23
      • 2011-04-12
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多