4

有沒有辦法比較兩個Bitmaps是由BitmapDrawable包裹。Android咖啡比賽BitmapDrawables與不同的色調

如果尺寸不匹配的比較應該不會失敗,但它應該匹配像素和的Bitmap

我不知道的Android的原生部分如何繪製Bitmap因爲sameAs返回顏色即使色調不同,也是如此。

如果大小不同,我可以從另一個創建縮放Bitmap,並將它們進行比較。

在我的源代碼我使用DrawableCompat.setTintImageViewsDrawable,並在測試代碼中,我從資源加載Drawable和色調也同樣如此。

任何想法?我想要進行測試,驗證ImageView的來源Drawable,並根據是否按下該顏色來確定顏色。

注1:我的drawable是白色的,我使用tint來設置顏色。對於Bitmaps而言,循環像素不起作用,因爲它們在那時是白色的,很可能Android本地端在繪製時使用色調顏色。

注2:使用compile 'com.android.support:palette-v7:21.0.0'Palette.from(bitmap).generate();並沒有幫助,因爲返回的調色板有0色板所以不能得到任何顏色信息存在。

這是我目前匹配:

public static Matcher<View> withDrawable(final Drawable d) { 
    return new BoundedMatcher<View, ImageView>(ImageView.class) { 

     @Override 
     public boolean matchesSafely(ImageView iv) { 
      if (d == null) { 
       return iv.getDrawable() == null; 
      } else if (iv.getDrawable() == null) { 
       return false; 
      } 

      if (d instanceof BitmapDrawable && iv.getDrawable() instanceof BitmapDrawable) { 
       BitmapDrawable d1 = (BitmapDrawable) d; 
       BitmapDrawable d2 = (BitmapDrawable) iv.getDrawable(); 

       Bitmap b1 = d1.getBitmap(); 
       Bitmap b2 = d2.getBitmap(); 

       return b1.sameAs(b2); 
      } 

      return iv.getDrawable().getConstantState().equals(d.getConstantState()); 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with drawable: "); 
     } 
    }; 
} 

感謝。

回答

0

我使用Frankie Sardo爲此編寫的匹配器 - https://gist.github.com/frankiesardo/7490059。有幾個匹配器必須解決您的問題。所有學分給他。

+0

比較似乎是完全相同的,我使用Bitmap.sameAs,我不明白爲什麼它是兩個不同顏色的BitmapDrawables。 – Niko

+0

看看這裏http://stackoverflow.com/questions/6120439/comparing-bitmap-images-in-android。第一個答案給你一個小費如何獲得顏色。也許這就是你要找的。 – denys

+0

我的資產是白色的,而且我使用着色,所以Android的本地方似乎也將Bitmap像素保留爲白色,並在繪圖或其他類似情況下着色。這兩個Bitmaps之間的像素比較不起作用。 – Niko