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.
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:
Bitmap.createBitmap()
Canvas(Bitmap)
eine Zeichenbereichsinstanz, die auf diese Bitmap verweistSo 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 );
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 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
Referenz des übergeordneten Layouts erstellen
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
Um es in der Galerie zu speichern
final String imagename = UUID.randomUUID().toString() + ".png";
MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
In eine Bitmap konvertieren
linearLayout.setDrawingCacheEnabled(true);
linearLayout.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());