目次
前
次
画像表示
TeraTermで取得できるのは、テキストデータなので、取得画像を
画面表示するには、JPEG形式やGIF形式にしなければなりません。
HSPでテキストデータを画面表示するかと考えましたが、プログラム
作成に時間をかけたくないので、既存の変換ソフトを使います。
UNIXであれば、画像変換ソフトの定番はImageMagick。
WindowsでもImageMagickを使えるのがわかったので、ダウンロード
して、インストールしました。
画像データを、ImageMagickのconvertで処理できる形式にするため
テキストエディタでPGM形式ファイルを作成します。
PGM形式ファイルは、文字列になっているテキストデータにヘッダを
付加すれば、テキストエディタで処理できます。
今回は、128ピクセルx128ラインのデータで、256階調としたので
ヘッダは、次の3行になります。
P2
128 128
255
1行目には、PGM形式でデータを数字列で格納しているとの宣言。
2行目は、横のピクセル数と縦のライン数を意味します。
3行目は、階調の最大値を表現します。
処理は、次のようにします。
PGM形式ファイル生成
TeraTermで取得したテキストデータは、1行が16データになって
いるので、Tcl/Tkを利用して1行を128データにします。
また、先頭にヘッダファイルを付加しPGM形式ファイルを作成します。
Tcl/Tkのスクリプトは、以下としました。
#!/bin/sh
wm title . "PGM generator"
# clear file names
set fname ""
set pname ""
set fd_in ""
set fd_out ""
# add menu on TopLevel
. configure -menu .mnuTop
menu .mnuTop
# add sub form
.mnuTop add cascade -label File -underline 0 -menu .mnuTop.file
menu .mnuTop.file -tearoff no
# add sub menu "Open"
.mnuTop.file add command -label "Open" -command {OpenText}
# add sub menu "Save"
.mnuTop.file add command -label "Save" -command {SaveImage}
# add sub menu "Quit"
.mnuTop.file add command -label "Quit" -command {exit}
# declare image file
image create photo input_image -file $fname
# set window size
set w 1000
set h 1000
label .lblTxt -textvariable fname
label .lblPgm -textvariable pname
pack .lblTxt
pack .lblPgm
#######################
# Open Text procedure
#######################
proc OpenText { } {
global fname pname
# set file types
set ftype {{ "text Files" .txt} { "All Files" * }}
# get file name from built-in tool
set fname [tk_getOpenFile -filetypes $ftype -parent . ]
# create file name
set xlist [split $fname "."]
set xlist [split $xlist "/"]
set xlist [lindex $xlist end]
set pname [lindex $xlist 0]
set pname "$pname.pgm"
}
#######################
# Save Image procedure
#######################
proc SaveImage { } {
global fname gname pname
# open files
set fd_in [open $fname "r"]
set fd_out [open $pname "w"]
# add header
puts $fd_out "P2"
puts $fd_out "128 128"
puts $fd_out "255"
# justify context
set i 0
set obuf ""
while { [gets $fd_in sbuf] >= 0 } {
# store
set tmp [string trimright $sbuf " "]
set obuf "$obuf$tmp "
# increment
incr i
# judge
if { $i == 8 } {
set pgm [string trimright $obuf " "]
# show
puts $fd_out $pgm
# prepare next
set i 0
set obuf ""
}
}
# close
close $fd_in
close $fd_out
}
(このTcl/Tkスクリプトは、PgmGenと命名。)
次のように操作します。
pgmgen.tclをダブルクリックして、起動します。
(WindowsではActiveTclをインストールしておけば、操作は同じです。)
Fileをクリックして、Openを選びます。
テキストファイルの一覧から、PGM形式に変換したいファイルを選びます。
選ばれたテキストファイル名とPGM形式のファイル名が表示されます。
Fileをクリックして、Saveを選ぶと、PGM形式ファイルが作成されます。
Fileをクリックして、Quitを選ぶと終了します。
GIF形式ファイル生成
Tcl/Tkのスクリプトで、テキストファイルをPGM形式にした後は
ImageMagickのconvertで、GIF形式に変換します。
convert sx7.pgm sx7.gif
これで、PGM形式のファイルsx7から、GIF形式のsx7を生成しています。
GIF形式ファイル表示
Tcl/Tkのスクリプトで、GIF形式ファイルの内容を画面表示します。
(GBCで撮影したMCRのコースの一部です。)
このTcl/Tkスクリプトは、ImageViewerとしました。
#!/bin/sh
wm title . "Image Viewer"
#######################
# clear file names
#######################
set fname ""
set input_image ""
#######################
# add menu on TopLevel
#######################
. configure -menu .mnuTop
menu .mnuTop
# add sub form
.mnuTop add cascade -label File -underline 0 -menu .mnuTop.file
menu .mnuTop.file -tearoff no
# add sub menu "Open"
.mnuTop.file add command -label "Open" -command {OpenImage}
# add sub menu "Quit"
.mnuTop.file add command -label "Quit" -command {exit}
#######################
# declare image file
#######################
image create photo input_image -file $fname
#######################
# set window dimension
#######################
set w 1000
set h 1000
##############################################
# define image canvas with both scroll bar
##############################################
canvas .drawcanvas -background white -width 200 -height 200 \
-scrollregion "0 0 $w $h" -yscrollcommand ".yscrl set" \
-xscrollcommand ".xscrl set"
scrollbar .yscrl -command ".drawcanvas yview"
scrollbar .xscrl -command ".drawcanvas xview" -orient horizontal
##############################################
# place objects
##############################################
pack .yscrl -side right -fill y
pack .xscrl -side bottom -fill x
pack .drawcanvas -side left -fill both -expand yes
.drawcanvas create image 0 0 -image input_image -anchor nw
#######################
# Open Image procedure
#######################
proc OpenImage { } {
# set file types
set ftype {{ "gif Files" .gif} { "All Files" * }}
# get file name from built-in tool
set fname [tk_getOpenFile -filetypes $ftype -parent . ]
if { [regexp {ppm$|gif$|pgm$|pbm$} $fname] > 0 } {
input_image read $fname
}
}
次のように操作します。
imageviewer.tclをダブルクリックして、起動します。
Fileをクリックして、Openを選びます。
GIFファイルの一覧から、表示したいファイルを選びます。
選んだGIFファイルが表示されます。
Fileをクリックして、Quitを選ぶと終了します。
今なら、Perl、Python、Ruby等のスクリプト言語で
もう少し簡単に処理できるでしょう。
目次
前
次