convertendo uma tela em imagem de bitmap no android
-
26-09-2019 - |
Pergunta
Estou tentando desenvolver um aplicativo no Canvas, estou desenhando um bitmap no desenho do Canvas. Após, estou tentando converter em imagem de bitmap.
Alguém pode me dar uma sugestão.
Agradeço antecipadamente.
Solução
O conselho depende do que você está tentando fazer.
Se você está preocupado com o fato de seus controles levarem muito tempo para desenhar, e você deseja desenhar para um bitmap para que você possa escapar o bitmap em vez de re-desenhar através de uma tela, então você não quero ir dupla adiantar a plataforma - controles cache automaticamente seu desenho para bitmaps temporários, e eles podem até ser buscados do controle usando getDrawingCache()
Se você deseja desenhar usando uma tela para um bitmap, a receita usual é:
- Crie um bitmap do tamanho correto usando
Bitmap.createBitmap()
- Crie uma instância de tela apontando que este bitmap usando
Canvas(Bitmap)
construtor - Desenhe para a tela
- Use o bitmap
Outras dicas
Então você cria um novo Bitmap
, por exemplo:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
com width
e height
sendo o mesmo que sua tela.
Em seguida, use canvas.setBitmap(myBitmap)
, mas não drawBitmap()
.
Depois de ligar setBitmap
, tudo o que você extrai na tela é de fato, desenhando seu myBitmap
Indo pelo código de exemplo que eu ilustrei.
Editar:
Você não pode criar um bitmap diretamente como:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );
Você deve usar: em vez disso:
Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
Outro exemplo:
public Bitmap getBitmapNews(int item , boolean selected, int numbernews){
Bitmap bitmap;
if(selected)
bitmap=mBitmapDown[item].copy(Config.ARGB_8888, true);
else
bitmap=mBitmapUp[item].copy(Config.ARGB_8888, true);
Canvas canvas = new Canvas(bitmap);
if(numbernews<10){
canvas.drawBitmap(mNotiNews[numbernews],0,0,null);
}else{
canvas.drawBitmap(mNotiNews[0],0,0,null);
}
return bitmap;
}
A seguir, estão as etapas para converter de tela em bitmap e armazená -lo na galeria ou pasta específica.
Nota: verifique se você deu permissão de Write_external_storage
Activity_main.xml
<LinearLayout
android:id="@+id/linearLayout"
android:orientation="horizontal"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<DrawingView
android:id="@+id/drawingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity.java
Crie referência do layout dos pais
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
Para armazená -lo na galeria
final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
Para converter em bitmap
linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());