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.

Foi útil?

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 é:

  1. Crie um bitmap do tamanho correto usando Bitmap.createBitmap()
  2. Crie uma instância de tela apontando que este bitmap usando Canvas(Bitmap) construtor
  3. Desenhe para a tela
  4. 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

  1. Crie referência do layout dos pais

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. Para armazená -lo na galeria

    final String imagename = UUID.randomUUID().toString() + ".png";
    MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
    
  3. Para converter em bitmap

    linearLayout.setDrawingCacheEnabled(true);
    linearLayout.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top