Package org.jwildfire.transform

Source Code of org.jwildfire.transform.FormulaColorTransformer

/*
  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.transform;

import org.jwildfire.base.Property;
import org.jwildfire.base.Tools;
import org.jwildfire.base.mathparser.JEPWrapper;
import org.jwildfire.image.Pixel;
import org.jwildfire.image.SimpleImage;
import org.jwildfire.image.WFImage;
import org.nfunk.jep.Node;

public class FormulaColorTransformer extends Mesh2DTransformer {

  @Property(description = "Formula of the red channel (Parameters: r, g, b, width, height, x, y)")
  private String formula1Red;

  @Property(description = "Formula of the green channel")
  private String formula2Green;

  @Property(description = "Formula of the blue channel")
  private String formula3Blue;

  @Property(description = "Use range 0..255 instead of 0..1.0 for colro values")
  private boolean useOriginalRGBValues;

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();

    JEPWrapper parser = new JEPWrapper();
    parser.addVariable("r", 0.0);
    parser.addVariable("g", 0.0);
    parser.addVariable("b", 0.0);
    parser.addVariable("x", 0.0);
    parser.addVariable("y", 0.0);
    parser.addVariable("width", (double) width);
    parser.addVariable("height", (double) height);
    Node redNode = parser.parse(formula1Red);
    Node greenNode = parser.parse(formula2Green);
    Node blueNode = parser.parse(formula3Blue);

    Pixel pixel = new Pixel();
    for (int i = 0; i < height; i++) {
      parser.setVarValue("y", i);
      for (int j = 0; j < width; j++) {
        parser.setVarValue("x", j);
        pixel.setARGBValue(srcImg.getARGBValue(j, i));
        if (useOriginalRGBValues) {
          parser.setVarValue("r", (double) pixel.r);
          parser.setVarValue("g", (double) pixel.g);
          parser.setVarValue("b", (double) pixel.b);
          pixel.r = Tools.roundColor((Double) parser.evaluate(redNode));
          pixel.g = Tools.roundColor((Double) parser.evaluate(greenNode));
          pixel.b = Tools.roundColor((Double) parser.evaluate(blueNode));
        }
        else {
          parser.setVarValue("r", (double) pixel.r / 255.0);
          parser.setVarValue("g", (double) pixel.g / 255.0);
          parser.setVarValue("b", (double) pixel.b / 255.0);
          pixel.r = Tools.roundColor((Double) parser.evaluate(redNode) * 255.0);
          pixel.g = Tools.roundColor((Double) parser.evaluate(greenNode) * 255.0);
          pixel.b = Tools.roundColor((Double) parser.evaluate(blueNode) * 255.0);
        }
        img.setRGB(j, i, pixel);
      }
    }
  }

  @Override
  public void initDefaultParams(WFImage pImg) {
    formula1Red = "0.13*exp(2*r)";
    formula2Green = "0.05*exp(3*g)";
    formula3Blue = "0.02*exp(4*b)";
    useOriginalRGBValues = false;
  }

  public String getFormula1Red() {
    return formula1Red;
  }

  public void setFormula1Red(String formula1Red) {
    this.formula1Red = formula1Red;
  }

  public String getFormula2Green() {
    return formula2Green;
  }

  public void setFormula2Green(String formula2Green) {
    this.formula2Green = formula2Green;
  }

  public String getFormula3Blue() {
    return formula3Blue;
  }

  public void setFormula3Blue(String formula3Blue) {
    this.formula3Blue = formula3Blue;
  }

  public boolean isUseOriginalRGBValues() {
    return useOriginalRGBValues;
  }

  public void setUseOriginalRGBValues(boolean useOriginalRGBValues) {
    this.useOriginalRGBValues = useOriginalRGBValues;
  }

}
TOP

Related Classes of org.jwildfire.transform.FormulaColorTransformer

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.