#------------------------------------------------------------------------
#
# Copyright (c) 1997-1998 by Cornell University.
# 
# See the file "license.txt" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
#------------------------------------------------------------------------
package require DvmBasic
package require DvmPnm
package require DvmKernel

source ../lib/pnmlib.tcl

if {$argc < 2} {
    puts "enter input pgm filename :"
    set inname [gets stdin]
    puts "enter output pgm filename :"
    set outname [gets stdin]
} else {
    set inname [lindex $argv 0]
    set outname [lindex $argv 1]
}

set hdrbyte [read_pgm $inname]
set hdr [lindex $hdrbyte 0]
set image [lindex $hdrbyte 1]
set w [pnm_hdr_get_width $hdr]
set h [pnm_hdr_get_height $hdr]
set kw 4
set kh 4
set k [kernel_new $kw $kh]
kernel_set_values $k {{1 1 1 1} {1 0 0 1} {1 0 0 1} {1 1 1 1}}
kernel_set_offset $k 0
kernel_set_div_factor $k 12

#Use a virtual byte image to get a resultant image of the same dimensions
#as the source image. Basically copy the source image into a larger temp
#image and extend the boundaries of the source image until it fills the 
#entire temp image. Finally apply the convolution to the temp image.
set t1 [byte_new [expr $w+$kw-1] [expr $h+$kh-1]]
set t2 [byte_clip $t1 [expr $kw/2] [expr $kh/2] $w $h]
byte_copy $image $t2
byte_extend $t1 [expr $kw-1] [expr $kh-1]

set kernimage [byte_new $w $h]
kernel_apply $k $t1 $kernimage

write_pgm [lindex $hdrbyte 0] $kernimage $outname

byte_free $kernimage
byte_free $image
byte_free $t2
byte_free $t1
kernel_free $k
pnm_hdr_free [lindex $hdrbyte 0]