view gnv-artifacts/src/main/java/de/intevation/gnv/raster/RasterToPPM.java @ 1061:13bea93a070a

Do not call the endOfLife method of the current state before advancing to a next state, because this would remove elements from cache that have been inserted just before - it would be impossible to make use of a cache in that case. gnv-artifacts/trunk@1144 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 01 Jun 2010 16:59:15 +0000
parents d766fe2d917a
children f953c9a559d8
line wrap: on
line source
package de.intevation.gnv.raster;

import java.awt.Color;

import java.io.IOException;
import java.io.OutputStream;

/**
 * Little helper class to write a Raster into an output stream
 * as a Netpbm PPM file.
 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
 */
public class RasterToPPM
{
    private RasterToPPM() {
    }

    /**
     * Writes a Raster to a given stream as PPM.
     * @param raster The raster to be written.
     * @param palette The palette used to figure out the rgb values.
     * @param out  The stream to write into.
     * @throws IOException Thrown if some error occurred during writing
     * data to the output stream.
     */
    public static void writeToPPM(
        Raster       raster,
        Palette      palette,
        OutputStream out
    )
    throws IOException
    {
        int W = raster.getWidth();
        int H = raster.getHeight();
        out.write(("P6\n" + W + " " + H + "\n255\n").getBytes("US-ASCII"));
        double [] values = raster.getValues();
        int pos = 0;
        byte [] data = new byte[W*3];
        int black = Color.BLACK.getRGB();
        for (int i = 0; i < H; ++i) {
            for (int j = 0; j < data.length; ++pos) {
                Palette.Entry entry = palette.getEntry(values[pos]);
                int rgb = entry == null
                    ? black
                    : entry.getColor().getRGB();
                data[j++] = (byte)((rgb >> 16) & 0xff);
                data[j++] = (byte)((rgb >>  8) & 0xff);
                data[j++] = (byte)( rgb        & 0xff);
            }
            out.write(data);
        }
        out.flush();
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org