[Thread Prev][Thread Next][Index]

Re: [ferret_users] Palette



Hi Angela,

| > I would like to know if there is an easy way to invert the default
| > palette used in plots. [. . .]

As David described, you can invert any palette manually.
Just in case you or anybody else is interested, I'm attaching
a script to invert a palette.

>From a palette "myfavorite.spk", say, it generates
an inverse palette "inverse-myfavorite.spk".  It
handles only ordinary (percentage) palettes, that is, it
cannot handle by_value or by_level ones.   You need a
Ruby-language interpreter.

Regards,
Ryo
#!/usr/bin/ruby

#-- return the next non-comment, non-blank line.
def next_line(f)
  line = nil
  while (line = f.gets) && (line =~ /^\s*$/ or line =~ /^\s*!/)
  end
  return line
end

#-- Main loop over palette files ---
ARGV.each {|fname|
  inf = File.open(fname,"r")

  line = next_line(inf) #-- first non-comment line

  begin
    if ! line then raise "#{fname}: empty?  Skipping. . ." end
    case line
    when /\s*(rgb_mapping\s+by_value)/i, /\s*(rgb_mapping\s+by_level)/i
      raise "#{fname}: cannot invert #{$1} ."
    end
  rescue RuntimeError => err
    $stderr.puts err
    inf.close
    next
  end

  ofname = "inverse-" + File.basename(fname)
  ouf = File.open(ofname, "w")

  if line =~ /\s*(rgb_mapping)/i
    ouf.puts line
    line = next_line(inf)
  end

  buff = Array.new
  while line
    v, *rest = line.split
    buff << "#{100 - v.to_f} #{rest.join(' ')}"
    line = next_line(inf)
  end
  inf.close

  buff.reverse_each {|e| ouf.puts e }

  ouf.close
}

[Thread Prev][Thread Next][Index]

Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement