Преобразование битмапа в память в растровое изображение с помощью Bitmap.Config.RGB_565

У меня загруженный битмап, который я бы хотел преобразовать, чтобы установить конфигурацию в Bitmap.Config.RGB_565. Есть ли простой способ преобразования Bitmap в эту конфигурацию после того, как битмап уже загружен в память? Например, ниже у меня есть растровое изображение, декодированное из ресурсов приложения, однако, как бы преобразовать уже загруженный Bitmap в RGB_565? Я уверен, что это что-то простое, однако я довольно новичок в работе с Bitmaps и после нескольких часов работы в Интернете, к сожалению, я не смог найти то, что мне было нужно специально.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig=Bitmap.Config.RGB_565
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.myphoto ,options);

Ответ 1

Я не тестировал это, но он должен работать:

private Bitmap convert(Bitmap bitmap, Bitmap.Config config) {
    Bitmap convertedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
    Canvas canvas = new Canvas(convertedBitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return convertedBitmap;
}

вызовите следующие методы:

Bitmap convertedBitmap = convert(bitmap, Bitmap.Config.RGB_565);

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

Ответ 2

Вы также можете попробовать следующее:

Bitmap converted = original.copy(Config.RGB_565, false);

Из документации Bitmap.copy():

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

Просматривая исходный исходный код, вы должны хорошо конвертировать между любыми значениями Bitmap.Config.

Ответ 3

Нашел ответ здесь fooobar.com/info/539252/..., благодаря siliconeagle.

Решением является создание нового растрового изображения с требуемой кодировкой в ​​соответствии с приведенным выше примером.