Nano Hash - криптовалюты, майнинг, программирование

Палитра Android возвращает прозрачный цвет для некоторых изображений

У меня есть AsyncTask, который загружает растровое изображение из URL-адреса и использует палитру для изменения фона моей плавающей кнопки действия. С большинством изображений он работает нормально, но на некоторых кнопка становится прозрачной. На снимке экрана 1 показан цвет кнопки, работающий с синим цветом изображения, но на снимке экрана 2 цвет кнопки прозрачен (хотя изображение не содержит прозрачных пикселей, так как это jpeg).

    public class ColoredFabTask extends AsyncTask<String , String , String> {
    Context mContext;
    View view;
    private View rootView;
    URL myFileUrl;
    Bitmap imageBitmap = null;

    public ColoredFabTask(Context context, View view) {
        this.mContext = context;
        this.view = view;
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected String doInBackground(String... args) {
        try {
            myFileUrl = new URL(args[0]);
            HttpURLConnection conn = (HttpURLConnection) 
            myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            imageBitmap = BitmapFactory.decodeStream(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String args) {
        Palette palette  = Palette.from(imageBitmap).generate();
        int vibrant = palette.getVibrantColor(0);
        FloatingActionButton applyButton = (FloatingActionButton) view.findViewById(R.id.applyButton);
        applyButton.setBackgroundTintList(ColorStateList.valueOf(vibrant));
        applyButton.setVisibility(View.VISIBLE);
    }
}

Скриншоты:

введите здесь описание изображения

введите здесь описание изображения


Ответы:


1

Решил проблему для себя, если кто-то хочет знать, как. Просто проверьте, является ли образец нулевым.

        Palette palette = Palette.from(imageBitmap).generate();
        int fallbackColor = palette.getDominantColor(0);
        Palette.Swatch vibrantColorSwatch = palette.getVibrantSwatch();
        if (vibrantColorSwatch != null) {
            int vibrantColor = vibrantColorSwatch.getRgb();
            FloatingActionButton applyButton = (FloatingActionButton) view.findViewById(R.id.applyButton);
            applyButton.setBackgroundTintList(ColorStateList.valueOf(vibrantColor));

        }
        else {
            FloatingActionButton applyButton = (FloatingActionButton) view.findViewById(R.id.applyButton);
            applyButton.setBackgroundTintList(ColorStateList.valueOf(fallbackColor));
        }
07.09.2017
  • Вы можете просто использовать palette.getVibrantColor(fallbackColor); 19.12.2019

  • 2

    Палитра по умолчанию игнорирует некоторые цвета внутри нее. Вот его реализация из исходников Palette:

    static final Palette.Filter DEFAULT_FILTER = new Palette.Filter() {
        private static final float BLACK_MAX_LIGHTNESS = 0.05F;
        private static final float WHITE_MIN_LIGHTNESS = 0.95F;
    
        public boolean isAllowed(int rgb, float[] hsl) {
            return !this.isWhite(hsl) && !this.isBlack(hsl) && !this.isNearRedILine(hsl);
        }
    
        private boolean isBlack(float[] hslColor) {
            return hslColor[2] <= 0.05F;
        }
    
        private boolean isWhite(float[] hslColor) {
            return hslColor[2] >= 0.95F;
        }
    
        private boolean isNearRedILine(float[] hslColor) {
            return hslColor[0] >= 10.0F && hslColor[0] <= 37.0F && hslColor[1] <= 0.82F;
        }
    };
    

    Как видите, это заставляет Palette игнорировать некоторые цвета. Итак, вам нужно попробовать настроить собственный фильтр, чтобы разрешить обработку всех цветов.

    29.08.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..