Android Bitmap: конвертировать прозрачные пиксели в цвет
У меня есть приложение для Android, которое загружает изображение в виде растрового изображения и отображает его в ImageView. Проблема заключается в том, что изображение имеет прозрачный фон; это приводит к тому, что часть черного текста на изображении исчезает на черном фоне.
Если я установил фоновый рисунок ImageView на белый, это будет работать, но я получаю уродливые большие границы на изображении, где он растянут, чтобы соответствовать родительскому (фактическое изображение масштабируется посередине).
Итак - я хочу преобразовать прозрачные пиксели в битмап в сплошной цвет, но я не могу понять, как это сделать!
Любая помощь будет оценена!
Спасибо
Крис
Ответы
Ответ 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);
}
}
}