ulis, 25-01-2005. Voici un petit script pour voir les couleurs en gris.
Pourquoi
Pour répondre à une demande de Miko. Qui voulait autre chose...
Comment
Le gris s'obtient en remplaçant les composants RGB par leur moyenne : Xrgb = (Xr + Xg + Xb) / 3 # teinte moyenne
Le script
proc gray {img omg} \ { set idata [$img data] set maxrow [llength $idata] set maxcol [llength [lindex $idata 0]] for {set i 0} {$i < $maxrow + 1} {incr i} \ { for {set j -1} {$j < $maxcol + 1} {incr j} { set er($i,$j) 0 } } for {set nrow 0} {$nrow < $maxrow} {incr nrow} \ { set irow [lindex $idata $nrow] set orow {} for {set ncol 0} {$ncol < $maxcol} {incr ncol} \ { set nrow1 [expr {$nrow + 1}] set ncol1 [expr {$ncol + 1}] set ncol2 [expr {$ncol - 1}] set ipix [lindex $irow $ncol] set r 0x[string range $ipix 1 2] set g 0x[string range $ipix 3 4] set b 0x[string range $ipix 5 6] set c [expr {round(($r + $g + $b) / 3.0)}] set cx [format %2.2x $c] set opix #$cx$cx$cx lappend orow $opix } lappend odata $orow } $omg put $odata }
Le test
package require Tk package require Img # image7.png : http://wfr.tcl.tk/fichiers/ulis/image7.png image create photo img -file image.jpg image create photo omg gray img omg set width [image width img] set height [image height img] canvas .c -bd 0 -highlightt 0 \ -width [expr {$width * 2}] -height $height .c create image 0 0 -anchor nw -image img .c create image $width 0 -anchor nw -image omg pack .c
Voir aussi
Discussion
GM, 28-03-09
Pour tenir compte de la transparence, il suffit d'ajouter à la fin su script (après "$omg put $odata"):
set nrow [image height $img] set ncol [image width $img] for {set i 0} {$i < $nrow} {incr i} { for {set j 0} {$j < $ncol} {incr j} { set t [$img transparency get $j $i] if { $t } { $omg transparency set $j $i $t } } }
Catégorie Exemple | Catégorie Traitement d'image