2010-12-10 196 views
2

我知道如何比較兩個字符串是否相同。這是編碼比較兩個字符串 TextView t,t1;比較兩個圖像是否相同

String s,s1; 
s=t.getText().toString(); 
s1=t1.setText().toString(); 
if(s.equals(s1)){ 
    t.setText("equal"); 
} 
else{ 
    t.setText("not equal"); 
} 

我需要的編碼比較兩個圖像是相同或not.please給我早期

+0

也許你可以使用MD5 – m0unir 2010-12-10 13:42:57

回答

-1

如果要檢查兩個圖像是完全相等的,那麼透過這兩個字節,並比較兩個具有逐個元素檢查的數組。

+0

我要爲檢查編碼的圖像是在ImageView的 – android 2010-12-11 05:16:59

1

檢查高度是否匹配,如果不是則返回false。然後,檢查寬度是否匹配,如果不匹配,則返回false。然後檢查每個像素,直到找到一個不匹配的像素。當你這樣做時,返回false。如果每個像素匹配,則返回true。

bool imagesAreEqual(Image i1, Image i2) 
{ 
    if (i1.getHeight() != i2.getHeight) return false; 
    if (i1.getWidth() != i2.getWidth) return false; 

    for (int y = 0; y < i1.getHeight(); ++y) 
     for (int x = 0; x < i1.getWidth(); ++x) 
      if (i1.getPixel(x, y) != i2.getPixel(x, y)) return false; 

    return true; 
} 

在現實中,你可能要處理的圖像作爲一個二維數組如果可以的話,只是比較字節。我不知道Android圖像API,但getPixel可能會很慢。

+1

()同我得到了getpixel錯誤;這是ImageView的 – android 2010-12-11 05:15:15

+2

這是僞未定義的方法 - 而不是真正的代碼。你必須查看如何用你的語言做每件作品。它旨在爲您提供算法。 – 2010-12-11 16:53:10

-1

圖片可以的BufferedImage被定義爲的抽象,它只是保持首標等的信息。在閱讀圖像像素之前,比較圖像與它們的大小。

File f1; 
File f2; 
Image i1 = ImageIO.read(f1); 
Image i2 = ImageIO.read(f2); 
if(i1.getHeight() == i2.getHeight 
    && i1.getWidth() == i2.getWİdth) { 
    BufferedImage b1 = ImageIO.read(f1); 
    BufferedImage b2 = ImageIO.read(f2); 
    //compare pixels 
} 

圖片讀比BufferedImage的方式來得更快,因爲它不從文件中獲取像素。 爲了比較,我建議兩個或更多的分層像素比較。使用隨機會提高你的速度,因爲找到一個不匹配的像素就足夠了。

for(i=0; i<N; i++) { 
    x = r.nextInt(184); 
    y = r.nextInt(184); 
    if(b1.getRGB(x,y) != b2.getRGB(x,y)) { 
     break; 
    } 
} 

如果圖像通過隨機比較,請逐像素比較,如果發現不匹配的像素,則打破循環。我回答假設你需要快速運行的比較。爲此,我不建議MD5散列,除非您想在大圖像目錄中查找所有重複的圖像。如果你只是想比較兩張圖像,並且速度很快,MD5沒有什麼意義,因爲它需要讀取圖像的所有像素來檢出散列值,並且這會降低的一個比較速度

+0

ImageIO是來自某些圖書館的課程,您甚至沒有提及 – 2016-10-26 09:52:03

+0

https://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html @JacekKwiecień – 2016-10-26 12:11:43