2011-01-17 16 views
36

Tengo mi aplicación que muestra imágenes con diferente relación, redimensionada dentro (centerInside) imageView. Lo que necesito es crear un mapa de bits desde ImageView incluido el fondo (negro en este caso).Android: ¿cómo convertir ImageView completo a mapa de bits?

Entonces, por ejemplo, tengo la pantalla del dispositivo 320x480, pantalla completa imageView con la imagen cambiada a 280x480. ¿Cómo podría obtener un mapa de bits de 320x480?

En la parte superior de esta imagen, tengo algunos logos o botones que no quiero incluir en el mapa de bits, están como en la capa superior. Todo lo que necesito es mapa de bits con imagen y borde negro desde algunos lados.

Respuesta

88

Puede usar el caché de imágenes de imageView. Retratará toda la vista a medida que se distribuye (a escala, bordeada con un fondo, etc.) a un nuevo mapa de bits.

solo asegúrate de que esté hecho.

imageView.buildDrawingCache(); 
Bitmap bmap = imageView.getDrawingCache(); 

existe su mapa de bits tal como lo vio la pantalla.

+2

Suena bien pero solo aparece el crítico con NullPointerException. ¿Es porque la imagen aún no está construida? – yosh

+5

Ok, junto con http://stackoverflow.com/questions/2339429/android-view-getdrawingcache-returns-null-only-null resolvió mi problema :) Gracias. – yosh

+4

La documentación indica 'buildDrawingCache()' debe ser seguida por una llamada a 'destroyDrawingCache' (mira aquí: http://developer.android.com/reference/android/view/View.html#buildDrawingCache%28boolean%29) –

54

Ha intentado:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 
+0

Se da el tamaño de la imagen, pero ese no es el problema. Necesito alguna forma rápida de crear mapa de bits junto con borde negro. Aquí supongo que tengo que calcular la orientación y el centro de la imagen y ambos bordes negros para agregarlos manualmente al mapa de bits creado a partir de la imagen. – yosh

+0

Definitivamente la mejor solución, si desea obtener el contenido real de un ImageView y no solo las partes visibles. –

+0

Tenga en cuenta que imageView.getDrawingCache() obtendrá la representación de mapa de bits real, el mapa de bits se perderá cuando se borre la caché. – secretlm

4

pensando en voz alta aquí (con cierto poca experiencia de trabajo con los gráficos en Java) tal vez algo como esto funcionaría ?:

ImageView iv = (ImageView)findViewById(R.id.imageview); 
Bitmap bitmap = Bitmap.createBitmap(iv.getWidth(), iv.getHeight(), Bitmap.Config.RGB_565); 
Canvas canvas = new Canvas(bitmap); 
iv.draw(canvas); 

Por curiosidad, ¿Qué está tratando de lograr? Puede haber una mejor manera de lograr su objetivo de lo que tiene en mente.

+1

Necesito cortar toda la pantalla y quiero tener bordes negros cuando, por ejemplo, solo hay media imagen en mosaico + Quiero que la imagen se centre en la pantalla. Canvas trae de vuelta algunas malas memorias J2ME: D – yosh

+0

Tal vez estoy malentendiendo ... ¿solo quieres tejar la imagen? Puede definir un mapa de bits dibujable en XML que se solape automáticamente. No entiendo exactamente lo que estás preguntando. – kcoppock

+0

Quiero dividir las imágenes en cuadrados (es decir, 50x50) incluido el fondo negro. Las imágenes tienen diferentes colores/proporciones. Pensé que de manera rápida sería crear un mapa de bits a partir de ImageView completo, no solo el contenido de la imagen. – yosh

1
try { 
     photo.setImageURI(Uri.parse("Location"); 
     BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable(); 
     Bitmap bitmap = drawable.getBitmap(); 
     bitmap = Bitmap.createScaledBitmap(bitmap, 70, 70, true); 
     photo.setImageBitmap(bitmap); 

    } catch (Exception e) { 

    } 
0

Este es un código de trabajo

imageView.setDrawingCacheEnabled(true); 
imageView.buildDrawingCache(); 
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache()); 
Cuestiones relacionadas