Package org.jwildfire.image

Examples of org.jwildfire.image.SimpleImage


  @Property(description = "Phi offset")
  private double phi0 = 30.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 *= 2.0;
    int width = pImg.getImageWidth();
    int height = pImg.getImageHeight();
    boolean wrap = this.wrap;
    double cx = (double) width / 2;
    double cy = (double) height / 2;
    double daScale = (double) (height - 2) / (Math.PI + Math.PI);
    double drScale = (double) (width - 1)
        / Math.sqrt((double) width * (double) width + (double) height * (double) height);
    double PI2 = Math.PI / 2.0;
    double TWOPI = Math.PI + Math.PI;
    double a0 = (this.phi0) * Math.PI / 180.0;
    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 y0 = zoom * ((double) i - cy);
      for (int j = 0; j < width; j++) {
        /* transform the point */
        double x0 = zoom * ((double) j - cx);
        double dr = Math.sqrt(x0 * x0 + y0 * y0);
        double da;
        if (x0 != 0)
          da = Math.atan(Tools.fabs33(y0) / Tools.fabs33(x0));
        else
          da = PI2;
        if (x0 < 0.0) {
          if (y0 < 0.0)
            da = Math.PI - da;
          else
            da += Math.PI;
        }
        else {
          if (y0 >= 0.0)
            da = TWOPI - da;
        }
        double x = (dr + r0) * drScale;
        if (wrap) {
          while (x >= ((double) width - 0.5))
            x -= (double) (width - 1);
          while ((int) x < 0.5)
            x += (double) (width - 1);
        }
        double y = (da + a0) * daScale + 1.0;

        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(j, i, pPixel.r, pPixel.g, pPixel.b);
      }
    }
  }
View Full Code Here


  @Property(description = "Color of the rectangle")
  private Color color = new Color(255, 255, 255);

  @Override
  protected void performPixelTransformation(WFImage pImg) {
    SimpleImage img = (SimpleImage) pImg;
    Graphics g = img.getGraphics();
    g.setColor(color);
    if (thickness == 1) {
      g.drawRect(left, top, width, height);
    }
    else if (thickness > 1) {
View Full Code Here

  @Property(description = "Base radius keeping the initial value (radial transition)")
  private int baseRadius;

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

    int x1 = this.x1;
    int y1 = this.y1;
    int v1 = this.value1;
    int x2 = this.x2;
    int y2 = this.y2;
    int v2 = this.value2;

    double rx = (double) (x2 - x1);
    double ry = (double) (y2 - y1);
    double dv = (double) (v2 - v1);
    double vlen;
    if (this.transition == Transition.PARALLEL)
      vlen = Math.sqrt(rx * rx + ry * ry);
    else
      vlen = this.radius - this.baseRadius;
    if (vlen < 0.0001)
      vlen = 0.0001;
    double vlenq = vlen * vlen;

    Pixel rgbPixel = new Pixel();
    HSLTransformer.HSLPixel hslPixel = new HSLTransformer.HSLPixel();
    switch (this.mode) {
      case HUE:
        if (this.transition == Transition.PARALLEL) {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (ax * rx + ay * ry) / vlenq;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double phue = (v1 + dv * prj) / 255.0;
              if (phue < (-1.0))
                phue = -1;
              else if (phue > 1.0)
                phue = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              if (hslPixel.hue != (-1.0)) {
                hslPixel.hue += phue;
                if (hslPixel.hue < 0.0)
                  hslPixel.hue += 1.0;
                else if (hslPixel.hue > 1.0)
                  hslPixel.hue -= 1.0;
              }
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        else {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double phue = (v1 + dv * prj) / 255.0;
              if (phue < (-1.0))
                phue = -1;
              else if (phue > 1.0)
                phue = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              if (hslPixel.hue != (-1.0)) {
                hslPixel.hue += phue;
                if (hslPixel.hue < 0.0)
                  hslPixel.hue += 1.0;
                else if (hslPixel.hue > 1.0)
                  hslPixel.hue -= 1.0;
              }
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        break;
      case SATURATION:
        if (this.transition == Transition.PARALLEL) {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (ax * rx + ay * ry) / vlenq;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double psaturation = (v1 + dv * prj) / 255.0;
              if (psaturation < (-1.0))
                psaturation = -1.0;
              else if (psaturation > 1.0)
                psaturation = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              hslPixel.saturation += psaturation;
              if (hslPixel.saturation < 0.0)
                hslPixel.saturation = 0.0;
              else if (hslPixel.saturation > 1.0)
                hslPixel.saturation = 1.0;
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        else {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double psaturation = (v1 + dv * prj) / 255.0;
              if (psaturation < (-1.0))
                psaturation = -1.0;
              else if (psaturation > 1.0)
                psaturation = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              hslPixel.saturation += psaturation;
              if (hslPixel.saturation < 0.0)
                hslPixel.saturation = 0.0;
              else if (hslPixel.saturation > 1.0)
                hslPixel.saturation = 1.0;
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        break;
      case LUMINOSITY:
        if (this.transition == Transition.PARALLEL) {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (ax * rx + ay * ry) / vlenq;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double pluminosity = (v1 + dv * prj) / 255.0;
              if (pluminosity < (-1.0))
                pluminosity = -1;
              else if (pluminosity > 1.0)
                pluminosity = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              hslPixel.luminosity += pluminosity;
              if (hslPixel.luminosity < 0.0)
                hslPixel.luminosity = 0.0;
              else if (hslPixel.luminosity > 1.0)
                hslPixel.luminosity = 1.0;
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        else {
          for (int i = 0; i < height; i++) {
            double ay = (double) (i - y1);
            for (int j = 0; j < width; j++) {
              double ax = (double) (j - x1);
              double prj = (Math.sqrt(ax * ax + ay * ay) - baseRadius) / vlen;
              if (prj < 0.0)
                prj = 0.0;
              else if (prj > 1.0)
                prj = 1.0;
              double pluminosity = (v1 + dv * prj) / 255.0;
              if (pluminosity < (-1.0))
                pluminosity = -1;
              else if (pluminosity > 1.0)
                pluminosity = 1.0;
              rgbPixel.setARGBValue(img.getARGBValue(j, i));
              HSLTransformer.rgb2hsl(rgbPixel, hslPixel);
              hslPixel.luminosity += pluminosity;
              if (hslPixel.luminosity < 0.0)
                hslPixel.luminosity = 0.0;
              else if (hslPixel.luminosity > 1.0)
                hslPixel.luminosity = 1.0;
              HSLTransformer.hsl2rgb(hslPixel, rgbPixel);
              img.setRGB(j, i, rgbPixel);
            }
          }
        }
        break;
    }
View Full Code Here

            }
          }
          // render the image
          ScriptProcessor scriptProcessor = new ScriptProcessor(desktop);
          scriptProcessor.setAddBuffersToDesktop(false);
          SimpleImage paramInitImg = null; // dummy image just to call the init-method of transformers (which makes sense if script lack some parameters)
          for (Action action : actions) {
            switch (action.getActionType()) {
              case EXECUTE_CREATOR:
                scriptProcessor.selectCreator(action.getParameter());
                action.setProperties(scriptProcessor.getCreator(), scriptProcessor.getBufferList());
                scriptProcessor.executeCreator(action.getWidth(), action.getHeight(),
                    action.getOutputBuffer(), false);
                break;
              case EXECUTE_LOADER:
                scriptProcessor.selectLoader(action.getParameter());
                action.setProperties(scriptProcessor.getLoader(), scriptProcessor.getBufferList());
                scriptProcessor.executeLoader(action.getOutputBuffer(), false);
                break;
              case EXECUTE_TRANSFORMER:
                scriptProcessor.selectTransformer(action.getParameter());
                if (paramInitImg == null)
                  paramInitImg = new SimpleImage(320, 256);
                scriptProcessor.getTransformer().initDefaultParams(paramInitImg);
                action.setProperties(scriptProcessor.getTransformer(),
                    scriptProcessor.getBufferList());
                scriptProcessor.executeTransformer(action.getInputBuffer(),
                    action.getOutputBuffer3D() != null, action.getOutputBuffer(),
                    action.getOutputBuffer3D(), false);
                break;
              case LOAD_IMAGE:
                scriptProcessor.loadImage(action.getParameter());
                break;
            }
          }
          // Save file
          SimpleImage img = scriptProcessor.getLastImage();
          switch (mode) {
            case BATCH:
              scriptProcessor.saveLastImage(filename);
              reporter.showProgress(frame, new File(filename).getName(), img);
              break;
View Full Code Here

  }

  private int getIntensityInternal(int pX, int pY, int pZ) {
    if (pX < 0 || pX >= stackXSize || pY < 0 || pY >= stackYSize || pZ < 0 || pZ >= stackZSize)
      return 0;
    SimpleImage img = images.get(pZ);
    if (img == null) {
      String filename = String.format(inputfilename, imagesIndex.get(pZ));
      try {
        SimpleImage loadedImage = new ImageReader().loadImage(filename);
        for (PreFilter filter : preFilterList) {
          filter.apply(loadedImage);
        }
        if (downsample > 1) {
          double square = downsample * downsample;
          img = new SimpleImage(loadedImage.getImageWidth() / downsample, loadedImage.getImageHeight() / downsample);
          for (int i = 0; i < img.getImageHeight(); i++) {
            for (int j = 0; j < img.getImageWidth(); j++) {
              long sum = 0;
              for (int ii = 0; ii < downsample; ii++) {
                for (int jj = 0; jj < downsample; jj++) {
                  sum += loadedImage.getRValue(j * downsample + jj, i * downsample + ii);
                }
              }
              int value = (int) (sum / square + 0.5);
              img.setRGB(j, i, value, value, value);
            }
View Full Code Here

public class MeshPreviewRenderer {

  public static SimpleImage renderMesh(Mesh pMesh, int pWidth, int pHeight, double pPositionX, double pPositionY,
      double pSize, double pScaleZ, double pRotateAlpha, double pRotateBeta) {
    if (pMesh.getFaces().size() == 0)
      return new SimpleImage(pWidth, pHeight);

    Mesh3D mesh3d = new Mesh3D();
    mesh3d.setImageWidth(pWidth);
    mesh3d.setImageHeight(pHeight);

    int pCount = pMesh.getVertices().size();
    mesh3d.setPCount(pCount);
    double[] x = new double[pCount];
    double[] y = new double[pCount];
    double[] z = new double[pCount];
    double cx = pWidth / 2;
    double cy = pHeight / 2;
    int idx = 0;
    double xmin = pMesh.getPMin().x;
    double ymin = pMesh.getPMin().y;
    double zmin = pMesh.getPMin().z;
    double xmax = pMesh.getPMax().x;
    double ymax = pMesh.getPMax().y;
    double zmax = pMesh.getPMax().z;
    double size = (xmax - xmin + ymax - ymin + zmax - zmin) / 3.0;

    for (Point point : pMesh.getVertices()) {
      double currX = (point.x - xmin) / size * pWidth - cx;
      double currY = (point.y - ymin) / size * pHeight - cy;
      double currZ = pScaleZ * (point.z - zmin) / size * pHeight;
      x[idx] = currX;
      y[idx] = currY;
      z[idx] = currZ;
      idx++;
    }
    mesh3d.setX(x);
    mesh3d.setY(y);
    mesh3d.setZ(z);

    int fCount = pMesh.getFaces().size();
    mesh3d.setFCount(fCount);
    mesh3d.setU(null);
    mesh3d.setV(null);
    mesh3d.setTexture(null);

    int[] pp1 = new int[fCount];
    int[] pp2 = new int[fCount];
    int[] pp3 = new int[fCount];
    idx = 0;
    for (Face face : pMesh.getFaces()) {
      pp1[idx] = face.a;
      pp2[idx] = face.b;
      pp3[idx] = face.c;
      idx++;
    }
    mesh3d.setPP1(pp1);
    mesh3d.setPP2(pp2);
    mesh3d.setPP3(pp3);

    int color[] = new int[fCount];
    Pixel toolPixel = new Pixel();
    toolPixel.setRGB(225, 185, 160);
    int argb = toolPixel.getARGBValue();
    for (int c = 0; c < fCount; c++) {
      color[c] = argb;
    }
    mesh3d.setColor(color);

    PerspectiveTransformer trans = new PerspectiveTransformer();
    trans.setInputMesh3D(mesh3d);
    trans.setDoCam(true);
    trans.setCentreX(trans.getCentreX() * (1.0 + pPositionX));
    trans.setCentreY(trans.getCentreY() * (1.0 - pPositionY));
    trans.setZoom(pSize * 0.5);
    trans.setLight(Light.NORMAL);
    trans.setSmoothing(0);
    trans.setAmbient(0.4);
    trans.setDoCam(false);
    trans.setAlpha(pRotateAlpha);
    trans.setBeta(pRotateBeta);
    trans.setLight1Color(new Color(255, 245, 180));
    SimpleImage out = new SimpleImage(pWidth, pHeight);
    trans.transformImage(out);
    return out;
  }
View Full Code Here

  private FlamePanel getFlamePanel() {
    if (flamePanel == null) {
      int width = centerPanel.getWidth();
      int height = centerPanel.getHeight();
      SimpleImage img = new SimpleImage(width, height);
      img.fillBackground(0, 0, 0);
      flamePanel = new FlamePanel(prefs, img, 0, 0, centerPanel.getWidth(), this, this);
      flamePanel.getConfig().setWithColoredTransforms(prefs.isTinaEditorControlsWithColor());
      flamePanel.setFlamePanelTriangleMode(prefs.getTinaEditorControlsStyle());
      flamePanel.importOptions(prevFlamePanel);
      prevFlamePanel = null;
View Full Code Here

  private ImagePanel getPalettePanel() {
    if (data.palettePanel == null) {
      int width = data.paletteImgPanel.getWidth();
      int height = data.paletteImgPanel.getHeight();
      SimpleImage img = new SimpleImage(width, height);
      img.fillBackground(0, 0, 0);
      data.palettePanel = new ImagePanel(img, 0, 0, data.paletteImgPanel.getWidth());
      data.paletteImgPanel.add(data.palettePanel, BorderLayout.CENTER);
      data.paletteImgPanel.getParent().validate();
    }
    return data.palettePanel;
View Full Code Here

  private ImagePanel getColorChooserPalettePanel() {
    if (data.colorChooserPalettePanel == null) {
      int width = data.colorChooserPaletteImgPanel.getWidth();
      int height = data.colorChooserPaletteImgPanel.getHeight();
      SimpleImage img = new SimpleImage(width, height);
      img.fillBackground(0, 0, 0);
      data.colorChooserPalettePanel = new ImagePanel(img, 0, 0, data.colorChooserPaletteImgPanel.getWidth());
      data.colorChooserPaletteImgPanel.add(data.colorChooserPalettePanel, BorderLayout.CENTER);
      data.colorChooserPaletteImgPanel.getParent().validate();
    }
    return data.colorChooserPalettePanel;
View Full Code Here

            }
            renderer.setRenderScale(renderScale);
            long t0 = System.currentTimeMillis();
            RenderedFlame res = renderer.renderFlame(info);
            long t1 = System.currentTimeMillis();
            SimpleImage img = res.getImage();
            img.getBufferedImg().setAccelerationPriority(1.0f);

            if (data.layerAppendBtn.isSelected() && !pMouseDown) {
              TextTransformer txt = new TextTransformer();
              txt.setText1("layer-append-mode active");
              txt.setAntialiasing(true);
              txt.setColor(Color.RED);
              txt.setMode(Mode.NORMAL);
              txt.setFontStyle(FontStyle.BOLD);
              txt.setFontName("Arial");
              txt.setFontSize(16);
              txt.setHAlign(HAlignment.RIGHT);
              txt.setVAlign(VAlignment.BOTTOM);
              txt.transformImage(img);
            }

            if (data.layerPreviewBtn.isSelected()) {
              Layer onlyVisibleLayer = null;
              for (Layer layer : getCurrFlame().getLayers()) {
                if (layer.isVisible()) {
                  if (onlyVisibleLayer == null) {
                    onlyVisibleLayer = layer;
                  }
                  else {
                    onlyVisibleLayer = null;
                    break;
                  }
                }
              }
              boolean drawSubLayer = flame.getLayers().size() > 1 && getCurrLayer() != null && getCurrLayer() != onlyVisibleLayer && !cfg.isNoControls();

              if (drawSubLayer) {
                Flame singleLayerFlame = new Flame();
                singleLayerFlame.assign(flame);
                singleLayerFlame.getLayers().clear();
                singleLayerFlame.getLayers().add(getCurrLayer().makeCopy());
                singleLayerFlame.getFirstLayer().setVisible(true);
                singleLayerFlame.getFirstLayer().setWeight(1.0);
                RenderInfo lInfo = new RenderInfo(width / 4 * renderScale, height / 4 * renderScale, RenderMode.PREVIEW);
                double lWScl = (double) lInfo.getImageWidth() / (double) singleLayerFlame.getWidth();
                double lHScl = (double) lInfo.getImageHeight() / (double) singleLayerFlame.getHeight();
                singleLayerFlame.setPixelsPerUnit((lWScl + lHScl) * 0.5 * singleLayerFlame.getPixelsPerUnit() * 0.5);
                singleLayerFlame.setWidth(lInfo.getImageWidth());
                singleLayerFlame.setHeight(lInfo.getImageHeight());
                FlameRenderer lRenderer = new FlameRenderer(singleLayerFlame, prefs, false, false);
                RenderedFlame lRes = lRenderer.renderFlame(lInfo);
                SimpleImage layerImg = lRes.getImage();

                boolean drawLayerNumber = true;
                if (drawLayerNumber) {
                  RectangleTransformer rT = new RectangleTransformer();
                  int textWidth = 28;
                  int textHeight = 22;
                  int margin = 2;

                  rT.setColor(new java.awt.Color(0, 0, 0));
                  rT.setLeft(layerImg.getImageWidth() - textWidth - 2 * margin);
                  rT.setTop(layerImg.getImageHeight() - textHeight - 2 * margin);
                  rT.setThickness(textHeight / 2 + 1);
                  rT.setWidth(textWidth);
                  rT.setHeight(textHeight);
                  rT.transformImage(layerImg);

                  TextTransformer txt = new TextTransformer();
                  txt.setText1("  " + (flame.getLayers().indexOf(getCurrLayer()) + 1) + "  ");
                  txt.setAntialiasing(true);
                  txt.setColor(new java.awt.Color(200, 200, 200));
                  txt.setMode(Mode.NORMAL);
                  txt.setFontStyle(FontStyle.BOLD);
                  txt.setFontName("Arial");
                  txt.setFontSize(16);
                  txt.setHAlign(HAlignment.NONE);
                  txt.setPosX(layerImg.getImageWidth() - textWidth - margin);
                  txt.setPosY(layerImg.getImageHeight() - textHeight - margin);
                  txt.setVAlign(VAlignment.NONE);
                  txt.transformImage(layerImg);
                }

                RectangleTransformer rT = new RectangleTransformer();
                rT.setColor(new java.awt.Color(200, 200, 200));
                rT.setLeft(0);
                rT.setTop(0);
                rT.setThickness(3);
                rT.setWidth(lInfo.getImageWidth());
                rT.setHeight(lInfo.getImageHeight());
                rT.transformImage(layerImg);

                ComposeTransformer cT = new ComposeTransformer();
                cT.setHAlign(ComposeTransformer.HAlignment.LEFT);
                cT.setVAlign(ComposeTransformer.VAlignment.BOTTOM);
                cT.setTop(10);
                cT.setLeft(10);
                cT.setForegroundImage(layerImg);
                cT.transformImage(img);
              }
            }

            if (pDownScale != 1) {
              SimpleImage background = new SimpleImage(panelBounds.width, panelBounds.height);
              ComposeTransformer cT = new ComposeTransformer();
              cT.setHAlign(ComposeTransformer.HAlignment.CENTRE);
              cT.setVAlign(ComposeTransformer.VAlignment.CENTRE);
              cT.setForegroundImage(img);
              cT.transformImage(background);
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.