nikhil c george
Busqué en Google pero no pude encontrar ningún artículo para describir la diferencia entre Bitmap y Drawable en Android.
ted salto
Un mapa de bits es una representación de una imagen de mapa de bits (algo así como java.awt.Image). Un Drawable es una abstracción de “algo que se puede dibujar”. Podría ser un mapa de bits (envuelto como un BitmapDrawable
), pero también podría ser un color sólido, una colección de otros objetos dibujables o cualquier número de otras estructuras.
A la mayor parte del marco de la interfaz de usuario de Android le gusta trabajar con objetos dibujables, no con objetos de mapa de bits. Una Vista puede aceptar cualquier Drawable como fondo. Un ImageView puede mostrar un Drawable en primer plano. Las imágenes almacenadas como recursos se cargan como objetos dibujables.
-
si un bitmapDrawable envuelve un mapa de bits, ¿qué ocurriría si llamamos a recycle() en el mapa de bits dentro de él? Además, ¿qué hace recycle() para API11 y superior?
– desarrollador de Android
14 de agosto de 2012 a las 12:41
-
@androiddeveloper: no estoy seguro, pero no será nada bueno. Una vez que un mapa de bits está envuelto por un BitmapDrawable, el dibujable “posee” el mapa de bits y se supone que debe administrar su vida. si llamas
recycle()
, estás interfiriendo con esa relación. En el mejor de los casos, lo dibujable no dibujará nada; lo más probable es que se produzca algún tipo de excepción más adelante. De acuerdo a los documentos,recycle()
with API11+ hace lo mismo que siempre: te permite liberar los píxeles nativos tan pronto como sabes que has terminado con ellos.–Ted Hopp
14 de agosto de 2012 a las 15:26
-
ahí dicen que libera la memoria nativa del mapa de bits, pero sabemos que a partir de la API 11, todo lo relacionado con el mapa de bits (incluidos sus datos sin procesar) está dentro del montón, por lo que reciclar parece algo raro de hacer…
– desarrollador de Android
14 de agosto de 2012 a las 21:46
-
@androiddeveloper – Mirando el fuente, parece que todavía hay un mapa de bits nativo. Por motivos de rendimiento, el búfer sin procesar se expone como un miembro público (aunque aún se oculta de la API pública). Vocación
recycle()
aún liberará el mapa de bits nativo; también establecerá el búfer de miembros ennull
.–Ted Hopp
15 de agosto de 2012 a las 1:25
-
sí, yo también lo he leído, pero no tiene sentido, ya que dijeron en google IO que el mapa de bits ya no se almacena en la memoria nativa. Estoy realmente confundido de cómo podría ser.
– desarrollador de Android
15 de agosto de 2012 a las 5:57
El mapa de bits no es una imagen. Bitmap es un mapa de bits (note el nombre: Bit-map). Y este mapa representa píxeles en los que puedes dibujar algo. Puede ser su propio mapa de bits personalizado (no imagen), por ejemplo, cuadrado:
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
o puede crear un objeto de mapa de bits a partir de una imagen:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
Un mapa de bits es un contenedor de píxeles. Y Canvas se usa para dibujar algo en su mapa de bits (en píxeles de mapa de bits).
Todo sobre Drawable está bien descrito arriba.
TL;DR
Algunas personas escriben que dibujas en Canvas. No dibujas en Canvas. Dibujas en píxeles de mapa de bits con el método auxiliar de Canvas.
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.RED) // now all bitmap pixels became red
-
Buena respuesta merece +1 🙂 Gracias por la explicación por líneas de código.
– Harshit Madhav
1 de agosto de 2018 a las 14:31
-
perfectamente explicado
– Tushar Srivastava
24 de enero de 2019 a las 9:15
Barmaley
Dibujable es algo que se puede dibujar. Por ejemplo, diseño, imagen vectorial (línea, círculo), fuente, imagen, etc.
Mapa de bits: es un tipo específico de Drawable que es una imagen, como: PNG, JPEG o algo así
-
A mapa de bits (
android.graphics.Bitmap
) no es una subclase de Dibujable (android.graphics.drawable.Drawable
).–Ted Hopp
20 de enero de 2012 a las 15:16
-
Claro, es mi culpa. Quise decir BitmapDrawable
– Barmaley
20 de enero de 2012 a las 17:53
-
pero dicen Mapa de bits: el Drawable más simple, una imagen PNG o JPEG. en documentos
– mallaudín
21 de noviembre de 2018 a las 13:46
-
Pensé que había pegado desde este enlace. desarrollador.android.com/guide/topics/resources/…
– mallaudín
4 de diciembre de 2018 a las 16:25
Misba Farooqi
Recurso dibujable
A Drawable
recurso es un concepto general para un gráfico que se puede dibujar en la pantalla y que se puede recuperar con API como getDrawable(int)
o aplicar a otro recurso XML con atributos como android:drawable
y android:icon
. Hay varios tipos diferentes de dibujables:
-
Archivo de mapa de bitsUn archivo gráfico de mapa de bits (.png, .jpg o .gif) crea un
BitmapDrawable
. -
Archivo de nueve parchesA
PNG
archivo con regiones estirables para permitir el cambio de tamaño de la imagen según el contenido (.9.png), crea unNinePatchDrawable
. -
Lista de capasA
Drawable
que gestiona una serie de otrosDrawable
s. Estos se dibujan en orden de matriz, por lo que el elemento con el índice más grande se dibuja en la parte superior, crea unLayerDrawable
. -
Lista de estadosUn
XML
archivo que hace referencia a diferentes gráficos de mapa de bits para diferentes estados (por ejemplo, para usar una imagen diferente cuando se presiona un botón), crea unStateListDrawable
. -
Lista de nivelesUn
XML
archivo que define unDrawable
que gestiona una serie de alternativasDrawable
s, cada uno asignado a un valor numérico máximo, crea unLevelListDrawable
. -
Transición DibujableUn
XML
archivo que define unDrawable
que puede fundirse entre dosDrawable
recursos, crea unTransitionDrawable
. -
Insertable dibujableUn
XML
archivo que define unDrawable
que inserta otroDrawable
por una distancia especificada. Esto es útil cuando unView
necesita un fondoDrawble
que es más pequeño que los límites reales de la Vista. -
Clip dibujableUn
XML
archivo que define unDrawable
que recorta otroDrawable
basado en estoDrawable
el valor de nivel actual de , crea unClipDrawable
. -
Escala dibujableUn
XML
archivo que define unDrawable
que cambia el tamaño de otroDrawable
basado en su valor de nivel actual, crea unScaleDrawable
. -
Forma dibujableUn
XML
archivo que define una forma geométrica, incluidos colores y degradados, crea unShapeDrawable
.
Consulte también el documento Recursos de animación para saber cómo crear un AnimationDrawable
.
Nota: Un recurso de color también se puede utilizar como Ddrawable
en XML
. Por ejemplo, al crear un StateListDrawable
puede hacer referencia a un recurso de color para el android:drawable
atributo (android:drawable="@color/green"
).
mapa de bits
Una imagen de mapa de bits. Android admite archivos de mapa de bits en tres formatos: .png (preferido), .jpg (aceptable), .gif (no recomendado).
Puede hacer referencia a un archivo de mapa de bits directamente, utilizando el nombre de archivo como ID de recurso, o crear un ID de recurso de alias en XML.
Nota: los archivos de mapa de bits pueden optimizarse automáticamente con la compresión de imágenes sin pérdidas mediante la herramienta aapt durante el proceso de creación. Por ejemplo, un PNG de color verdadero que no requiere más de 256 colores se puede convertir a un PNG de 8 bits con una paleta de colores. Esto dará como resultado una imagen de igual calidad pero que requiere menos memoria. Por lo tanto, tenga en cuenta que los archivos binarios de imágenes colocados en este directorio pueden cambiar durante la compilación. Si planea leer una imagen como un flujo de bits para convertirla en un mapa de bits, coloque sus imágenes en el res/raw/
en su lugar, donde no se optimizarán.
Esta solución debería ser capaz de responder a sus preguntas: solución
– Jrom
20 de enero de 2012 a las 5:24