2012-09-12 181 views
0

此代码工作完美,但我不能使用ANDROID的工作,我需要comapre两个图像?比较两个图像android

import java.awt.image.BufferedImage; 
    import java.io.FileInputStream; 
    import java.util.Vector; 

    import javax.imageio.ImageIO; 

    public class Untitled1 { 
    public static void main(String[] args) { 
     Vector original = testImg("b.jpg"); 
     Vector clonde = testImg("a.jpg"); 
     System.out.println(original.equals(clonde)); 

    } 

    public static Vector testImg(String file) { 
     Vector all = new Vector(); 
     try { 
      BufferedImage im = ImageIO.read(new FileInputStream(file)); 
      int w = im.getWidth(null); 
      int h = im.getHeight(null); 
      int[] rgbs = new int[w * h]; 
      int x = 0; 
      im.getRGB(0, 0, w, h, rgbs, 0, w); 

      for (int i = 0; i < w; i+=100) { 
       Vector line = new Vector(); 
       for (int j = 0; j < h; j+=100) { 
        line.add(new Integer(rgbs[x])); 
//     System.out.println("Pixel " + i + "," + j + "has " + "RGB values of " + rgbs[x]); 
        x++; 
       } 
       all.add(line); 
      } 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return all; 
    } 



} 
+0

可能重复(http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm) – fresskoma

回答

0

几件事情:

  • 你应该返回从onOptionsItemSelected()true如果你的代码处理所选择的菜单选项,false如果它没有。

  • 只要你确定图像是不同的,你应该打破你的循环。为什么做更多的工作比你需要?

  • 这里没有必要使用case/switch。你只处理一个菜单项。

这样:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() != 1000) 
     return (super.onOptionsItemSelected(item); 

    for(int i=0;i<tabA.length;i++) 
    { 
     if(tabA[i] != tabB[i]) 
     { 
      Toast.makeText(this, "Image are not equal", Toast.LENGTH_LONG).show(); 

      return (true); 
     } 
    } 

    Toast.makeText(this, "Image are equal", Toast.LENGTH_LONG).show(); 

    return (true); 
} 
[图像比较 - 快速算法]的
+0

也作为你已经发现,逐像素比较图像需要很长时间。您可能想要在比较方法中使用其他检查。看到这里更多:http://stackoverflow.com/questions/4409282/compare-two-images-is-same-or-not?rq=1 –

+0

你认为与新的代码? –