NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Don, you are very right. I missed the lower bound in the "color palette". I guess I was in a hurry code something using VisAD that was earlier done using GMT. There are reasons why this is being done and I know as much about VisAD as I know about GMT, which is next to nothing. So I really need help. My question is actually illustrated better following your suggested modification. All the contours are filled, but why is there a huge boundary surrounding the image. Is there any way the image could occupy the entire space. I was told by someone who used Vis5D a long time ago, that there was something like a "viewing distance", which if reduced to zero (or something similar) would cause the image to occupy the entire space available. I would like to know if there is something to that effect. I searched the API documentation, but couldn't find anything. Thank you for your help. sincerely, Ramesh P.S: Please find the code below. The missing brace happenned during a cut-and-paste of code from my terminal screen to the E-mail. Thank you. // =========================================================================== import visad.*; import visad.java2d.DisplayImplJ2D; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; public class Image2D { private RealType longitude, latitude; private RealType temperature; private RealTupleType domain_tuple; private FunctionType func_domain_range; private Set domain_set; private FlatField vals_ff; private DataReferenceImpl data_ref; private DisplayImpl display; private ScalarMap latMap, lonMap; private ScalarMap tempIsoMap, tempRGBMap; public Image2D(float[] data, int NCOLS, int NROWS) throws Exception { latitude = RealType.getRealType("latitude"); longitude = RealType.getRealType("longitude"); domain_tuple = new RealTupleType(latitude, longitude); temperature = RealType.getRealType("temperature"); func_domain_range = new FunctionType( domain_tuple, temperature); domain_set = new Linear2DSet(domain_tuple, 1,NROWS,NROWS, 1,NCOLS,NCOLS); float[][] set_samples = domain_set.getSamples(true); float[][] flat_samples = new float[1][NCOLS * NROWS]; for (int dataIndex=0; dataIndex < data.length; dataIndex++) { int dataCol = (dataIndex % NCOLS); int dataRow = (dataIndex / NCOLS); int sampleIndex = ((dataCol * NROWS) + dataRow); flat_samples[0][sampleIndex] = data[dataIndex]; } vals_ff = new FlatField( func_domain_range, domain_set); vals_ff.setSamples( flat_samples , false ); int NumXPixels = 450; int NumYPixels = 450; if (NROWS != NCOLS) { boolean Xmax = (NCOLS > NROWS); if (Xmax) { NumYPixels = (int) ((NumXPixels * NROWS) / NCOLS); } else { NumXPixels = (int) ((NumYPixels * NCOLS) / NROWS); } } display = new DisplayImplJ2D("display1", NumXPixels, NumYPixels); latMap = new ScalarMap( latitude, Display.YAxis ); lonMap = new ScalarMap( longitude, Display.XAxis ); tempIsoMap = new ScalarMap( temperature, Display.IsoContour ); tempRGBMap = new ScalarMap( temperature, Display.RGB ); display.addMap( latMap ); display.addMap( lonMap ); display.addMap( tempIsoMap ); display.addMap( tempRGBMap ); ContourControl isoControl = (ContourControl) tempIsoMap.getControl(); float[] levels = {200.0f, 295.0f, 305.0f, 500.0f}; isoControl.setLevels(levels, 200.0f, false); isoControl.setContourFill(true); data_ref = new DataReferenceImpl("data_ref"); data_ref.setData( vals_ff ); display.addReference( data_ref ); double ar = ((double) NumYPixels) / ((double) NumXPixels); ProjectionControl pc = display.getProjectionControl(); pc.setAspect(new double[] {1.0, ar}); } public void writeToFile() throws IOException { BufferedImage image = display.getImage(true); File file = new File("iso_contour_image.png"); ImageIO.write(image, "PNG", file); } public static void main(String[] args) { try { float[] data = { 318.0f, 312.0f, 297.0f, 299.0f, 302.0f, 315.0f, 311.0f, 296.0f, 297.0f, 299.0f, 306.0f, 298.0f, 297.0f, 294.0f, 294.0f, 297.0f, 296.0f, 294.0f, 291.0f, 294.0f, 297.0f, 291.0f, 293.0f, 287.0f, 285.0f, 297.0f, 296.0f, 296.0f, 291.0f, 291.0f }; Image2D imgObj = new Image2D(data, 5, 6); imgObj.writeToFile(); System.out.println("Image written to file"); } catch (Exception e) { e.printStackTrace(); } } } // ===========================================================================
visad
archives: