eine Leinwand in Bitmap-Bildumwandlungs in Android
-
26-09-2019 - |
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.
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:
- Erstellen Sie eine Bitmap mit der richtigen Größe mit
Bitmap.createBitmap()
- Erstellen Sie eine Leinwand Beispiel zeigt, dass diese Bitmap mit
Canvas(Bitmap)
Konstruktor - Zeichnen Sie die auf Leinwand
- 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
-
Bezug von Eltern erstellen Layout
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
-
speichern in Galerie
final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
-
in Bitmap konvertieren
linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());