ti-enxame.com

Convertendo Bitmap na memória em Bitmap com Bitmap.Config.RGB_565

Eu tenho um Bitmap carregado que gostaria de converter para definir a configuração para Bitmap.Config.RGB_565. Existe uma maneira simples de converter um Bitmap nessa configuração depois que o Bitmap já estiver carregado na memória? Por exemplo, abaixo eu tenho um bitmap sendo decodificado dos recursos do aplicativo, no entanto, como eu converteria um Bitmap já carregado para RGB_565? Tenho certeza de que é algo simples, no entanto, sou bastante novo em trabalhar com Bitmaps e, depois de algumas horas procurando online, infelizmente não consegui encontrar o que precisava especificamente.

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

Eu não testei isso, mas deve funcionar:

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;
}

chame os métodos assim:

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

Você pode fazer todos os tipos de transformações adicionais, como girar, esticar, etc., se usar o drawBitmap com uma matriz.

26
Emanuel Moecklin

Você também pode tentar o seguinte:

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

Do documentation do Bitmap.copy ():

Tenta criar um novo bitmap com base nas dimensões desse bitmap, definindo a nova configuração do bitmap para a especificada e copiando os pixels desse bitmap para o novo bitmap. Se a conversão não for suportada ou o alocador falhar, isso retornará NULL.

Olhando através do código fonte nativo, você deve fazer uma boa conversão entre quaisquer valores de Bitmap.Config .

22
sa.shadow

Encontre a resposta aqui https://stackoverflow.com/a/12148450/136467 , graças a siliconeagle .

A solução é criar um novo bitmap com a codificação necessária, conforme o link acima do exemplo.

0
Euthyphro