Example usage for javax.imageio ImageIO getImageReaders

List of usage examples for javax.imageio ImageIO getImageReaders

Introduction

In this page you can find the example usage for javax.imageio ImageIO getImageReaders.

Prototype

public static Iterator<ImageReader> getImageReaders(Object input) 

Source Link

Document

Returns an Iterator containing all currently registered ImageReader s that claim to be able to decode the supplied Object , typically an ImageInputStream .

Usage

From source file:org.medici.bia.controller.manuscriptviewer.IIPImageServerController.java

/**
 * This method return image and tile information.
 * /*from w  w  w  .  j a v  a2s. c  o m*/
 * EXAMPLE OUTPUT : IIP:1.0 Max-size:1832 2448 Tile-size:128 128
 * Resolution-number:6
 * 
 * @param httpServletRequest
 * @param response
 * 
 */
private void generateInformationsTiledImage(HttpServletRequest httpServletRequest,
        HttpServletResponse httpServletResponse) {
    File imageFile = new File(ApplicationPropertyManager.getApplicationProperty("iipimage.image.path")
            + httpServletRequest.getParameter("FIF"));
    ImageInputStream imageInputStream = null;
    Integer imageWidth = new Integer(0);
    Integer imageHeight = new Integer(0);
    Integer tileWidth = new Integer(0);
    Integer tileHeight = new Integer(0);
    Integer resolutionNumber = new Integer(0);

    try {
        if (imageFile.canRead()) {
            // Reading complete tiff information
            imageInputStream = ImageIO.createImageInputStream(imageFile);
        } else {
            logger.error("File " + imageFile.toString() + " is not present on filesystem. ");
            imageFile = new File(ApplicationPropertyManager.getApplicationProperty("iipimage.image.path")
                    + ApplicationPropertyManager.getApplicationProperty("iipimage.image.notavailable"));
            if (imageFile.canRead()) {
                // Reading complete tiff information
                imageInputStream = ImageIO.createImageInputStream(imageFile);
            } else {
                logger.error("File " + imageFile.toString() + " is not present on filesystem. ");
            }
        }
        if (imageInputStream != null) {
            Iterator<ImageReader> readers = ImageIO.getImageReaders(imageInputStream);
            if (readers.hasNext()) {
                ImageReader reader = readers.next();
                reader.setInput(imageInputStream, false, true);
                tileWidth = reader.getTileWidth(0);
                tileHeight = reader.getTileHeight(0);
                imageWidth = reader.getWidth(0);
                imageHeight = reader.getHeight(0);
                // Last level is not readable, I don't know why but i remove
                // this
                resolutionNumber = reader.getNumImages(true);
            }
        }
    } catch (IOException ioException) {
        logger.debug(ioException);
    } finally {
        try {
            if (imageInputStream != null) {
                imageInputStream.close();
            }
        } catch (IOException ioException) {
        }

        try {
            httpServletResponse.setContentType("text/plain");
            ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
            servletOutputStream.println("IIP:1.0");
            servletOutputStream.println("Max-size:" + imageWidth + " " + imageHeight);
            servletOutputStream.println("Tile-size:" + tileWidth + " " + tileHeight);
            servletOutputStream.println("Resolution-number:" + resolutionNumber);
            servletOutputStream.println("");
            httpServletResponse.getOutputStream().flush();
        } catch (IOException ioException) {
            logger.error(ioException);
        }
    }
}

From source file:org.jamwiki.parser.image.ImageProcessor.java

/**
 * Retrieve image dimensions.  This method simply reads headers so it should perform
 * relatively fast.//w  w  w  . j a v  a 2 s.  c o m
 */
protected static Dimension retrieveImageDimensions(File imageFile) throws IOException {
    long start = System.currentTimeMillis();
    if (!imageFile.exists()) {
        logger.info("No file found while determining image dimensions: " + imageFile.getAbsolutePath());
        return null;
    }
    ImageInputStream iis = null;
    Dimension dimensions = null;
    ImageReader reader = null;
    // use a FileInputStream and make sure it gets closed to prevent unclosed file
    // errors on some operating systems
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(imageFile);
        iis = ImageIO.createImageInputStream(fis);
        Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
        if (readers.hasNext()) {
            reader = readers.next();
            reader.setInput(iis, true);
            dimensions = new Dimension(reader.getWidth(0), reader.getHeight(0));
        }
    } finally {
        if (reader != null) {
            reader.dispose();
        }
        if (iis != null) {
            try {
                iis.close();
            } catch (IOException e) {
                // ignore
            }
        }
        IOUtils.closeQuietly(fis);
    }
    if (logger.isDebugEnabled()) {
        long execution = (System.currentTimeMillis() - start);
        logger.debug("Image dimension lookup for " + imageFile.getAbsolutePath() + " took "
                + (execution / 1000.000) + " s");
    }
    return dimensions;
}

From source file:net.algart.simagis.imageio.IIOMetadataToJsonConverter.java

private JSONObject extendedReadExif(InputStream inputStream) throws IOException, JSONException {
    assert inputStream != null;
    ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
    Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
    try {/*from  w  ww.jav  a2  s  .c  o  m*/
        if (!readers.hasNext()) {
            return null; // no readers to read such "Exif"
        }
        ImageReader reader = readers.next();
        try {
            reader.setInput(iis);
            return toJson(reader.getImageMetadata(0));
        } finally {
            reader.dispose();
        }
    } finally {
        iis.close();
    }
}

From source file:net.sf.webphotos.tools.Thumbnail.java

private static String getFormatName(Object o) {
    try {/*from w ww .  j  a  va 2  s .co  m*/
        // Create an image input stream on the image
        ImageInputStream iis = ImageIO.createImageInputStream(o);

        // Find all image readers that recognize the image format
        Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
        if (!iter.hasNext()) {
            // No readers found
            return null;
        }

        // Use the first reader
        ImageReader reader = iter.next();

        // Close stream
        iis.close();

        // Return the format name
        return reader.getFormatName();
    } catch (Exception e) {
        // The image could not be read
        return null;
    }
}

From source file:net.filterlogic.util.imaging.ToTIFF.java

/**
 * //from  w w  w .  j  a v a 2 s  .c  o m
 * @param fileName
 */
public void test6(String fileName) {
    try {
        File f = new File(fileName);

        ImageInputStream imageInputStream = ImageIO.createImageInputStream(f);
        java.util.Iterator readers = ImageIO.getImageReaders(imageInputStream);
        ImageReader reader1 = (ImageReader) readers.next();
        ImageInputStream iis = ImageIO.createImageInputStream(new FileInputStream(f));
        reader1.setInput(iis);

        int number = reader1.getNumImages(true);
        Iterator writers = ImageIO.getImageWritersByFormatName("tiff");
        ImageWriter writer = (ImageWriter) writers.next();

        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        ImageOutputStream ios = null;
        BufferedImage img = null;

        for (int i = 0; i < number; i++) {
            img = reader1.read(i);
            ios = ImageIO.createImageOutputStream(byteOut);
            writer.setOutput(ios);
            writer.write(img);
            ios.flush();
            img.flush();
            byteOut.flush();
        }

    } catch (Exception e) {
        System.out.println(e.toString());
    }

}

From source file:com.lm.lic.manager.util.GenUtil.java

public static String senseImageFormat(byte[] icon) throws Exception {
    try {//from  w ww.  j  a v  a  2  s  . c  o  m
        ByteArrayInputStream bais = new ByteArrayInputStream(icon);
        // Create an image input stream on the image
        ImageInputStream iis = ImageIO.createImageInputStream(bais);
        ImageIO.getReaderFormatNames();

        // Find all image readers that recognize the image format
        Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
        if (!iter.hasNext()) {
            return null;
        }
        ImageReader reader = iter.next();
        iis.close();
        return reader.getFormatName();
    } catch (IOException e) {
    }

    return null;
}

From source file:it.tidalwave.imageio.test.ImageReaderTestSupport.java

/*******************************************************************************************************************
 * /*from w  w w  . ja  v  a2 s .com*/
 * 
 ******************************************************************************************************************/
@Nonnull
protected ImageReader getImageReader(final @Nonnull String path, final @Nonnull RAWImageReadParam readParam)
        throws IOException {
    logger.info("************* TESTING FILE: %s - %s", path, readParam);

    final File file = getTestFile(path);
    final ImageReader ir = ImageIO.getImageReaders(file).next();
    assertNotNull(ir);

    if (readParam != null) {
        ((RAWImageReader) ir).setDefaultReadParam(readParam);
    }

    ir.setInput(ImageIO.createImageInputStream(file));
    return ir;
}

From source file:org.medici.bia.controller.manuscriptviewer.IIPImageServerController.java

/**
 * //from ww  w . ja  va 2s .c o  m
 * @param fileName
 * @param pageImage
 * @param tileNumber
 * @param xCoordinate
 * @param yCoordinate
 * @param httpServletResponse
 */
@SuppressWarnings("unused")
private void generateTiledImage(String fileName, Integer pageImage, Integer tileNumber, Integer xCoordinate,
        Integer yCoordinate, HttpServletResponse httpServletResponse) {
    File imageFile = new File(
            ApplicationPropertyManager.getApplicationProperty("iipimage.image.path") + fileName);
    Integer imageWidth = new Integer(0);
    Integer imageHeight = new Integer(0);
    Integer tileWidth = new Integer(0);
    Integer tileHeight = new Integer(0);
    Integer resolutionNumber = new Integer(0);
    Integer convertedPageImage = new Integer(0);

    ImageInputStream imageInputStream = null;
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    InputStream inputStream = null;

    try {
        if (imageFile.canRead()) {
            // Reading complete tiff information
            imageInputStream = ImageIO.createImageInputStream(imageFile);
        } else {
            logger.error("File " + imageFile.toString() + " is not present on filesystem. ");
            imageFile = new File(ApplicationPropertyManager.getApplicationProperty("iipimage.image.path")
                    + ApplicationPropertyManager.getApplicationProperty("iipimage.image.notavailable"));
            if (imageFile.canRead()) {
                // Reading complete tiff information
                imageInputStream = ImageIO.createImageInputStream(imageFile);
            } else {
                logger.error("File " + imageFile.toString() + " is not present on filesystem. ");
            }
        }

        if (imageInputStream != null) {
            Iterator<ImageReader> readers = ImageIO.getImageReaders(imageInputStream);
            if (readers.hasNext()) {
                ImageReader reader = readers.next();
                reader.setInput(imageInputStream, false, true);
                tileWidth = reader.getTileWidth(0);
                tileHeight = reader.getTileHeight(0);
                imageWidth = reader.getWidth(0);
                imageHeight = reader.getHeight(0);
                // Last level is not readable, I don't know why but i remove
                // this
                resolutionNumber = reader.getNumImages(true) - 1;
                // Calculate of image position, final -1 is beacause index
                // start from 0 and not from 1
                convertedPageImage = resolutionNumber - pageImage;
                // We read our specific tile
                ImageReadParam param = reader.getDefaultReadParam();
                param.setSourceRegion(
                        new Rectangle(new Point(xCoordinate * tileWidth, yCoordinate * tileHeight),
                                new Dimension(tileWidth, tileHeight)));
                BufferedImage subImage = reader.read(convertedPageImage, param);
                // preparing image for output
                ImageIO.write(subImage, "jpeg", byteArrayOutputStream);
                inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                // writing image to output
                httpServletResponse.setContentType("image/jpeg");
                IOUtils.copy(inputStream, httpServletResponse.getOutputStream());

                // Flushing request
                httpServletResponse.getOutputStream().flush();
            }
        } else {
            logger.error("File " + imageFile.toString() + " is not present on filesystem.");
        }
    } catch (IOException ioException) {
        logger.error(ioException);
    } finally {
        try {
            if (inputStream != null) {
                inputStream.close();
            }
        } catch (IOException ioException) {
        }
        try {
            if (byteArrayOutputStream != null) {
                byteArrayOutputStream.close();
            }
        } catch (IOException ioException) {
        }
        try {
            if (imageInputStream != null) {
                imageInputStream.close();
            }
        } catch (IOException ioException) {
        }
    }
}

From source file:org.hippoecm.frontend.plugins.gallery.imageutil.ImageUtils.java

/**
 * Converts image raster data to a JPEG with RGB color space. Only images with color space CMYK and YCCK are
 * converted, other images are left untouched.
 *
 * Rationale: Java's ImageIO can't process 4-component images and Java2D can't apply AffineTransformOp either,
 * so we have to convert raster data to a JPG with RGB color space.
 *
 * The technique used in this method is due to Mark Stephens, and free for any use. See
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4799903 or
 * http://www.mail-archive.com/java2d-interest@capra.eng.sun.com/msg03247.html
 *
 * @param is the image data/*from  www  . ja  v  a2 s.c om*/
 * @param colorModel the color model of the image
 * @return the RGB version of the supplied image
 */
public static InputStream convertToRGB(InputStream is, ColorModel colorModel)
        throws IOException, UnsupportedImageException {
    if (colorModel != ColorModel.CMYK && colorModel != ColorModel.YCCK) {
        return is;
    }

    // Get an ImageReader.
    ImageInputStream input = ImageIO.createImageInputStream(is);

    try {
        Iterator<ImageReader> readers = ImageIO.getImageReaders(input);
        if (readers == null || !readers.hasNext()) {
            throw new UnsupportedImageException("No ImageReaders found");
        }

        ImageReader reader = readers.next();
        reader.setInput(input);
        Raster raster = reader.readRaster(0, reader.getDefaultReadParam());

        int w = raster.getWidth();
        int h = raster.getHeight();
        byte[] rgb = new byte[w * h * 3];

        switch (colorModel) {
        case YCCK: {
            float[] Y = raster.getSamples(0, 0, w, h, 0, (float[]) null);
            float[] Cb = raster.getSamples(0, 0, w, h, 1, (float[]) null);
            float[] Cr = raster.getSamples(0, 0, w, h, 2, (float[]) null);
            float[] K = raster.getSamples(0, 0, w, h, 3, (float[]) null);

            for (int i = 0, imax = Y.length, base = 0; i < imax; i++, base += 3) {
                float k = 220 - K[i], y = 255 - Y[i], cb = 255 - Cb[i], cr = 255 - Cr[i];

                double val = y + 1.402 * (cr - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);

                val = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base + 1] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);

                val = y + 1.772 * (cb - 128) - k;
                val = (val - 128) * .65f + 128;
                rgb[base + 2] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);
            }
            break;
        }
        case CMYK: {
            int[] C = raster.getSamples(0, 0, w, h, 0, (int[]) null);
            int[] M = raster.getSamples(0, 0, w, h, 1, (int[]) null);
            int[] Y = raster.getSamples(0, 0, w, h, 2, (int[]) null);
            int[] K = raster.getSamples(0, 0, w, h, 3, (int[]) null);

            for (int i = 0, imax = C.length, base = 0; i < imax; i++, base += 3) {
                int c = 255 - C[i];
                int m = 255 - M[i];
                int y = 255 - Y[i];
                int k = 255 - K[i];
                float kk = k / 255f;

                rgb[base] = (byte) (255 - Math.min(255f, c * kk + k));
                rgb[base + 1] = (byte) (255 - Math.min(255f, m * kk + k));
                rgb[base + 2] = (byte) (255 - Math.min(255f, y * kk + k));
            }
            break;
        }
        }

        // from other image types we know InterleavedRaster's can be
        // manipulated by AffineTransformOp, so create one of those.
        raster = Raster.createInterleavedRaster(new DataBufferByte(rgb, rgb.length), w, h, w * 3, 3,
                new int[] { 0, 1, 2 }, null);

        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
        java.awt.image.ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE,
                DataBuffer.TYPE_BYTE);
        BufferedImage convertedImage = new BufferedImage(cm, (WritableRaster) raster, true, null);

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(convertedImage, "jpg", os);

        return new ByteArrayInputStream(os.toByteArray());
    } finally {
        IOUtils.closeQuietly(is);
        if (input != null) {
            input.close();
        }
    }
}

From source file:org.n52.v3d.terrainserver.profileservice.ProfileServlet.java

/**
 * bearbeitet HTTP-Get-Anfragen an das Servlet.<p>
 * @param pRequest HTTP-Anfrage-Objekt/*from   w  w  w.jav a  2 s .c o  m*/
 * @param pResponse HTTP-Antwort-Objekt
 * @throws ServletException
 * @throws IOException
 */
public void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse)
        throws ServletException, IOException {
    T3dTimeList lTimeProt = new T3dTimeList(); // zur Protokollierung der Rechenzeiten
    lTimeProt.addTimeStamp("init");

    // Eindeutigen Temporrdatei-Rumpf fr aktuelle Anfrage festlegen:
    String lTmpName = "~" + (mCounter++) + "_" + new java.util.Date().getTime();

    try {
        // Request-Parameter holen:
        HttpRequestParams lReqParams = this.fetchRequestParameters(pRequest);
        String lRequest = (String) lReqParams.getParameterValue("REQUEST");
        VgLineString lDefLine = (VgLineString) lReqParams.getParameterValue("DEFLINE");
        String lSRS = (String) lReqParams.getParameterValue("SRS");
        String lFormat = (String) lReqParams.getParameterValue("FORMAT");
        int lWidth = ((Integer) lReqParams.getParameterValue("WIDTH")).intValue();
        int lHeight = ((Integer) lReqParams.getParameterValue("HEIGHT")).intValue();
        double lExaggeration = ((Double) lReqParams.getParameterValue("EXAGGERATION")).doubleValue(); // todo sinnvoll?
        //int lVisAdds = ((Integer) lReqParams.getParameterValue("VISADDS")).intValue();
        VgPoint lPoint = (VgPoint) lReqParams.getParameterValue("POINT");

        if (lRequest.equalsIgnoreCase("GetCapabilities")) {
            HttpStandardResponse response = new HttpStandardResponse();
            response.sendXMLFile(mCapabilitiesFile, pResponse); // todo: serverrun/Capabilities.xml einrichten und web.xml-Additions
            this.logGetCapabilitiesInfo(lTmpName, pRequest);
            return;
        }

        if (!(lRequest.equalsIgnoreCase("GetGraph") || lRequest.equalsIgnoreCase("GetElevation")))
            throw new T3dException("Illegal request type " + lRequest + "...");

        // Request-Parameter aufbereiten und Wertebereiche prfen:
        ParameterPreparer pp = new ParameterPreparer();
        lSRS = pp.prepareSRS(lSRS);
        lFormat = pp.prepareFORMAT(lFormat, lRequest);
        if (lRequest.equalsIgnoreCase("GetGraph")) {
            lWidth = pp.prepareWIDTH(lWidth);
            lHeight = pp.prepareHEIGHT(lHeight);
        }
        if (lRequest.equalsIgnoreCase("GetElevation")) {
            String str = "" + lPoint.getX() + "," + lPoint.getY()
                    + ",0.0," /* erster Eckpunkt = Interpolationspunkt */
                    + lPoint.getX() + "," + lPoint.getY() + ",0.0"; /* zweiter Eckpunkt als Hilfspunkt */
            lDefLine = new GmLineString(str);
            if (lPoint instanceof VgPoint) {
                lPoint.setSRS(lSRS);
            }
        }

        sLogger.debug("ProfileServlet (" + lTmpName + "): Received " + lRequest + " request.");
        lTimeProt.setFinished("init");

        // Hhenmodell berechnen (Gridding):
        lTimeProt.addTimeStamp("dem_access");
        final boolean lDebug = false; // todo: auf 'false' setzen
        if (lDebug)
            System.out.println("lDefLine = " + lDefLine);
        VgEnvelope lBBox = lDefLine.envelope();
        lBBox.setSRS(lSRS);
        lBBox = this.assureBBoxExtent(lBBox);
        if (lDebug)
            System.out.println("lBBox = " + lBBox);
        GmSimpleElevationGrid lTerrain = this.setUpTerrain(lBBox);
        if (lDebug) {
            System.out.println("lTerrain = " + lTerrain);
            System.out.println("lTerrain.envelope = " + lTerrain.getGeometry().envelope());
        }
        lTimeProt.setFinished("dem_access");

        // Profil generieren:
        lTimeProt.addTimeStamp("profile_generation");
        FltElevationGrid2Profile lProc = new FltElevationGrid2Profile();
        VgProfile lProfile = lProc.transform(lTerrain, lDefLine);
        lTimeProt.setFinished("profile_generation");

        if (lRequest.equalsIgnoreCase("GetGraph")) {
            // Ergebnisbild generieren:
            lTimeProt.addTimeStamp("rendering");
            IoProfileWriter lWriter = new IoProfileWriter("SVG"); // stets SVG generieren
            String lResFile = mWorkingDirectory + "/" + lTmpName + ".svg";
            lWriter.writeToFile(lProfile, lResFile);
            boolean lSendAsPngImage = false;
            String lResFilePng = "";
            if (lFormat.equalsIgnoreCase("image/png"))
                lSendAsPngImage = true;
            if (lSendAsPngImage) {
                PNGTranscoder lTranscoder = new PNGTranscoder();
                String lSvgURI = new File(lResFile).toURL().toString();
                TranscoderInput lInput = new TranscoderInput(lSvgURI);
                lResFilePng = mWorkingDirectory + "/" + lTmpName + ".png";
                OutputStream lOStream = new FileOutputStream(lResFilePng);
                TranscoderOutput lOutput = new TranscoderOutput(lOStream);
                lTranscoder.transcode(lInput, lOutput);
                lOStream.flush();
                lOStream.close();
            }
            lTimeProt.setFinished("rendering");

            // Ergebnisbild als Antwort senden:
            lTimeProt.addTimeStamp("send_response");
            if (!lSendAsPngImage) {
                pResponse.setContentType("image/svg+xml"); // MIME-Typ fr Antwort setzen
                BufferedReader lDatRead;
                try {
                    lDatRead = new BufferedReader(new FileReader(lResFile));
                } catch (FileNotFoundException e) {
                    throw new T3dException("Internal error while reading \"" + lResFile + "\".");
                }
                PrintWriter out = pResponse.getWriter(); // PrintWriter auf die Antwort aufsetzen
                String line = lDatRead.readLine();
                while (line != null) { // generierte Temporrdatei zeilenweise senden
                    out.println(line);
                    line = lDatRead.readLine();
                }
                lDatRead.close();
                out.flush();
                out.close();
            } else {
                // Bild senden (vgl. Code aus WebTerrainServlet:
                try {
                    File f = new File(lResFilePng);
                    ImageInputStream is = ImageIO.createImageInputStream(f);
                    Iterator iter = ImageIO.getImageReaders(is); // liefert PNG-ImageReader
                    ImageReader reader = (ImageReader) iter.next();
                    reader.setInput(is, true); // seek forward only?
                    BufferedImage lImage = reader.read(0);

                    OutputStream out = pResponse.getOutputStream();
                    ImageIO.setUseCache(false); // wichtig!
                    pResponse.setContentType(lFormat); // MIME-Typ fr Antwort setzen
                    String resExt = MimeTypeHelper.getFileExtension(lFormat);
                    try {
                        ImageIO.write(lImage, resExt, out); // resExt ist informaler Formatname...
                    } catch (Exception e) {
                        throw new T3dException("Did not finish PNG image send process. " + e.getMessage(), 103); // todo fehler-nr. prfen und in doku
                    }
                    is.close();
                    out.close();
                } catch (IOException e) {
                    throw new T3dException(
                            "An I/O exception occured. The servlet could not send an image reponse.", 106); // todo fehler-nr. prfen und in doku
                }
            }
            File fSvg = new File(lResFile);
            fSvg.delete();
            if (lSendAsPngImage) {
                File fPng = new File(lResFilePng);
                fPng.delete();
            }
            lTimeProt.setFinished("send_response");
        } else {
            if (lRequest.equalsIgnoreCase("GetElevation")) {
                lTimeProt.addTimeStamp("send_response");
                double x, y, z;
                try {
                    x = ((VgLineString) (lProfile.getGeometry())).getVertex(0).getX(); // = lPoint.getX()
                    y = ((VgLineString) (lProfile.getGeometry())).getVertex(0).getY(); // = lPoint.getY()
                    z = (lProfile.getTZPair(0))[1];
                } catch (Throwable e) {
                    throw new T3dException("No elevation information available.");
                }

                // Antwort senden:
                short lCase = 0;
                if (lFormat.equalsIgnoreCase("text/plain"))
                    lCase = 1;
                if (lFormat.equalsIgnoreCase("text/xml"))
                    lCase = 2;
                if (lFormat.equalsIgnoreCase("text/html"))
                    lCase = 3;
                if (lFormat.equalsIgnoreCase("text/comma-separated-values"))
                    lCase = 4;
                if (lCase <= 0)
                    throw new T3dException("Internal servlet error."); // Kann nicht auftreten
                pResponse.setContentType(lFormat); // MIME-Typ fr Antwort setzen
                PrintWriter out = pResponse.getWriter(); // PrintWriter auf die Antwort aufsetzen
                switch (lCase) {
                case 1:
                    out.println("Position:");
                    out.println("SRS: " + lPoint.getSRS()); // = lSRS
                    out.println("X = " + x);
                    out.println("Y = " + y);
                    out.println("");
                    out.println("Elevation = " + z);
                    break;
                case 2:
                    out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\" ?>");
                    out.println("<ServiceResponse>");
                    out.println("  <Position>");
                    out.println("    <SRS>" + lPoint.getSRS() + "</SRS>"); // = lSRS
                    out.println("    <X>" + x + "</X>");
                    out.println("    <Y>" + y + "</Y>");
                    out.println("  </Position>");
                    out.println("  <Elevation>" + z + "</Elevation>");
                    out.println("</ServiceResponse>");
                    break;
                case 3:
                    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
                    out.println("<html>");
                    out.println("<head>");
                    out.println("<title>52N terrainServer elevation information</title>");
                    out.println("<font face=\"Verdana, Arial, Helvetica\" size=1>");
                    out.println("<meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">");
                    out.println("<body text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0>");
                    out.println("<table border=\"1\">");
                    out.println("<tr><td><b>Position:</b></td><td><br></td></tr>");
                    out.println("<tr><td>SRS:</td><td>" + lPoint.getSRS() + "</td></tr>"); // lPoint.getSRS() = lSRS
                    out.println("<tr><td>X:</td><td>" + x + "<td></tr>");
                    out.println("<tr><td>Y:</td><td>" + y + "<td></tr>");
                    out.println("<tr><td><b>Elevation:</b></td><td>" + z + "<td></tr>");
                    out.println("</table>");
                    out.println("</html>");
                    break;
                case 4:
                    out.println(z);
                    break;
                }
                out.flush();
                out.close();
                lTimeProt.setFinished("send_response");
            }
        }

        //String lOutputFormatInfo = lFormat + " (" + lWidth + "x" + lHeight + ")";
        if (lRequest.equalsIgnoreCase("GetGraph"))
            this.logGetGraphInfo(lTmpName, lTerrain, lDefLine, lTimeProt, pRequest,
                    lFormat /*lOutputFormatInfo*/);
        else {
            if (lRequest.equalsIgnoreCase("GetElevation"))
                this.logGetElevationInfo(lTmpName, lTerrain, lPoint, lTimeProt, pRequest, lFormat);
        }

        sLogger.debug("ProfileServlet (" + lTmpName + "): Duly finished execution.");
    } catch (Throwable e) {
        sLogger.debug("ProfileServlet (" + lTmpName + "): Aborting execution. Error: " + e.getMessage());

        HttpStandardResponse response = new HttpStandardResponse();
        try {
            response.sendException(e.getMessage(), pResponse);
        } catch (Throwable e2) {
            try {
                response.sendException(e.getMessage(), pResponse);
            } catch (Throwable e3) {
                System.out.println("ProfileServlet: FATAL ERROR - " + e3.getMessage());
            }
        }
        try {
            this.logErrorInfo(lTmpName, lTimeProt, pRequest, e);
        } catch (Throwable e2) {
            System.out.println("ProfileServlet: FATAL ERROR - " + e2.getMessage());
        }
    }
}