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).
- Descripción de las fugas de memoria en una aplicación de Android
- Cómo comprobar la red wifi o 3g está disponible en el dispositivo android
- Aplicación generador de trayecto para android
- Cómo crear UUID al azar en Android cuando el botón haga clic en evento sucede?
- Accesibilidad de Android com.android.settings: id / left_button sobre la fuerza no funciona
¡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); }
- Cómo actualizar versiones de Apache HttpClient en Android
- Escribir datos en un archivo de texto remoto en android
- Obtener referencia a Thread Object desde su ID
- SwitchPreference onChecked / onClick Listener
- Libgdx - IllegalStateException en una ubicación desconocida
- Diferencia entre los conceptos
- ¿Cómo puedo obtener el código de respuesta de un VolleyError?
- Mostrar certificado de Android
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!
- Abrir un archivo PDF local en WebView con Google Docs
- Fragmento de mapas de Google para Android en RecyclerView.ViewHolder