Android: calidad de las imágenes redimensionadas en tiempo de ejecución
Quiero mostrar imágenes usando el método drawBitmap (). Pero antes quiero cambiar el tamaño de acuerdo a las dimensiones de la pantalla. Tengo un problema con la calidad de la imagen del resultado. Puede ver las capturas de pantalla y el código de prueba a continuación. ¿Cómo puedo cambiar el tamaño de las imágenes en tiempo de ejecución con una buena calidad?
Gracias por las soluciones.
- ¿Cómo puedo cambiar el tamaño de imageButton?
- Android configuración de fondos de pantalla ido mal
- Problemas de calidad al cambiar el tamaño de una imagen en tiempo de ejecución
- Cómo cambiar el tamaño de AlertDialog en la pantalla del teclado
- ¿Cómo imitar la aplicación de Lollipop teléfono, con el cambio de tamaño de los elementos superiores antes de que el contenido desplazable?
Imagen original: alt text http://dl.dropbox.com/u/709109/gradient.png
Pantalla de resultado en el dispositivo: alt text http://dl.dropbox.com/u/709109/device.png
import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import java.io.IOException; import java.io.InputStream; public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout container = (LinearLayout) findViewById(R.id.container); container.addView(new View(this) { @Override protected void onDraw(Canvas canvas) { Bitmap unscaledBitmap; try { InputStream in = getAssets().open("images/gradient.png"); unscaledBitmap = BitmapFactory.decodeStream(in); in.close(); canvas.drawBitmap(unscaledBitmap, null, new Rect(0, 0, 320, 480), null); } catch (IOException e) { e.printStackTrace(); } } }); } }
- Escala de texto en una vista para que se ajuste?
- ¿Cómo escalar / cambiar el tamaño del texto para que se ajuste a un TextView?
- Anchura máxima y altura para ImageView en Android
- ¿Cómo puedo cambiar el tamaño de una imagen antes de mostrarla en una vista con Android Universal Image Loader?
- Cambiar el tamaño de IMAGEVIEW en la escala de la imagen android
- Evite varios juegos de dibujos (hdpi / mdpi / ldpi)
- Cómo cambiar el tamaño de una vista personalizada mediante programación?
- Visualización de una imagen más grande que la pantalla del dispositivo
Por favor refiérase a la respuesta de Romain abajo.
Quisiera eliminar esta respuesta, pero no puedo, ya que está marcada como aceptada.
Tenga en cuenta que Android [cuando esta respuesta se escribió originalmente, sin solicitar explícitamente color de 32 bits] sólo haría color de 16 bits, por lo que puede haber momentos en los que se obtienen artefactos no deseados.
También puede intentar utilizar las opciones de dither para indicar a Android que aplique automáticamente dithering que, aunque no es perfecto, puede ayudar a que las cosas se vean un poco mejor.
En lugar de cambiar el tamaño en tiempo de dibujo (que va a ser muy costoso), intente cambiar el tamaño en un mapa de bits fuera de pantalla y asegúrese de que Bitmap es 32 bits (ARGB888).
Echa un vistazo a http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html (Para utilizar con unscaledBitmap = BitmapFactory.decodeStream (in);
Puede agregar ajustes de calidad a la imagen. Estoy adivinando que la calidad se está degradando como usted no está pasando cualquier configuración de cómo la imagen debe ser procesado.
Las implementaciones del método createScaledBitmap (..) en plataformas más antiguas (nivel API <12) causan problemas al intentar escalar un mapa de bits ARGB_8888 que no tiene valor alfa real (es decir, cada píxel tiene alfa = 255), porque su indicador hasAlpha está establecido A falso En ese caso, el Bitmap escalado se convierte automáticamente al formato RGB_565.
Por lo tanto, desde el nivel 12 de la API hay un método (en la clase Bitmap)
setHasAlpha(boolean value);
Que ayuda a evitar una conversión cuando se utiliza createScaledBitmap (..).
Hay una manera de usar el mismo método en el nivel de API> 3. Ha estado presente por un tiempo muy largo, apenas ocultado. Aquí se describen todos los pasos necesarios incluyendo el código fuente:
https://stackoverflow.com/a/12202069/1082933
Espero que esto ayude.
Tuve un problema similar y aquí es lo que terminé haciendo: Problemas de calidad al cambiar el tamaño de una imagen en tiempo de ejecución
Además, si su función de cambio de tamaño no respeta la relación de aspecto de la imagen, la calidad se ve afectada. Puede encontrar algún algoritmo de cambio de tamaño en la web, por ejemplo, compruebe esto
- ¿Cómo obtener el número total de líneas en un proyecto de Android Studio?
- Android: captura la pantalla del teléfono como una película