본문으로 바로가기

bonkora 이 제공해 주신 팁입니다.


제가 시험해 보니 MS윈도의 비트맵 파일은 Tcl/Tk에서 불러서 사용할 수 없습니다.

Tcl/Tk의 비트맵 이미지는 전경색과 배경색으로 이루어져 있습니다.
각 픽셀이 전경색으로 되어 있는지 배경색으로 되어 있는지를 문자열에 기록하여 이것으로 비트맵 이미지를
만드는 방법이 있어 소개드립니다.
이 내용은 wiki.tcl.tk에서 구한 자료를 참조하였습니다.

proc str2bmp strimj {
    set width  [string length [lindex $strimj 0]]
    set height [llength $strimj]
    set bytes {}
    foreach line [string map {. 0} $strimj] {
        regsub -all {[^0]} $line 1 line ;# black pixel
        foreach bin [split [binary format b* $line] ""] {
            lappend bytes [scan $bin %c]
        }
    }
    set    res "#define i_width $width\n#define i_height $height\n"
    append res "static char i_bits\[\] = {\n[join $bytes ,]\n}"
 }

위 코드를 실행시키면 프러시저 str2bmp가 메모리에 적재됩니다.
아래에 변수 heart에 하트 그림을 나타내는 내용을 넣은 후 이 자료를 갖고 비트맵 이미지 i를 만들고 이 이미지를 버튼에 사용하는 예를 보여 드립니다.
아래 변수 heart에는 전경색을 나타낼 픽셀에는 '@'를 배경색을 나타낼 픽셀에는 '.'을 넣습니다. 행과 열을 맞추어 입력하는데, '@'나 '.' 외의 다른 글자가 들어가면 에러가 발생합니다.

set heart {
    .................
    .................
    ...@@@@...@@@@...
    ..@@@@@@.@@@@@@..
    .@@@@@@@@@@@@@@@.
    .@@@@@@@@@@@@@@@.
    .@@@@@@@@@@@@@@@.
    .@@@@@@@@@@@@@@@.
    ..@@@@@@@@@@@@@..
    ...@@@@@@@@@@@...
    ....@@@@@@@@@....
    .....@@@@@@@.....
    ......@@@@@......
    .......@@@.......
    ........@........
    .................
}
image create bitmap i -data [str2bmp $heart] -background yellow -foreground red
button .b -image i
pack .b