web-dev-qa-db-fra.com

conversion d'un canevas en image bitmap dans android

J'essaie de développer une application sur le canevas, je dessine un bitmap sur le canevas.Après le dessin, j'essaie de convertir en image bitmap.

quelqu'un peut-il me donner une suggestion.

merci d'avance.

47
satyam

Les conseils dépendent de ce que vous essayez de faire.

Si vous craignez que vos contrôles prennent beaucoup de temps à dessiner et que vous souhaitiez dessiner sur un bitmap afin de pouvoir blit le bitmap plutôt que de redessiner via un canevas, alors vous don ' t veut deviner la plate-forme - les contrôles mettent automatiquement en cache leur dessin dans des bitmaps temporaires, et ceux-ci peuvent même être récupérés à partir du contrôle en utilisant getDrawingCache()

Si vous souhaitez dessiner en utilisant un canevas sur un bitmap, la recette habituelle est:

  1. Créez un bitmap de la bonne taille en utilisant Bitmap.createBitmap()
  2. Créez une instance de canevas indiquant que ce bitmap à l'aide du constructeur Canvas(Bitmap)
  3. Dessiner sur la toile
  4. Utilisez le bitmap
69
Will

Vous créez donc un nouveau Bitmap, par exemple:

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )

width et height étant les mêmes que votre toile.

Ensuite, utilisez canvas.setBitmap(myBitmap), mais pas drawBitmap().

Après avoir appelé setBitmap, tout ce que vous dessinez sur le canevas est en fait, dessiner sur votre myBitmap en suivant l'exemple de code que j'ai illustré.

Modifier :

Vous ne pouvez pas créer directement un bitmap tel que:

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );

Vous devez utiliser à la place:

Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
21
i_Am

Autre exemple:

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

Voici les étapes pour convertir du canevas en bitmap et le stocker dans une galerie ou un dossier spécifique.

Remarque: assurez-vous que vous avez donné l'autorisation 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. Créer une référence de la disposition parent

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. Pour le stocker dans la galerie

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

    linearLayout.setDrawingCacheEnabled(true);
    linearLayout.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());
    
1
Pankaj Lilan