2

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

有没有办法做到这一点?

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

4

2 回答 2

3

要获取颜色的 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)}]]
}
于 2013-09-15T16:45:53.873 回答
1

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

::tk::Darken color percent

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

于 2016-06-17T23:10:02.897 回答