Package org.jwildfire.base

Source Code of org.jwildfire.base.ConvolveTools

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

import org.jwildfire.image.Pixel;
import org.jwildfire.image.SimpleImage;

/**
* Some utility routines related to applying convolution matrices
*
  @author Andreas Maschke
*/
public class ConvolveTools {

  public static void convolve_3x3_grey(SimpleImage pSrcImg, SimpleImage pImg, int[][] pMatrix,
      int pCVAdd) {
    int width = pSrcImg.getImageWidth();
    int height = pSrcImg.getImageHeight();
    int sizeM = pMatrix.length;
    int sizeMHalve = sizeM / 2;
    int sumM = 0;
    for (int i = 0; i < sizeM; i++) {
      for (int j = 0; j < sizeM; j++) {
        sumM += pMatrix[i][j];
      }
    }
    if (sumM == 0)
      sumM = 1;
    for (int i = 0; i < height; i++) {
      for (int j = 0; j < width; j++) {
        int intSum = 0;
        for (int k = 0; k < sizeM; k++) {
          int y = i - sizeMHalve + k;
          for (int l = 0; l < sizeM; l++) {
            int x = j - sizeMHalve + l;
            intSum += pSrcImg.getRValueIgnoreBounds(x, y) * pMatrix[k][l];
          }
        }
        intSum = (intSum / sumM) + pCVAdd;
        if (intSum < 0)
          intSum = 0;
        else if (intSum > 255)
          intSum = 255;
        pImg.setRGB(j, i, intSum, intSum, intSum);
      }
    }
  }

  public static void convolve_3x3_color(SimpleImage pSrcImg, SimpleImage pImg, int[][] pMatrix,
      int pCVAdd) {
    int width = pSrcImg.getImageWidth();
    int height = pSrcImg.getImageHeight();
    int sizeM = pMatrix.length;
    int sizeMHalve = sizeM / 2;
    int sumM = 0;
    for (int i = 0; i < sizeM; i++) {
      for (int j = 0; j < sizeM; j++) {
        sumM += pMatrix[i][j];
      }
    }
    if (sumM == 0)
      sumM = 1;
    Pixel pixel = new Pixel();
    for (int i = 0; i < height; i++) {
      for (int j = 0; j < width; j++) {
        int intSumR = 0;
        int intSumG = 0;
        int intSumB = 0;
        for (int k = 0; k < sizeM; k++) {
          int y = i - sizeMHalve + k;
          for (int l = 0; l < sizeM; l++) {
            int x = j - sizeMHalve + l;
            pixel.setARGBValue(pSrcImg.getARGBValueIgnoreBounds(x, y));
            intSumR += pixel.r * pMatrix[k][l];
            intSumG += pixel.g * pMatrix[k][l];
            intSumB += pixel.b * pMatrix[k][l];
          }
        }
        intSumR = Tools.limitColor((intSumR / sumM) + pCVAdd);
        intSumG = Tools.limitColor((intSumG / sumM) + pCVAdd);
        intSumB = Tools.limitColor((intSumB / sumM) + pCVAdd);
        pImg.setRGB(j, i, intSumR, intSumG, intSumB);
      }
    }
  }
}
TOP

Related Classes of org.jwildfire.base.ConvolveTools

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.