예제 #1
0
 public void corrector() {
   compile();
   int max = Math.min(grabbedImageData.size(), grabbedImagePositions.size());
   GrabbedImageData gid = null;
   GrabbedImagePosition gip = null;
   for (int i = 0; i < max; i++) {
     for (GrabbedImageData g : grabbedImageData) {
       if (g != null && g.getSerialnumber() == i) {
         gid = g;
         break;
       }
     }
     for (GrabbedImagePosition g : grabbedImagePositions) {
       if (g != null && g.getSerialnumber() == i) {
         gip = g;
       }
     }
     if (gid == null || gip == null) {
       System.out.printf("Error : i = %d, gid = %s, gip = %s", i, gid, gip);
     } else if (gid.getRownumber() != gip.getRownumber()) {
       grabbedImagePositions.remove(gip);
       resetGipSerial();
     }
   }
 }
예제 #2
0
 public void createImages() {
   compileScreenShot();
   File dir =
       new File(
           getCompileOutputCurrentDir(),
           ResourceHelper.getGoogleProperty(Constants.KEY_COMPILED_OUTPUT_IMAGE_DIR_NAME));
   if (dir.mkdirs()) {
     BufferedImage shot = ResourceHelper.getImageResource(googleScreenShot);
     Image img;
     Rectangle rect;
     String pre = ResourceHelper.getGoogleProperty(Constants.KEY_COMPILED_OUTPUT_IMAGE_NAME_PRE);
     File file;
     for (GrabbedImagePosition gip : getGrabbedImagePositions()) {
       try {
         rect = gip.getBounds();
         img = shot.getSubimage(rect.x, rect.y, rect.width, rect.height);
         file =
             new File(
                 dir,
                 String.format("%s_%s_%s.png", pre, gip.getSerialnumber(), gip.getRownumber()));
         ImageIO.write((RenderedImage) img, "png", file);
       } catch (IOException ex) {
         ResourceHelper.errLog("Compiler > createImages() > Error : %s", ex);
       }
     }
   } else {
     ResourceHelper.errLog("Compiler > createImages() > Unable to create image directory");
   }
 }
예제 #3
0
 public void resetGipSerial() {
   GrabbedImagePosition gip;
   for (int i = 0; i < grabbedImagePositions.size(); i++) {
     gip = grabbedImagePositions.get(i);
     if (gip != null) {
       gip.setSerialnumber(i);
     }
   }
 }
예제 #4
0
 public void createClones() {
   compile();
   File dir =
       new File(
           getCompileOutputCurrentDir(),
           ResourceHelper.getGoogleProperty(Constants.KEY_COMPILED_OUTPUT_CLONE_DIR_NAME));
   if (dir.mkdirs()) {
     BufferedImage shot = ResourceHelper.getImageResource(googleScreenShot);
     Image img;
     Rectangle rect;
     File file;
     String fname;
     for (GrabbedImagePosition gip : getGrabbedImagePositions()) {
       GrabbedImageData gid = null;
       for (GrabbedImageData g : grabbedImageData) {
         if (g.getSerialnumber() == gip.getSerialnumber()) {
           gid = g;
         }
       }
       try {
         rect = gip.getBounds();
         img = shot.getSubimage(rect.x, rect.y, rect.width, rect.height);
         fname = null;
         file = null;
         if (gid != null) {
           fname = gid.getFileName();
           if (fname.matches(".+\\..{3,}")) {
             file = new File(dir, fname);
           }
         }
         try {
           if (file == null || !file.createNewFile()) {
             file =
                 new File(
                     dir,
                     String.format(
                         "Clone%d info invalid or not found.png", gip.getSerialnumber()));
           }
         } catch (IOException exx) {
           file =
               new File(
                   dir, String.format("Clone%d invalid name found.png", gip.getSerialnumber()));
         }
         ImageIO.write((RenderedImage) img, "png", file);
       } catch (Exception ex) {
         ResourceHelper.errLog("Compiler > createClones() > Error : %s", ex);
       }
     }
   } else {
     ResourceHelper.errLog("Compiler > createClone() > Unable to create clone");
   }
 }
예제 #5
0
  public void compileScreenShot() {
    createOutputDirStructure();
    if (!screenshotcompiled) {
      try {
        int travDiviser = 100;
        BufferedImage shot = ResourceHelper.getImageResource(googleScreenShot);
        int shotWidth = shot.getWidth();
        int shotHeight = shot.getHeight();
        int travXUnit = Math.max(shotWidth / travDiviser, 1);
        int travYUnit = Math.max(shotHeight / travDiviser, 1);
        Color bg =
            new Color(
                Integer.parseInt(
                    ResourceHelper.getGoogleProperty(Constants.KEY_GOOGLE_BACKGROUND_COLOR_RED)),
                Integer.parseInt(
                    ResourceHelper.getGoogleProperty(Constants.KEY_GOOGLE_BACKGROUND_COLOR_GREEN)),
                Integer.parseInt(
                    ResourceHelper.getGoogleProperty(Constants.KEY_GOOGLE_BACKGROUND_COLOR_BLUE)));
        Color col;
        ArrayList<Integer> topList = new ArrayList<>();
        ArrayList<Integer> btmList = new ArrayList<>();
        boolean lastLineMatched = true;
        for1:
        for (int y = 0; y < shotHeight; y++) {
          for2:
          for (int x = 0; x < shotWidth; x += travXUnit) {
            col = new Color(shot.getRGB(x, y));
            if (!col.equals(bg)) {
              if (lastLineMatched) {
                topList.add(y);
                lastLineMatched = false;
              }
              continue for1;
            }
          }
          if (!lastLineMatched) {
            btmList.add(y - 1);
            lastLineMatched = true;
          }
        }

        Rectangle rect = null;
        boolean newRectInserted = false;
        ArrayList<GrabbedImagePosition> grabbedImagePoss = new ArrayList<>();
        int colnum, sno = 0;
        loop1:
        for (int i = 0; i < topList.size(); i++) {
          lastLineMatched = true;
          int maxTop = topList.get(i);
          int maxBtm = btmList.get(i);
          travYUnit = Math.max((maxBtm - maxTop) / travDiviser, 1);
          colnum = 0;
          loop2:
          for (int x = 0; x < shotWidth; x++) {
            loop3:
            for (int y = maxTop; y <= maxBtm; y += travYUnit) {
              col = new Color(shot.getRGB(x, y));
              if (!col.equals(bg)) {
                if (lastLineMatched) {
                  newRectInserted = false;
                  rect = new Rectangle(x, maxTop, 0, maxBtm - maxTop + 1);
                  lastLineMatched = false;
                }
                continue loop2;
              }
            }
            if (!lastLineMatched) {
              rect.width = x - rect.x;
              GrabbedImagePosition gip = new GrabbedImagePosition(sno++);
              gip.setBounds(rect);
              gip.setRownumber(i);
              gip.setColnumber(colnum++);
              grabbedImagePoss.add(gip);
              lastLineMatched = true;
              newRectInserted = true;
            }
          }
          if (!newRectInserted) {
            rect.width = shotWidth - rect.x;
            GrabbedImagePosition gip = new GrabbedImagePosition(sno++);
            gip.setBounds(rect);
            gip.setRownumber(i);
            gip.setColnumber(colnum++);
            grabbedImagePoss.add(gip);
            newRectInserted = true;
          }
        }

        int maxY, maxX;
        loop1:
        for (GrabbedImagePosition gip : grabbedImagePoss) {
          rect = gip.getBounds();
          travXUnit = Math.max(rect.width / travDiviser, 1);
          lastLineMatched = true;
          maxY = rect.y + rect.height;
          maxX = rect.x + rect.width;
          loop2:
          for (int y = rect.y; y < maxY; y++) {
            loop3:
            for (int x = rect.x; x < maxX; x += travXUnit) {
              col = new Color(shot.getRGB(x, y));
              if (!col.equals(bg)) {
                if (lastLineMatched) {
                  rect.y = y;
                  lastLineMatched = false;
                }
                continue loop2;
              }
            }
            if (!lastLineMatched) {
              rect.height = y - rect.y;
              lastLineMatched = true;
            }
          }
        }
        setGrabbedImagePositions(grabbedImagePoss);
        screenshotcompiled = true;
      } catch (Exception ex) {
        ResourceHelper.errLog("Compiler > compileScreenShot() > Error %s", ex);
      }
    }
  }