Package org.jwildfire.io

Source Code of org.jwildfire.io.ImageReader

/*
  JWildfire - an image and animation processor written in Java
  Copyright (C) 1995-2011 Andreas Maschke

  This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
  General Public License as published by the Free Software Foundation; either version 2.1 of the
  License, or (at your option) any later version.
  This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License along with this software;
  if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jwildfire.io;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JLabel;

import org.jwildfire.image.SimpleHDRImage;
import org.jwildfire.image.SimpleImage;

public class ImageReader {
  private Component owner;

  public ImageReader(Component pOwner) {
    owner = pOwner;
  }

  public ImageReader() {
    owner = new JLabel();
  }

  public SimpleImage loadImage(String pFilename) throws Exception {
    File file = new File(pFilename);
    if (!file.exists())
      throw new FileNotFoundException(pFilename);
    Image fileImg = Toolkit.getDefaultToolkit().createImage(pFilename);
    MediaTracker tracker = new MediaTracker(owner);
    tracker.addImage(fileImg, 0);
    tracker.waitForID(0);
    int width = fileImg.getWidth(null);
    int height = fileImg.getHeight(null);
    BufferedImage bImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics g = bImg.getGraphics();
    g.drawImage(fileImg, 0, 0, null);
    fileImg = null;
    return new SimpleImage(bImg, width, height);
  }

  private String readNextLine(InputStream is) throws Exception {
    int b, idx = 0;
    byte line[] = new byte[256];
    while ((b = is.read()) != -1) {
      if (b == '\n') {
        break;
      }
      line[idx++] = (byte) b;
    }
    return idx > 0 ? new String(line, 0, idx) : "";
  }

  public SimpleHDRImage loadHDRImage(String pFilename) throws Exception {
    File file = new File(pFilename);
    if (!file.exists())
      throw new FileNotFoundException(pFilename);
    InputStream f = new BufferedInputStream(new FileInputStream(pFilename));
    // header
    String header = readNextLine(f);
    if (!"#?RGBE".equals(header)) {
      throw new IllegalArgumentException("Invalid header <" + header + ">");
    }
    // format
    String format = readNextLine(f);
    if (!"FORMAT=32-bit_rle_rgbe".equals(format)) {
      throw new IllegalArgumentException("Invalid format <" + format + ">");
    }
    // skip empty line
    readNextLine(f);
    // image size
    String dimension = readNextLine(f);
    Pattern pattern = Pattern.compile("\\-Y ([0-9]+) \\+X ([0-9]+)");
    Matcher matcher = pattern.matcher(dimension);
    if (!matcher.find()) {
      throw new IllegalArgumentException("Invalid dimension identifier<" + dimension + ">");
    }
    int width = Integer.parseInt(matcher.group(2));
    int height = Integer.parseInt(matcher.group(1));
    SimpleHDRImage res = new SimpleHDRImage(width, height);
    for (int i = 0; i < height; i++) {
      for (int j = 0; j < width; j++) {
        int r = f.read();
        int g = f.read();
        int b = f.read();
        int e = f.read();
        res.setRGBEValue(j, i, r, g, b, e);
      }
    }
    return res;
  }
}
TOP

Related Classes of org.jwildfire.io.ImageReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.