webentwicklung-frage-antwort-db.com.de

Konvertieren einer Leinwand in ein Bitmap-Bild in android

Ich versuche, eine App auf Leinwand zu entwickeln, ich zeichne eine Bitmap auf der Leinwand. Nach dem Zeichnen versuche ich, in ein Bitmap-Bild zu konvertieren.

kann mir jemand einen vorschlag geben.

danke im Voraus.

47
satyam

Der Rat hängt davon ab, was Sie tun möchten.

Wenn Sie befürchten, dass das Zeichnen Ihrer Steuerelemente viel Zeit in Anspruch nimmt und Sie zu einer Bitmap zeichnen möchten, damit Sie die Bitmap teilen können, anstatt über eine Zeichenfläche neu zu zeichnen, geben Sie keine t möchte die Plattform doppelt erraten - Steuerelemente speichern ihre Zeichnung automatisch in temporären Bitmaps, und diese können sogar mit getDrawingCache() aus dem Steuerelement abgerufen werden

Wenn Sie eine Bitmap mit einer Zeichenfläche zeichnen möchten, lautet das übliche Rezept:

  1. Erstellen Sie eine Bitmap der richtigen Größe mit Bitmap.createBitmap()
  2. Erstellen Sie mit dem Konstruktor Canvas(Bitmap) eine Zeichenbereichsinstanz, die auf diese Bitmap verweist
  3. Zeichnen Sie auf die Leinwand
  4. Verwenden Sie die Bitmap
69
Will

So erstellen Sie ein neues Bitmap, zum Beispiel:

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

mit width und height als Leinwand.

Verwenden Sie als Nächstes canvas.setBitmap(myBitmap), aber nicht drawBitmap().

Nachdem Sie setBitmap aufgerufen haben, ist alles, was Sie auf der Zeichenfläche zeichnen, das Zeichnen auf Ihrer myBitmap anhand des von mir veranschaulichten Beispielcodes.

Bearbeiten:

Sie können keine Bitmap direkt erstellen, z. B .:

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

Sie müssen stattdessen verwenden:

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

Anderes Beispiel:

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

Im Folgenden werden die Schritte zum Konvertieren von Canvas zu Bitmap und zum Speichern in einer Galerie oder einem bestimmten Ordner beschrieben.

Hinweis: Stellen Sie sicher, dass Sie die Berechtigung WRITE_EXTERNAL_STORAGE erteilt haben

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. Referenz des übergeordneten Layouts erstellen

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. Um es in der Galerie zu speichern

    final String imagename = UUID.randomUUID().toString() + ".png";
    MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
    
  3. In eine Bitmap konvertieren

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