在Tcl中操纵颜色

时间:2013-09-15 16:21:53

标签: colors tcl tk

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

有办法做到这一点吗?

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

2 个答案:

答案 0 :(得分:2)

要获取颜色的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)}]]
}

答案 1 :(得分:1)

游戏的后期,但是Tk的标准发行版中有一个功能可以实现:

::tk::Darken color percent

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