Cómo cargar un ImageView con un archivo png sin usar "setImageBitmap ()"?
Hago un cierto procesamiento (mejora de la calidad y un poco de volver a bitmap.compress()
según el tamaño) en un objeto del Bitmap
y después lo bitmap.compress()
usando la función de bitmap.compress()
dando un nombre de archivo "myfile.png".
newbitmap = processImage(bitmap); FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE); newbitmap.compress(CompressFormat.PNG, 100, fos);
Ahora quiero cargar esta imagen en un ImageView
pero no puedo usar setImageBitmap()
para hacer eso. ¿Hay alguna alternativa?
- Cómo reemplazar R.drawable. "SomeString"
- Uso de iconos vectoriales en Android
- Mostrar ImageView de forma programática
- Android: muestra la imagen desde la tarjeta SD
- FindViewById devuelve el elemento erróneo?
La razón por la que no puedo usar setImageBitmap()
es que estoy utilizando RemoteViews
para un widget, y el uso de método de mapa de bits lleva a errores Error de transacción Binder cuando la imagen es grande.
Intenté fijar el uri de la imagen usando el código abajo pero la imagen no carga en el ImageView
:
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); File internalFile = context.getFileStreamPath("myfile.png"); Uri internal = Uri.fromFile(internalFile); rv.setImageViewUri(R.id.widgetImageView, internal); updateAppWidget(awID, rv);
¡Gracias por tu ayuda!
- Android O: Recurso no encontrado para for API lower and Android O
- ImageView una dimensión para caber espacio libre y segundo evaluar para mantener la ración de aspecto
- Cómo obtener la imagen del servicio web a la aplicación Android
- Cómo agregar una imagen en la barra de herramientas
- Programa Android para acercar y alejar con la ayuda de seekbar?
- Alpha-gradient en Android
- Animar la imagen .png en el widget
- Obtenga la imagen del recurso por nombre en el adaptador de cursor personalizado
Mientras almacena las imágenes en el almacenamiento interno, debe configurar el modo MODE_WORLD_READABLE
lugar de MODE_PRIVATE
. Esto se debe a que un widget es manejado por el proceso de la pantalla de inicio y no puede acceder a sus archivos si no establece el modo correcto.
Así que reemplazar esta línea:
FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE);
con:
FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_WORLD_READABLE);
También, utilice Uri.parse()
y getPath()
lugar de fromFile()
. fromFile()
sólo funciona en Android 2.2 o superior.
Uri internal = Uri.Parse(internalFile.getPath());
¡Espero que esto ayude!
Usando rv.setUri(R.id.widgetImageView, "setImageURI", "file://myfile.png");
En lugar de rv.setImageViewUri(R.id.widgetImageView, internal);
Parece cargar la imagen correctamente. Es posible que desee darle una oportunidad.
Si eso no funciona, todavía existe la opción de reducir la escala de la imagen para que pueda utilizar el método setImageBitmap
. Ejemplo:
public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) { final float densityMultiplier = context.getResources().getDisplayMetrics().density; int h= (int) (newHeight*densityMultiplier); int w= (int) (h * photo.getWidth()/((double) photo.getHeight())); photo=Bitmap.createScaledBitmap(photo, w, h, true); return photo; }
- Cómo encontrar el final del valor de desplazamiento para HorizontalScrollView
- App fallando al usar fragmentos