Подтвердить что ты не робот

Android Bitmap: конвертировать прозрачные пиксели в цвет

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

Если я установил фоновый рисунок ImageView на белый, это будет работать, но я получаю уродливые большие границы на изображении, где он растянут, чтобы соответствовать родительскому (фактическое изображение масштабируется посередине).

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

Любая помощь будет оценена!

Спасибо Крис

4b9b3361

Ответ 1

Если вы включаете изображение в качестве ресурса, проще всего отредактировать изображение самостоятельно в программе, например gimp. Вы можете добавить свой фон туда и быть уверенным, что он будет выглядеть и не использовать для обработки мощности, изменяя изображение каждый раз, когда он загружается.

Если у вас нет контроля над изображением самостоятельно, вы можете изменить его, выполнив что-то вроде этого, предположив, что ваш Bitmap называется image.

Bitmap imageWithBG = Bitmap.createBitmap(image.getWidth(), image.getHeight(),image.getConfig());  // Create another image the same size
imageWithBG.eraseColor(Color.WHITE);  // set its background to white, or whatever color you want
Canvas canvas = new Canvas(imageWithBG);  // create a canvas to draw on the new image
canvas.drawBitmap(image, 0f, 0f, null); // draw old image on the background
image.recycle();  // clear out old image 

Ответ 2

Вы можете прокручивать каждый пиксель и проверять, прозрачен ли он.

Что-то вроде этого. (Непроверенные)

        Bitmap b = ...;
        for(int x = 0; x<b.getWidth(); x++){
            for(int y = 0; y<b.getHeight(); y++){
                if(b.getPixel(x, y) == Color.TRANSPARENT){
                    b.setPixel(x, y, Color.WHITE);
                }
            }
        }