summaryrefslogtreecommitdiffstats
path: root/ds9/library/saveimage.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/saveimage.tcl')
-rw-r--r--ds9/library/saveimage.tcl271
1 files changed, 271 insertions, 0 deletions
diff --git a/ds9/library/saveimage.tcl b/ds9/library/saveimage.tcl
new file mode 100644
index 0000000..4ddef37
--- /dev/null
+++ b/ds9/library/saveimage.tcl
@@ -0,0 +1,271 @@
+# Copyright (C) 1999-2016
+# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+# For conditions of distribution and use, see copyright notice in "copyright"
+
+package provide DS9 1.0
+
+proc SaveImageDef {} {
+ global saveimage
+
+ set saveimage(jpeg,quality) 75
+ set saveimage(tiff,compress) none
+
+ set aa [msgcat::mc {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.}]
+ set bb [msgcat::mc {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.}]
+ set cc [msgcat::mc {This function is not currently supported for this port.}]
+
+ global ds9
+ switch $ds9(wm) {
+ x11 {
+ global tcl_platform
+ switch $tcl_platform(os) {
+ Darwin {
+ switch [lindex [split $tcl_platform(osVersion) {.}] 0] {
+ 10 -
+ 11 {set saveimage(error) $bb}
+ 8 -
+ 9 -
+ default {set saveimage(error) $aa}
+ }
+ }
+ default {set saveimage(error) $aa}
+ }
+ }
+ aqua -
+ win32 {set saveimage(error) $cc}
+ }
+}
+
+proc SaveImageDialog {format} {
+ global saveimage
+ global fitsfbox
+ global epsfbox
+ global giffbox
+ global jpegfbox
+ global tifffbox
+ global pngfbox
+
+ switch -- $format {
+ fits {set fn [SaveFileDialog fitsfbox]}
+ eps {set fn [SaveFileDialog epsfbox]}
+ gif {set fn [SaveFileDialog giffbox]}
+ jpeg {set fn [SaveFileDialog jpegfbox]}
+ tiff {set fn [SaveFileDialog tifffbox]}
+ png {set fn [SaveFileDialog pngfbox]}
+ }
+
+ if {$fn != {}} {
+ set ok 1
+ switch -- $format {
+ fits -
+ eps -
+ gif -
+ png {}
+ jpeg {set ok [JPEGExportDialog saveimage(jpeg,quality)]}
+ tiff {set ok [TIFFExportDialog saveimage(tiff,compress)]}
+ }
+
+ if {$ok} {
+ SaveImage $fn $format
+ }
+ }
+}
+
+proc SaveImage {fn format} {
+ global ds9
+ global current
+ global saveimage
+ global cube
+
+ if {$fn == {} || ![$current(frame) has fits]} {
+ return
+ }
+
+ # besure we are on top
+ raise $ds9(top)
+
+ # and no highlite
+ $current(frame) highlite off
+ # and refresh screen
+ RealizeDS9
+
+ switch -- $format {
+ fits {$current(frame) save fits resample file "\{$fn\}"}
+ eps {EPS $fn}
+ gif -
+ tiff -
+ jpeg -
+ png {SaveImagePhoto $fn $format}
+ }
+
+ # reset
+ switch -- $ds9(display) {
+ single -
+ blink {}
+ tile {$current(frame) highlite on}
+ }
+
+ # and refresh screen
+ RealizeDS9
+}
+
+# Support
+
+proc SaveImagePhoto {fn format} {
+ global ds9
+ global saveimage
+
+ switch $ds9(wm) {
+ x11 {}
+ aqua -
+ win32 {
+ Error $saveimage(error)
+ return
+ }
+ }
+
+ set rr [catch {image create photo -format window -data $ds9(canvas)} ph]
+ if {$rr != 0} {
+ Error $saveimage(error)
+ }
+
+ switch -- $format {
+ gif -
+ png {$ph write $fn -format $format}
+ jpeg {$ph write $fn \
+ -format [list $format -quality $saveimage(jpeg,quality)]}
+ tiff {$ph write $fn \
+ -format [list $format -compression $saveimage(tiff,compress)]}
+ }
+
+ image delete $ph
+}
+
+# Process Cmds
+
+proc ProcessSaveImageCmd {varname iname} {
+ upvar $varname var
+ upvar $iname i
+
+ # we need to be realized
+ # yes, really need this
+ # ProcessRealizeDS9
+ UpdateDS9
+ RealizeDS9
+
+ set format {}
+ set param {}
+ set fn [lindex $var $i]
+ if {$fn == {}} {
+ return
+ }
+
+ # backward compatibility
+ switch $fn {
+ fits -
+ eps -
+ gif -
+ tiff -
+ jpeg -
+ png {
+ set format $fn
+ set fn {}
+ incr i
+ }
+ jpg {
+ set format jpeg
+ set fn {}
+ incr i
+ }
+ tif {
+ set format tiff
+ set fn {}
+ incr i
+ }
+ mpeg {
+ # backward compatibility
+ global movie
+ incr i
+ set fn [lindex $var $i]
+ if {[string is integer -strict $fn]} {
+ incr i
+ set fn [lindex $var $i]
+ }
+ set movie(action) slice
+ Movie $fn
+ }
+ }
+
+ # try again
+ if {$fn == {}} {
+ set fn [lindex $var $i]
+ if {$fn == {}} {
+ return
+ }
+
+ if {[string is integer -strict $fn] ||
+ $fn == {none} || $fn == {jpeg} ||
+ $fn == {backbits} || $fn == {deflate}} {
+ set param $fn
+ set fn {}
+ incr i
+ }
+ }
+
+ # one last time
+ if {$fn == {}} {
+ set fn [lindex $var $i]
+ if {$fn == {}} {
+ return
+ }
+ }
+
+ global saveimage
+ if {$format == {}} {
+ set format [ExtToFormat $fn]
+ }
+
+ if {$param == {}} {
+ set param [string tolower [lindex $var [expr $i+1]]]
+ switch $format {
+ fits -
+ eps -
+ gif -
+ png {}
+ jpeg {
+ if {[string is integer -strict $param]} {
+ set saveimage(jpeg,quality) $param
+ incr i
+ }
+ }
+ tiff {
+ switch $param {
+ none -
+ jpeg -
+ packbits -
+ deflate {
+ set saveimage(tiff,compress) $param
+ incr i
+ }
+ }
+ }
+ }
+ }
+
+ global fitsfbox
+ global epsfbox
+ global giffbox
+ global jpegfbox
+ global tifffbox
+ global pngfbox
+ switch -- $format {
+ fits {FileLast fitsfbox $fn}
+ eps {FileLast epsfbox $fn}
+ gif {FileLast giffbox $fn}
+ jpeg {FileLast jpegfbox $fn}
+ tiff {FileLast tifffbox $fn}
+ png {FileLast pngfbox $fn}
+ }
+ SaveImage $fn $format
+}
+