programacion - convertir un lienzo en una imagen de mapa de bits en Android
manual de android en pdf (4)
Estoy tratando de desarrollar una aplicación en el lienzo, estoy dibujando un mapa de bits en el lienzo. Después de dibujar, estoy tratando de convertirlo en una imagen de mapa de bits.
¿alguien puede darme una sugerencia?
gracias de antemano.
El consejo depende de lo que estás tratando de hacer.
Si le preocupa que sus controles tarden mucho tiempo en dibujarse, y desea dibujar en un mapa de bits para poder ajustar el mapa de bits en lugar de volverlo a dibujar a través de un lienzo, entonces no querrá adivinar la plataforma. - los controles almacenan automáticamente en caché su dibujo en mapas de bits temporales, y estos incluso pueden ser extraídos del control usando getDrawingCache()
Si desea dibujar utilizando un lienzo en un mapa de bits, la receta habitual es:
- Cree un mapa de bits del tamaño correcto usando
Bitmap.createBitmap()
- Cree una instancia de lienzo que señale que este mapa de bits utiliza el constructor
Canvas(Bitmap)
- Dibuja en el lienzo
- Usa el mapa de bits
Entonces creas un nuevo Bitmap
, por ejemplo:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
con width
y height
iguales a su lienzo.
A continuación, use canvas.setBitmap(myBitmap)
, pero no drawBitmap()
.
Después de llamar a setBitmap
, todo lo que dibuja en el lienzo es, de hecho, dibujando en su myBitmap
siguiendo el código de ejemplo que he ilustrado.
Editar :
No puede crear un mapa de bits directamente, como por ejemplo:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );
Debe usar en su lugar:
Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
Otro ejemplo:
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;
}
Los siguientes son los pasos para convertir de lienzo a mapa de bits y almacenarlo en la galería o carpeta específica.
Nota: asegúrese de haber otorgado permiso 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
Crear referencia de diseño principal
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
Para almacenarlo en la galería
final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
Para convertir en mapa de bits
linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());