Package org.jwildfire.image

Examples of org.jwildfire.image.SimpleImage


            fileExt = filename.substring(p + 1, filename.length());
          }
        }
        if ("hdr".equalsIgnoreCase(fileExt)) {
          SimpleHDRImage hdrImg = new ImageReader(this).loadHDRImage(currFile.getAbsolutePath());
          SimpleImage img = new FastHDRTonemapper().renderImage(hdrImg);
          ScaleTransformer scaleT = new ScaleTransformer();
          scaleT.setScaleWidth(THUMBNAIL_WIDTH);
          scaleT.setAspect(ScaleAspect.KEEP_WIDTH);
          scaleT.setUnit(Unit.PIXELS);
          scaleT.transformImage(img);
          currThumbnail = new ImageIcon(img.getBufferedImg(), currFile.getName());
        }
        else {
          ImageIcon tmpIcon = new ImageIcon(currFile.getPath());
          if (tmpIcon != null) {
            if (tmpIcon.getIconWidth() > THUMBNAIL_WIDTH) {
View Full Code Here


  @Property(description = "Shift axis", editorClass = AxisEditor.class)
  private Axis axis = Axis.X;

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    int dx = this.shiftAmount;
    Tools.srand123(this.seed);
    double rprob = (double) ((double) 1.0 - (double) (this.probability) / (double) 100.0);
    double fdx = (double) this.jitterAmount;

    if (axis == Axis.Y) {
      srcImg = srcImg.clone();
      TurnTransformer tT = new TurnTransformer();
      tT.setAngle(TurnTransformer.Angle._90);
      tT.setDirection(TurnTransformer.Direction.RIGHT);
      tT.transformImage(srcImg);
      tT.setAngle(TurnTransformer.Angle._90);
      tT.setDirection(TurnTransformer.Direction.RIGHT);
      tT.transformImage(img);
    }

    shiftLines: {
      int width = pImg.getImageWidth();
      int height = pImg.getImageHeight();
      int line[] = new int[width];
      if (this.jitter == Jitter.OFF) {
        if (dx == 0) {
          break shiftLines;
        }
        int adx2 = dx;
        if (adx2 < 0)
          adx2 = 0 - adx2;
        if (adx2 >= width) {
          img.fillBackground(0, 0, 0);
          break shiftLines;
        }
        int dx2 = dx;
        int sx = width - adx2;

        for (int i = 0; i < height; i++) {
          clearLine(line);
          if (dx2 > 0) {
            copyLine(line, adx2, srcImg.getLine(i), 0, sx);
          }
          else {
            copyLine(line, 0, srcImg.getLine(i), adx2, sx);
          }
          img.setLine(i, line);
          dx2 = 0 - dx2;
        }
      }
      else {
        for (int i = 0; i < height; i++) {
          int dx3;
          if ((probability >= 100) || (Tools.drand() >= rprob)) {
            dx3 = (int) (Tools.drand() * fdx + 0.5);
            if (this.jitter == Jitter.POSITIVE) {
              if (dx3 < 0)
                dx3 = 0 - dx3;
            }
            else if (this.jitter == Jitter.NEGATIVE) {
              if (dx3 > 0)
                dx3 = 0 - dx3;
            }
            else {
              if (Tools.drand() > 0.5)
                dx3 = 0 - dx3;
            }
          }
          else
            dx3 = 0;
          dx3 += this.shiftAmount;

          if (dx3 != 0) {
            int adx2 = dx3;
            if (adx2 < 0)
              adx2 = 0 - adx2;
            int dx2 = dx3;
            int sx = width - adx2;

            clearLine(line);
            if (adx2 < width) {
              if (dx2 > 0) {
                copyLine(line, adx2, srcImg.getLine(i), 0, sx);
              }
              else {
                copyLine(line, 0, srcImg.getLine(i), adx2, sx);
              }
            }
            img.setLine(i, line);
          }
        }
      }
    }
    if (axis == Axis.Y) {
View Full Code Here

    // apply an exponential filter to let the noise more look like clouds
    if (mode == Mode.CLOUDS) {
      final double rWeight = 0.2990;
      final double gWeight = 0.5880;
      final double bWeight = 0.1130;
      SimpleImage bgImg = (this.backgroundImg != null) ? backgroundImg.getImage() : null;
      Pixel pixel = new Pixel();
      Pixel bgPixel = new Pixel();
      for (int i = 0; i < mainImage.getWidth(); i++) {
        for (int j = 0; j < mainImage.getHeight(); j++) {
          pixel.setARGBValue(res.getARGBValue(i, j));
          double lum = pixel.r * rWeight + pixel.g * gWeight + pixel.b * bWeight;
          double c = lum - (cover * 255);
          if (c < 0)
            c = 0;
          int iVal = Tools.roundColor(255.0 - (Math.pow(this.sharpness, c) * 255.0));
          int bgRed = 0, bgGreen = 0, bgBlue = 0;
          switch (bgMode) {
            case IMAGE:
              if (bgImg != null) {
                bgPixel.setARGBValue(bgImg.getARGBValueIgnoreBounds(i, j));
                bgRed = bgPixel.r;
                bgGreen = bgPixel.g;
                bgBlue = bgPixel.b;
              }
              break;
View Full Code Here

  private double avg;
  private Pixel toolPixel = new Pixel();

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

    double xscl = this.scaleX;
    double yscl = this.scaleY;

    double w1 = (double) width - 1.0;
    double h1 = (double) height - 1.0;

    Pixel pPixel = new Pixel();
    for (int pY = 0; pY < height; pY++) {
      for (int pX = 0; pX < width; pX++) {
        pPixel.setARGBValue(img.getARGBValue(pX, pY));
        int argb = srcImg.getARGBValue(pX, pY);
        toolPixel.setARGBValue(argb);
        double gint = (double) (toolPixel.r - avg);
        double x = (double) pX - xscl * gint;
        double y = (double) pY - yscl * gint;
        /* color-wrapping */
        if (this.wrap) {
          while (x >= ((double) width - 0.5))
            x -= (double) (width - 1);
          while ((int) x < 0.5)
            x += (double) (width - 1);
          while (y >= ((double) height - 0.5))
            y -= (double) (height - 1);
          while ((int) y < 0.5)
            y += (double) (height - 1);
        }
        /* render it */
        double xi = Tools.fmod33(x);
        double yi = Tools.fmod33(y);
        if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
          pPixel.r = pPixel.g = pPixel.b = 0;
        }
        else {
          readSrcPixels(x, y);
          pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi
              * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
          pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi
              * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
          pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi
              * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
        }
        img.setRGB(pX, pY, pPixel.r, pPixel.g, pPixel.b);
      }
    }
  }
View Full Code Here

    }
  }

  @Override
  protected void initTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    super.initTransformation(pImg);
    /* compute the average of the gray map */
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    long sum = 0;
    for (int i = 0; i < height; i++) {
      for (int j = 0; j < width; j++) {
        sum += img.getRValue(j, i);
      }
    }
    avg = (double) sum / (double) (width * height);
  }
View Full Code Here

  @Property(description = "Phi offset")
  private double phi0 = 12.0;

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    double zoom;
    if (this.zoom != 0.0)
      zoom = 1.0 / this.zoom;
    else
      zoom = 1.0;
    zoom *= 0.8;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    boolean wrap = this.wrap;

    double cx = (double) width / 2 - 0.5;
    double cy = (double) height / 2 - 0.5;
    double daScale = (double) (width - 1) / (Math.PI + Math.PI);

    double a0 = this.phi0;
    double r0 = this.r0;
    Pixel pPixel = new Pixel();
    double w1 = (double) width - 1.0;
    double h1 = (double) height - 1.0;
    for (int i = 0; i < height; i++) {
      double dr = zoom * ((double) i + r0);
      if (dr < 0)
        dr = 0 - dr;
      for (int j = 0; j < width; j++) {
        /* transform the point */
        double da = ((double) j + a0) / daScale;
        double x = dr * Math.sin(da) + cx;
        double y = dr * Math.cos(da) + cy;

        if (wrap) {
          while (x > ((double) width - 0.1))
            x -= (double) width - 1.2;
          while ((int) x < 0.1)
            x += (double) width - 1.2;
        }
        if (wrap) {
          while (y > ((double) height - 0.1))
            y -= (double) height - 1.2;
          while ((int) y < 0.1)
            y += (double) height - 1.2;
        }

        /* render it */
        double xi = Tools.fmod33(x);
        double yi = Tools.fmod33(y);

        if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
          pPixel.r = pPixel.g = pPixel.b = 0;
        }
        else {
          readSrcPixels(x, y);
          pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi
              * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
          pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi
              * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
          pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi
              * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
        }
        img.setRGB(j, height - i - 1, pPixel.r, pPixel.g, pPixel.b);
      }
    }
  }
View Full Code Here

  @Property(category = PropertyCategory.SECONDARY, description = "Genlock color B")
  protected Color colorB = new Color(0, 0, 0);

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage bImg = (SimpleImage) pImg;
    SimpleImage fImg = (foregroundImage != null) ? foregroundImage : foreground.getImage();
    if (fImg == bImg)
      fImg = fImg.clone();
    Pixel hPixel = new Pixel();
    Pixel bPixel = new Pixel();
    // calculate left and top edge
    int left, top;
    if (hAlign == HAlignment.CENTRE) {
      left = (bImg.getImageWidth() - fImg.getImageWidth()) / 2;
    }
    else if (hAlign == HAlignment.LEFT) {
      left = 0;
    }
    else if (hAlign == HAlignment.RIGHT) {
      left = bImg.getImageWidth() - fImg.getImageWidth();
    }
    else {
      left = this.left;
    }

    if (vAlign == VAlignment.CENTRE) {
      top = (bImg.getImageHeight() - fImg.getImageHeight()) / 2;
    }
    else if (vAlign == VAlignment.TOP) {
      top = 0;
    }
    else if (vAlign == VAlignment.BOTTOM) {
      top = bImg.getImageHeight() - fImg.getImageHeight();
    }
    else {
      top = this.top;
    }

    // calculate affected region
    int hsize = 0, vsize = 0;
    int bgleft = 0, bgtop = 0;
    int sleft = 0, stop = 0;
    int swidth = fImg.getImageWidth();
    int sheight = fImg.getImageHeight();
    int bgwidth = bImg.getImageWidth();
    int bgheight = bImg.getImageHeight();
    /* case 1 */
    if ((left >= 0) && (top >= 0)) {
      if ((left >= bgwidth) || (top >= bgheight))
        return;

      hsize = bgwidth - left;
      if (hsize > swidth)
        hsize = swidth;
      vsize = bgheight - top;
      if (vsize > sheight)
        vsize = sheight;
      bgtop = top;
      bgleft = left;
      sleft = 0;
      stop = 0;
    }

    /* case 2 */
    else if ((left < 0) && (top >= 0)) {
      if ((left <= (0 - swidth)) || (top >= bgheight))
        return;

      hsize = swidth + left;
      if (hsize > bgwidth)
        hsize = bgwidth;
      vsize = bgheight - top;
      if (vsize > sheight)
        vsize = sheight;
      bgtop = top;
      bgleft = 0;
      sleft = 0 - left;
      stop = 0;
    }
    /* case 3 */
    else if ((left >= 0) && (top < 0)) {
      if ((left >= bgwidth) || (top <= (0 - sheight)))
        return;
      hsize = bgwidth - left;
      if (hsize > swidth)
        hsize = swidth;
      vsize = sheight + top;
      if (vsize > bgheight)
        vsize = bgheight;
      bgtop = 0;
      bgleft = left;
      stop = 0 - top;
      sleft = 0;
    }
    /* case 4 */
    else if ((left < 0) && (top < 0)) {
      if ((left <= (0 - swidth)) || (top <= (0 - sheight)))
        return;
      hsize = swidth + left;
      if (hsize > bgwidth)
        hsize = bgwidth;
      vsize = sheight + top;
      if (vsize > bgheight)
        vsize = bgheight;
      bgtop = 0;
      bgleft = 0;
      stop = 0 - top;
      sleft = 0 - left;
    }
    // Genlock colors
    int credA = this.colorA.getRed();
    int cgreenA = this.colorA.getGreen();
    int cblueA = this.colorA.getBlue();
    int credB = this.colorB.getRed();
    int cgreenB = this.colorB.getGreen();
    int cblueB = this.colorB.getBlue();
    {
      int tc;
      if (credA > credB) {
        tc = credA;
        credA = credB;
        credB = tc;
      }
      if (cgreenA > cgreenB) {
        tc = cgreenA;
        cgreenA = cgreenB;
        cgreenB = tc;
      }
      if (cblueA > cblueB) {
        tc = cblueA;
        cblueA = cblueB;
        cblueB = tc;
      }
    }
    //
    int mix = 100 - this.transparency;
    if (mix == 100) {
      if (this.genlock == Genlock.NONE) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            bImg.setRGB(bgleft + j, bgtop + i, hPixel.r, hPixel.g, hPixel.b);
          }
        }
      }
      else if (this.genlock == Genlock.COLOR) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            if ((hPixel.r != credA) || (hPixel.g != cgreenA) || (hPixel.b != cblueA)) {
              bImg.setRGB(bgleft + j, bgtop + i, hPixel.r, hPixel.g, hPixel.b);
            }
          }
        }
      }
      else if (this.genlock == Genlock.IN_RANGE) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            if (((hPixel.r < credA) || (hPixel.r > credB))
                && ((hPixel.g < cgreenA) || (hPixel.g > cgreenB))
                && ((hPixel.b < cblueA) || (hPixel.b > cblueB))) {
              bImg.setRGB(bgleft + j, bgtop + i, hPixel.r, hPixel.g, hPixel.b);
            }
          }
        }
      }
      else if (this.genlock == Genlock.OUT_RANGE) {
        {
          for (int i = 0; i < vsize; i++) {
            for (int j = 0; j < hsize; j++) {
              hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
              if (((hPixel.r >= credA) && (hPixel.r <= credB))
                  && ((hPixel.g >= cgreenA) && (hPixel.g <= cgreenB))
                  && ((hPixel.b >= cblueA) && (hPixel.b <= cblueB))) {
                bImg.setRGB(bgleft + j, bgtop + i, hPixel.r, hPixel.g, hPixel.b);
              }
            }
          }
        }
      }
    }
    else {
      int m1 = 100 - mix;
      int m2 = mix;
      if (this.genlock == Genlock.NONE) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            bPixel.setARGBValue(bImg.getARGBValue(bgleft + j, bgtop + i));
            int r = ((int) ((int) bPixel.r * m1) + (int) ((int) hPixel.r) * m2) / (int) 100;
            int g = ((int) ((int) bPixel.g * m1) + (int) ((int) hPixel.g) * m2) / (int) 100;
            int b = ((int) ((int) bPixel.b * m1) + (int) ((int) hPixel.b) * m2) / (int) 100;
            bImg.setRGB(bgleft + j, bgtop + i, r, g, b);
          }
        }
      }
      else if (this.genlock == Genlock.COLOR) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            if ((hPixel.r != credA) || (hPixel.g != cgreenA) || (hPixel.b != cblueA)) {
              bPixel.setARGBValue(bImg.getARGBValue(bgleft + j, bgtop + i));
              int r = ((int) ((int) bPixel.r * m1) + (int) ((int) hPixel.r) * m2) / (int) 100;
              int g = ((int) ((int) bPixel.g * m1) + (int) ((int) hPixel.g) * m2) / (int) 100;
              int b = ((int) ((int) bPixel.b * m1) + (int) ((int) hPixel.b) * m2) / (int) 100;
              bImg.setRGB(bgleft + j, bgtop + i, r, g, b);
            }
          }
        }
      }
      else if (this.genlock == Genlock.IN_RANGE) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            if (((hPixel.r < credA) || (hPixel.r > credB))
                && ((hPixel.g < cgreenA) || (hPixel.g > cgreenB))
                && ((hPixel.b < cblueA) || (hPixel.b > cblueB))) {
              bPixel.setARGBValue(bImg.getARGBValue(bgleft + j, bgtop + i));
              int r = ((int) ((int) bPixel.r * m1) + (int) ((int) hPixel.r) * m2) / (int) 100;
              int g = ((int) ((int) bPixel.g * m1) + (int) ((int) hPixel.g) * m2) / (int) 100;
              int b = ((int) ((int) bPixel.b * m1) + (int) ((int) hPixel.b) * m2) / (int) 100;
              bImg.setRGB(bgleft + j, bgtop + i, r, g, b);
            }
          }
        }
      }
      else if (this.genlock == Genlock.OUT_RANGE) {
        for (int i = 0; i < vsize; i++) {
          for (int j = 0; j < hsize; j++) {
            hPixel.setARGBValue(fImg.getARGBValue(sleft + j, stop + i));
            if (((hPixel.r >= credA) && (hPixel.r <= credB))
                && ((hPixel.g >= cgreenA) && (hPixel.g <= cgreenB))
                && ((hPixel.b >= cblueA) && (hPixel.b <= cblueB))) {
              bPixel.setARGBValue(bImg.getARGBValue(bgleft + j, bgtop + i));
              int r = ((int) ((int) bPixel.r * m1) + (int) ((int) hPixel.r) * m2) / (int) 100;
View Full Code Here

    super.paintComponent(g);
    drawImage(g);
  }

  public void setImage(SimpleImage pSimpleImage) {
    SimpleImage img = preProcessImage(pSimpleImage);
    setImage(img, 0, 0, img.getImageWidth());
  }
View Full Code Here

  protected SimpleImage preProcessImage(SimpleImage pSimpleImage) {
    return pSimpleImage;
  }

  public void replaceImage(SimpleImage pSimpleImage) {
    SimpleImage img = preProcessImage(pSimpleImage);
    simpleImage.setBufferedImage(img.getBufferedImg(), simpleImage.getImageWidth(), simpleImage.getImageHeight());
  }
View Full Code Here

  @Property(description = "Direction of fall of", editorClass = FallOffEditor.class)
  private FallOff fallOff = FallOff.OUT;

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    double w1 = (double) pImg.getImageWidth() - 1.0;
    double h1 = (double) pImg.getImageHeight() - 1.0;
    double alpha = (0.0 - (double) (this.amount) * Math.PI) / (double) 180.0;
    double cx = this.centreX - 0.5;
    double cy = this.centreY - 0.5;
    double zoom = 1.0 / this.zoom;
    double radius = this.radius;
    radius *= radius;
    double power = this.power;
    double da = alpha / Math.pow(radius, power);
    Pixel pPixel = new Pixel();
    for (int pY = 0; pY < pImg.getImageHeight(); pY++) {
      for (int pX = 0; pX < pImg.getImageWidth(); pX++) {
        pPixel.setARGBValue(img.getARGBValue(pX, pY));

        double dyq = (double) pY - cy;
        double y0 = dyq * zoom;
        dyq *= dyq;
        double x0 = (double) pX - cx;
        double rr = x0 * x0 + dyq;
        x0 *= zoom;
        if (rr <= radius) {
          if (this.fallOff == FallOff.OUT)
            rr = radius - rr;
          double am = Math.pow(rr, power) * da;
          double sina = Math.sin(am);
          double cosa = Math.cos(am);
          double x = cosa * x0 + sina * y0 + cx;
          double y = -sina * x0 + cosa * y0 + cy;
          double xi = Tools.fmod33(x);
          double yi = Tools.fmod33(y);
          if ((x < 0.0) || (x > w1) || (y < 0.0) || (y > h1)) {
            pPixel.r = pPixel.g = pPixel.b = 0;
          }
          else {
            readSrcPixels(x, y);
            pPixel.r = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.r) + xi * (srcQ.r)) + yi
                * ((1.0 - xi) * (srcR.r) + xi * (srcS.r))));
            pPixel.g = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.g) + xi * (srcQ.g)) + yi
                * ((1.0 - xi) * (srcR.g) + xi * (srcS.g))));
            pPixel.b = roundColor(((1.0 - yi) * ((1.0 - xi) * (srcP.b) + xi * (srcQ.b)) + yi
                * ((1.0 - xi) * (srcR.b) + xi * (srcS.b))));
          }
        }
        else {
          readSrcPixels(pX, pY);
          pPixel.r = srcP.r;
          pPixel.g = srcP.g;
          pPixel.b = srcP.b;
        }
        img.setRGB(pX, pY, pPixel.r, pPixel.g, pPixel.b);
      }
    }
    applySmoothing(img, 1);
  }
View Full Code Here

TOP

Related Classes of org.jwildfire.image.SimpleImage

Copyright © 2018 www.massapicom. 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.