4

Есть ли способ сравнить два Bitmaps, которые обернуты BitmapDrawable.Android Espresso match BitmapDrawables с различным оттенком

сравнение не должно потерпеть неудачу, если размеры не совпадают, но он должен соответствовать пикселям и цвет Bitmap

Я не знаю, как родная часть Android рисует Bitmap, sameAs, потому что возвращается true, даже если цвет оттенка отличается.

Если размер отличается, я могу создать масштабирование Bitmap от другого и сравнить их с.

В моем исходном коде я использую DrawableCompat.setTint с ImageViewsDrawable и в тестовом коде я загружаю Drawable из ресурсов и подкрасить его таким же образом.

Любые идеи? Я хотел бы иметь тест, который проверяет источник Drawable из ImageView и цвет также основывается на том, если он нажат или нет.

ПРИМЕЧАНИЕ 1: Мои чертежи белые, и я использую оттенок для установки цвета. Циклические пиксели для 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 и окрашиваются при рисовании или что-то в этом роде. По этой причине сравнение пикселей между двумя растровыми изображениями не работает. – Niko

Смежные вопросы