Cómo cambiar el tamaño de Bitmaps de la manera óptima en Android?

Supongamos que tengo un hexágono:

hexágono

Si cambio de tamaño esto para usarlo en mi aplicación que contiene una cuadrícula de hexágonos:

// ... bgPaint = new Paint(); bgPaint.setAntiAlias(true); bgPaint.setDither(true); // ... Bitmap coloredBackground = BitmapFactory.decodeResource(getResources(), R.drawable.bg); // ... canvas.drawBitmap(coloredBackground, null, getAsRect(), bgPaint); 

Entiendo esto:

Hexágonos

getAsRect() devuelve un objeto Rect que utilizo para dibujar. Lo que quiero lograr es deshacerse de esos píxeles transparentes en los bordes. Creo que estoy haciendo algo mal, pero no pude encontrar dónde hasta ahora. ¿Tiene alguna idea de cómo puedo resolver este problema?

Traté de experimentar con tintineo y antialias, pero nada cambió.

4 Solutions collect form web for “Cómo cambiar el tamaño de Bitmaps de la manera óptima en Android?”

3 sugerencias:

1

Pruebe esto: Desactive la escala del sistema al descodificar el recurso estableciendo BitmapFactory.Options.inScaled en false:

 Options options = new BitmapFactory.Options(); options.inScaled = false; Bitmap source = BitmapFactory.decodeResource(context.getResources(), R.drawable.bg, options); 

El indicador inScaled debe estar desactivado si necesita una versión no escalada del mapa de bits.

A continuación, escala tu mapa de bits con Bitmap.createScaledBitmap(...) .

2

Otra posible razón es que las líneas diagonales de tu azulejo negro contienen diferentes tonos de gris:

Esto es un cierre para arriba de su azulejo:

Introduzca aquí la descripción de la imagen

Su anti-alias antes de que sea redimensionado. Los píxeles que no sean totalmente negros pueden mostrar un color más claro en las líneas redimensionadas. Usted podría cambiar sus líneas de líneas para ser completamente negro (0xFF000000) y hacer anti-alias sólo después del cambio de tamaño.

3

Otra solución a este problema es diseñar su azulejo así:

Introduzca aquí la descripción de la imagen

Que evita el problema de dibujar dos líneas diagonales suavizadas una al lado de la otra.

¿Por qué no usar este en su lugar?

 Bitmap.createScaledBitmap(decodedBitmap, targetWidth, targetHeight, true); 

Puede probar un algoritmo de cambio de tamaño de hqx :

Alternativamente, usted podría pintar en una superficie más grande, y escalar esa superficie por completo.

Estoy cambiando el tamaño de las imágenes de la siguiente manera:

  String url = ""; //replace with path to your image int imageDimension = 48; // replace with required image dimension //decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(url), null, o); //Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE = imageDimension; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while(true){ if(width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) break; width_tmp /= 2; height_tmp /= 2; scale *= 2; } //decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Drawable drawable = new BitmapDrawable(context.getResources(), BitmapFactory.decodeStream(new FileInputStream(url), null, o2)); 
  • Mantener el receptor de difusión funcionando después de cerrar la aplicación
  • ¿Puedo usar el diseño estático (interfaz de usuario nativa) en la implementación nativa de los nativos de reaccionar en Android?
  • Google Places api AutocompletePrediction prediction.getDescription () MissingDespués de actualizar a Play services a 9.4.0
  • Incapaz de construir el slidingmenu con gradle, fallando en la pelusa
  • OSMdroid no pudo encontrar la clase GeoPoint
  • Estilos de análisis de Android para que el widget personalizado no funcione
  • Error en la conversión de fechas en java
  • InflateException: Línea de archivo XML binario # 1: Error de inflar clase <unknown> causada por OutOfMemoryError
  • Recortar una imagen en forma irregular
  • IllegalArgumentException: El archivo contiene un separador de ruta de acceso Android
  • ¿Cómo resuelvo estos errores internos de Maven?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.