Decodificar áreas específicas de la imagen en Bitmapfactory?

Estoy trabajando con archivos GeoTiff/PNG demasiado grandes para manejar en conjunto en mi código.

¿Hay alguna posibilidad de decodificar áreas específicas (por ejemplo, dado por dos coordenadas x, y) de un archivo en bitmapfactory? No has encontrado nada parecido similar en http://developer.android.com/reference/android/graphics/BitmapFactory.html (referencia para desarrolladores de Android).

¡Gracias!


Con la sugerencia de kcoppock he configurado la siguiente solución.

Aunque me pregunto por qué rect necesita ser inicializado por Rect(left, bottom, right, top) lugar de Rect(left, top, right, bottom)

Ejemplo de llamada:

 Bitmap myBitmap = loadBitmapRegion(context, R.drawable.heightmap, 0.08f, 0.32f, 0.13f, 0.27f); 

Función:

 public static Bitmap loadBitmapRegion( Context context, int resourceID, float regionLeft, float regionTop, float regionRight, float regionBottom) { // Get input stream for resource InputStream is = context.getResources().openRawResource(resourceID); // Set options BitmapFactory.Options opt = new BitmapFactory.Options(); //opt.inPreferredConfig = Bitmap.Config.ARGB_8888; //standard // Create decoder BitmapRegionDecoder decoder = null; try { decoder = BitmapRegionDecoder.newInstance(is, false); } catch (IOException e) { e.printStackTrace(); } // Get resource dimensions int h = decoder.getHeight(); int w = decoder.getWidth(); // Set region to decode Rect region = new Rect( Math.round(regionLeft*w), Math.round(regionBottom*h), Math.round(regionRight*w), Math.round(regionTop*h)); // Return bitmap return decoder.decodeRegion(region, opt); } 

Debe consultar BitmapRegionDecoder . Parece describir exactamente el caso de uso que está buscando.

No sé exactamente lo que quieres decir con "Decodificar áreas específicas", pero si por decodificación quieres decir, para realmente "copiar" ciertas áreas de un mapa de bits, lo que puedes hacer es hacer uso de lienzo para obtenerlo como se muestra a continuación :

  Bitmap bmpWithArea = Bitmap.createBitmap(widthDesired, heightDesired, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmpWithArea); Rect area = new Rect(arealeft, areatop, arearight, areabottom); Rect actualSize = new Rect(0, 0, widthDesired, heightDesired); canvas.drawBitmap(bitmapWithAreaYouWantToGet, area, actual, paintIfAny); //And done, starting from this line "bmpWithArea" has the bmp that you wanted, you can assign it to ImageView and use it as regular bmp... 

Espero que esto ayude…

¡Saludos!

  • Análisis de datos brutos recibidos desde el dispositivo bluetooth HDP
  • Hacer solicitud de volley en diferentes hilos
  • haciendo ViewHolder final en Adaptador de lista personalizada android
  • Cómo configurar la cadena de respuesta JSON formateada en un TextView?
  • Convertir la lista de Java a la matriz de Javascript
  • Los complementos no funcionan en Eclipse en Windows 7 64 bits
  • Cómo llamar a función Java desde c
  • Plugin de androide phonegap ActionBar wrapper
  • Cambiar la configuración de WiFi en Android 5 (L) mediante programación
  • Cómo guardar información de ubicación en Firebase
  • Objeto de fecha SimpleDateFormat no analiza correctamente la cadena de hora en el entorno Java (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.