BitmapFactory.decodeStream (inputStream) devuelve siempre null cuando algunos bytes son incorrectos
Estoy creando una aplicación para Android y actualmente tengo problemas para recuperar un mapa de bits de una URL. Aquí está el código que estoy usando:
public static Bitmap bmpFromURL(URL imageURL){ Bitmap result = null; try { HttpURLConnection connection = (HttpURLConnection)imageURL .openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); result = BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); } return result; }
Todo funciona bien cuando la imagen se escribe, pero cuando algunos bytes están equivocados, el resultado obtiene nulo. Creo que es básicamente expectable como está escrito en el doc de BitmapFactory.decodeStream
:
- ¿Por qué estoy recibiendo java.io.IOException: Mark ha sido invalidado?
- Qué tamaño almacenar imagen en el servidor para utilizar con la aplicación de Android
- ¿Cómo crear Bitmap de la imagen de buffer de bytes en grises?
- Android: el relleno dejó un mapa de bits con color blanco
- Tratando de dibujar en un mapa de bits cargado por el usuario
Si el flujo de entrada es nulo o no se puede utilizar para decodificar un mapa de bits, la función devuelve null. La posición del flujo estará donde estaba cuando se leyeron los datos codificados.
El problema es que mi imagen errónea está bien interpretada por mi navegador web y puedo hacerlo en la plataforma del iPhone.
¿Hay una manera de ignorar esos píxeles erróneos? tal vez con el parámetro de opción?
Cualquier ayuda apreciada
Romain
- Guardar hardware acelerado android lienzo como mapa de bits
- Desvanecer el borde de la imagen en una vista de imagen
- Cómo convertir todo el contenido en una vista de desplazamiento a un mapa de bits?
- Android Cómo reciclar el mapa de bits correctamente cuando se utiliza RecyclerView?
- Cómo convertir la matriz de bytes en Bitmap
- RemoteViews (Widget) tiene texto difuso cuando se utiliza un mapa de bits
- Dibujar mapas de bits de recursos sobre otro
- Java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
Se trata de un error conocido corregido en una futura versión de Android. Usted puede trabajar alrededor de él primero copiando el contenido del InputStream en una matriz del byte [] y descodificando entonces el arsenal del byte sí mismo.
Prueba esto. Funcionó para mí. Espero eso ayude.
result = BitmapFactory.decodeStream(new PatchInputStream(input)); public class PatchInputStream extends FilterInputStream { public PatchInputStream(InputStream input) { super(input); } public long skip(long n) throws IOException { long m = 0L; while (m < n) { long _m = in.skip(nm); if (_m == 0L) break; m += _m; } return m; } }
- La API de Android Drive startResolutionForResult devuelve RESULT_CANCELLED
- Android: las vistas en el componente compuesto personalizado no se inflan (findByView devuelve null)