2016-03-21 8 views
-1

与えられたイメージが空白か、同じピクセル値を持つかどうかを判断する必要があります。 。ここで私は公差を設定したい。私はこのロジックに上下左右20ピクセルを渡したくありません。助けてください!イメージの上下左右から20ピクセルを照らし、ピクセル値を比較する必要がある

for (String pic : Finallist) { 
    BufferedImage image = ImageIO.read(new File(pic)); 
    final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 
    final int width = image.getWidth(); 
    final int height = image.getHeight(); 
    final boolean hasAlphaChannel = image.getAlphaRaster() != null; 
    boolean blankImage=true; 
    int[][] result = new int[height][width]; 
    if (hasAlphaChannel) { 
     final int pixelLength = 4; 
     for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) { 
      int argb = 0; 
      argb += (((int) pixels[pixel] & 0xff) << 24); // alpha 
      argb += ((int) pixels[pixel + 1] & 0xff); // blue 
      argb += (((int) pixels[pixel + 2] & 0xff) << 8); // green 
      argb += (((int) pixels[pixel + 3] & 0xff) << 16); // red 
      result[row][col] = argb; 
      if(result[row][col]!=result[0][0]) { 
       blankImage=false; 
      } 
      col++; 

      if (col == width) { 
       col = 0; 
       row++; 
      } 
     } 
    } else { 
     final int pixelLength = 3; 
     for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) { 
      int argb = 0; 
      argb += -16777216; // 255 alpha 
      argb += ((int) pixels[pixel] & 0xff); // blue 
      argb += (((int) pixels[pixel + 1] & 0xff) << 8); // green 
      argb += (((int) pixels[pixel + 2] & 0xff) << 16); // red 
      result[row][col] = argb; 
      if(result[row][col]!=result[0][0]) { 
       blankImage=false; 
      } 
      col++; 

      if (col == width) { 
       col = 0; 
       row++; 
      }    
     } 
    } 

    if(blankImage==true) { 
     try { 
      System.out.println("Blank image found and its deleted"); 
      File f = new File(pic); 
      f.delete(); 
     } catch(Exception e) { 
      System.out.println("Exception"+e); 
     } 
    }else { 
     FinalListWithOutBlank.add(pic); 
    } 
} 

私はすべてのものを空にしたい!私のコードのパフォーマンスが苦痛にならないように..私はちょうど..このロジックに手を差し伸べるために、それらのピクセルをスキップしたい

答えて

0

コピー

BufferedImage imageForEvaluation = image.getSubimage(x, y, width, height); 

と別画像への関心の所望の領域とあなたのロジックにこのイメージを使用してください。

+0

パフォーマンス面では痛いでしょう。空中でこれらのピクセルを避ける方法はありますか? –

+1

試しましたか? – Brain

関連する問題