Frage

Ich versuche, eine App auf Leinwand zu entwickeln, ich bin ein Bitmap auf der canvas.After Zeichnung Zeichnung, ich versuche zu konvertieren in Bitmap-Bild.

Kann jemand mir einen Vorschlag.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Rat hängt davon ab, was Sie zu tun versuchen.

Wenn Sie besorgt sind, dass Ihre Kontrollen eine lange Zeit zu ziehen, und Sie wollen in eine Bitmap zeichnen, so dass Sie die Bitmap blitten können, anstatt Nachziehen über eine Leinwand, dann Sie nicht will doppelt rät die Plattform sein - Kontrollen cachen automatisch ihre Zeichnung auf temporäre Bitmaps, und diese können auch von der Steuerung mit getDrawingCache()

Wenn Sie in eine Bitmap mit einer Leinwand zu zeichnen, das übliche Rezept lautet:

  1. Erstellen Sie eine Bitmap mit der richtigen Größe mit Bitmap.createBitmap()
  2. Erstellen Sie eine Leinwand Beispiel zeigt, dass diese Bitmap mit Canvas(Bitmap) Konstruktor
  3. Zeichnen Sie die auf Leinwand
  4. Verwenden Sie die Bitmap

Andere Tipps

So erstellen Sie eine neue Bitmap, zum Beispiel:

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

mit width und height die gleichen wie Ihre Leinwand zu sein.

Als nächste Verwendung canvas.setBitmap(myBitmap), aber nicht drawBitmap().

Nachdem Sie setBitmap nennen, alle, was Sie auf Leinwand ziehen, ist in der Tat, Zeichnung auf Ihrem myBitmap durch den Beispielcode geht ich dargestellt habe.

Bearbeiten :

Sie können keine Bitmap erstellen direkt wie:

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

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

Im Anschluss an die Schritte zu konvertieren von der Leinwand zu Bitmap sind und es zur Galerie oder bestimmten Ordner zu speichern.

Hinweis: Stellen Sie sicher, dass Sie die Erlaubnis gegeben haben, von 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. Bezug von Eltern erstellen Layout

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. speichern in Galerie

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

    linearLayout.setDrawingCacheEnabled(true);
    linearLayout.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top