studio from create android bitmap wallpaper android-drawable

from - get bitmap android



¿Cómo convertir un Drawable a un Bitmap? (14)

Android proporciona una solución no directa: BitmapDrawable . Para obtener el mapa de bits, tendremos que proporcionar el ID de recurso R.drawable.flower_pic a un objeto BitmapDrawable y luego convertirlo en un Bitmap .

Bitmap bm = ((BitmapDrawable) getResources().getDrawable(R.drawable.flower_pic)).getBitmap();

Me gustaría establecer un determinado Drawable como fondo de pantalla del dispositivo, pero todas las funciones de fondo de pantalla solo aceptan Bitmap s. No puedo usar WallpaperManager porque soy pre 2.1.

Además, mis elementos dibujables se descargan de la web y no residen en R.drawable .


Aquí está la buena versión de Kotlin de la respuesta proporcionada por @ Chris.Jenkins aquí: https://.com/a/27543712/1016462

fun Drawable.toBitmap(): Bitmap { if (this is BitmapDrawable) { return bitmap } val width = if (bounds.isEmpty) intrinsicWidth else bounds.width() val height = if (bounds.isEmpty) intrinsicHeight else bounds.height() return Bitmap.createBitmap(width.nonZero(), height.nonZero(), Bitmap.Config.ARGB_8888).also { val canvas = Canvas(it) setBounds(0, 0, canvas.width, canvas.height) draw(canvas) } } private fun Int.nonZero() = if (this <= 0) 1 else this


Aquí hay mejor resolución.

public static Bitmap drawableToBitmap (Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable)drawable).getBitmap(); } Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } public static InputStream bitmapToInputStream(Bitmap bitmap) { int size = bitmap.getHeight() * bitmap.getRowBytes(); ByteBuffer buffer = ByteBuffer.allocate(size); bitmap.copyPixelsToBuffer(buffer); return new ByteArrayInputStream(buffer.array()); }

Código de Cómo leer bits dibujables como InputStream


Entonces, después de ver (y usar) las otras respuestas, parece que todos manejan mal ColorDrawable y PaintDrawable . (Especialmente en el lollipop) parecía que los Shader estaban ajustados, por lo que los bloques sólidos de colores no se manejaban correctamente.

Estoy usando el siguiente código ahora:

public static Bitmap drawableToBitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } // We ask for the bounds if they have been set as they would be most // correct, then we check we are > 0 final int width = !drawable.getBounds().isEmpty() ? drawable.getBounds().width() : drawable.getIntrinsicWidth(); final int height = !drawable.getBounds().isEmpty() ? drawable.getBounds().height() : drawable.getIntrinsicHeight(); // Now we check we are > 0 final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width, height <= 0 ? 1 : height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; }

A diferencia de los demás, si llama a setBounds en Drawable antes de pedir que se convierta en un mapa de bits, ¡dibujará el mapa de bits en el tamaño correcto!


Esta pieza de código ayuda.

Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_resource);

Aquí una versión donde se descarga la imagen.

String name = c.getString(str_url); URL url_value = new URL(name); ImageView profile = (ImageView)v.findViewById(R.id.vdo_icon); if (profile != null) { Bitmap mIcon1 = BitmapFactory.decodeStream(url_value.openConnection().getInputStream()); profile.setImageBitmap(mIcon1); }


Esto convierte un BitmapDrawable a un Bitmap.

Drawable d = ImagesArrayList.get(0); Bitmap bitmap = ((BitmapDrawable)d).getBitmap();


Tal vez esto ayude a alguien ...

Desde PictureDrawable a Bitmap, usa:

private Bitmap pictureDrawableToBitmap(PictureDrawable pictureDrawable){ Bitmap bmp = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bmp); canvas.drawPicture(pictureDrawable.getPicture()); return bmp; }

... implementado como tal:

Bitmap bmp = pictureDrawableToBitmap((PictureDrawable) drawable);


Un Drawable se puede dibujar en un Canvas , y un Canvas puede ser respaldado por un Bitmap :

(Actualizado para manejar una conversión rápida para BitmapDrawable s y para garantizar que el Bitmap creado tenga un tamaño válido)

public static Bitmap drawableToBitmap (Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable)drawable).getBitmap(); } int width = drawable.getIntrinsicWidth(); width = width > 0 ? width : 1; int height = drawable.getIntrinsicHeight(); height = height > 0 ? height : 1; Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; }


Usa este código:

Bitmap bitmap= BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_name);


Use este código. Lo ayudará a lograr su objetivo.

Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.profileimage); if (bmp!=null) { Bitmap bitmap_round=getRoundedShape(bmp); if (bitmap_round!=null) { profileimage.setImageBitmap(bitmap_round); } } public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 100; int targetHeight = 100; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), new Paint(Paint.FILTER_BITMAP_FLAG)); return targetBitmap; }


muy simple

Bitmap tempBMP = BitmapFactory.decodeResource(getResources(),R.drawable.image);


MÉTODO 1 : O bien puede convertir directamente a mapa de bits como este

Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);

MÉTODO 2 : Incluso puede convertir el recurso en el dibujable y desde allí puede obtener un mapa de bits como este

Bitmap myLogo = ((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();

Para API> 22, el método getDrawable se movió a la clase ResourcesCompat , así que para que hagas algo como esto

Bitmap myLogo = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.logo, null)).getBitmap();


// get image path from gallery protected void onActivityResult(int requestCode, int resultcode, Intent intent) { super.onActivityResult(requestCode, resultcode, intent); if (requestCode == 1) { if (intent != null && resultcode == RESULT_OK) { Uri selectedImage = intent.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); filePath = cursor.getString(columnIndex); //display image using BitmapFactory cursor.close(); bmp = BitmapFactory.decodeFile(filepath); iv.setBackgroundResource(0); iv.setImageBitmap(bmp); } } }


public static Bitmap drawableToBitmap (Drawable drawable) { Bitmap bitmap = null; if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; if(bitmapDrawable.getBitmap() != null) { return bitmapDrawable.getBitmap(); } } if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) { bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; }