Dibuja parte de la imagen a la pantalla (sin cargar todo a la memoria)
Lo que quiero hacer, es dibujar un recorte de una imagen a la pantalla, en la posición de mi elección.
Puedo fácilmente cargar esto en un mapa de bits. Y luego dibujar una subsección.
- Si A extiende B extiende C, ¿por qué puedo emitir a A pero obtener un casting de ClassCastException a C?
- ¿La lectura de la altitud del barómetro Android es incorrecta?
- Android Bluetooth para conectar otro dispositivo bluetooth
- Obtener OnActivityResult al volver de startActivityForResult en Adapter
- Loopj Android Async Http - onFailure no disparado
Pero cuando la imagen es grande, esto obviamente agotará la memoria.
Mi pantalla es una vista de superficie. También tiene un lienzo, etc.
Entonces, ¿cómo puedo dibujar parte de una imagen, con un offset dado, y cambiar el tamaño. Sin cargar el original a la memoria
He encontrado una respuesta que miraba a lo largo de las líneas correctas, pero no funciona correctamente. Con el uso de drawables de archivo. Código intento abajo. Aparte de los redimensionamientos al azar que produce, también es incompleta.
Ejemplo:
Drawable img = Drawable.createFromPath(Files.SDCARD + image.rasterName); int drawWidth = (int) (image.GetOSXWidth()/(maxX - minX)) * m_canvas.getWidth(); int drawHeight = (int)(image.GetOSYHeight()/(maxY - minY)) * m_canvas.getHeight(); // Calculate what part of image I need... img.setBounds(0, 0, drawWidth, drawHeight); // apply canvas matrix to move before draw...? img.draw(m_canvas);
- ¿Cómo puedo escribir mediante programación un acceso directo a una página específica en la pantalla de inicio del lanzador de Android?
- Obtener ubicación de la imagen - Cámara Phonegap
- Javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Ancla de confianza para la ruta de certificación no encontrada
- Recibir mensaje de difusión en Android
- Android verificar el estado WIFI (desconectado o el usuario ha cambiado WIFI) ¿Cómo FLAG?
- Pantalla de presentación de Android durante la carga
- Android: falla la compilación de ANT con google-play-services-lib: "resuelve a una ruta sin archivo project.properties para el proyecto"
- Android: FastScrolling SectionIndexer getSections () se llama sólo una vez
BitmapRegionDecoder
se puede utilizar para cargar una región especificada de una imagen. Este es un ejemplo de método que establece el mapa de bits en dos ImageView
. La primera es la imagen completa, el envío es sólo una región de la imagen completa:
private void configureImageViews() { String path = externalDirectory() + File.separatorChar + "sushi_plate_tokyo_20091119.png"; ImageView fullImageView = (ImageView) findViewById(R.id.fullImageView); ImageView bitmapRegionImageView = (ImageView) findViewById(R.id.bitmapRegionImageView); Bitmap fullBitmap = null; Bitmap regionBitmap = null; try { BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder .newInstance(path, false); // Get the width and height of the full image int fullWidth = bitmapRegionDecoder.getWidth(); int fullHeight = bitmapRegionDecoder.getHeight(); // Get a bitmap of the entire image (full plate of sushi) Rect fullRect = new Rect(0, 0, fullWidth, fullHeight); fullBitmap = bitmapRegionDecoder.decodeRegion(fullRect, null); // Get a bitmap of a region only (eel only) Rect regionRect = new Rect(275, 545, 965, 1025); regionBitmap = bitmapRegionDecoder.decodeRegion(regionRect, null); } catch (IOException e) { // Handle IOException as appropriate e.printStackTrace(); } fullImageView.setImageBitmap(fullBitmap); bitmapRegionImageView.setImageBitmap(regionBitmap); } // Get the external storage directory public static String externalDirectory() { File file = Environment.getExternalStorageDirectory(); return file.getAbsolutePath(); }
Resultado es la imagen completa (arriba) y sólo una región de la imagen (abajo):
- ¿Es posible importar mensajes al emulador de Android?
- Android – control de IME mostrar la acción de búsqueda en lugar de entrar