DrawBitmap con diferentes salidas de renderizado (Nexus 7 versus otros dispositivos)

En mi aplicación, utilizo drawBitmap () para mostrar un mapa de bits de baja resolución mientras estoy alejándolo. Lo probé en varios dispositivos (Galaxy Tab, Kindle Fire, Moto Xoom y Nexus 7). En todos ellos obtengo la misma calidad de renderizado, excepto en Nexus 7. Puedes ver en las capturas de pantalla adjuntas la diferencia. La región exterior es la que estoy usando drawBitmap, algo así:

mSrcRectF.set(src_x1, src_y1, src_x2, src_y2); mDesRectF.set(view_x1, view_y1, view_x2, view_y2); mMatrix.setRectToRect(mSrcRectF, mDesRectF, Matrix.ScaleToFit.CENTER); canvas.drawBitmap(bmp, mMatrix, mPagePaint); 

Si intento usar la otra variante drawBitmap (Bitmap mapa de bits, Rect src, RectF dst, pintura de pintura) sin la matriz obtengo los mismos resultados.

Creo que este problema / diferencia puede estar relacionado con la aceleración de hardware. Si lo apago (en archivo de manifiesto), obtengo los mismos resultados para todos los dispositivos. Si lo activamos, el procesamiento mejora para todos excepto Nexus, que todavía muestra un mapa de bits más 'pixelado'. He leído que algunas rutinas no son compatibles en HA, pero aún así, no puedo entender lo que está sucediendo en este caso. En un reciente post de Romain Guy en su blog, comenta:

Tenga en cuenta que los mapas de bits alfa sólo funcionan con shaders al invocar la versión "simple" de drawBitmap (). Las variantes que toman un Matrix o un rectángulo de origen y de destino no son compatibles con aceleración de hardware en este momento.

¿Puede alguien arrojar algo de luz sobre esto?

Nexus 7: Nexus 7 captura de pantalla

Xoom (o la pestaña de la galaxia, enciende el fuego): Tiro de la pantalla de Xoom

Es posible que pueda desactivar selectivamente la aceleración de hardware para su lienzo siguiendo las instrucciones de este artículo de desbordamiento de pila

No es una solución ideal, pero podría permitir que el resto de su aplicación obtenga los beneficios de la aceleración de hardware hasta que todas las opciones de drawBitmap () sean compatibles con aceleración de hardware.

  • Aceleración de hardware en ListView
  • Problemas de compatibilidad de Android 4.0 con Canvas.clipPath
  • ¿Por qué la aceleración de hardware no funciona en mi vista?
  • Detectar aceleración de hardware en tiempo de ejecución: Android
  • Problema en OpenGLRenderer: ruta de acceso demasiado grande para que se preste a una textura
  • Aceleración de hardware para Android Studio no funciona
  • ¿Por qué llamar a setScaleX durante el gesto de pinch zoom causa parpadeo?
  • Android aceleración de hardware TextureView con lockCanvas ()
  • Tamaño de fuente demasiado grande para caber en caché
  • Android Force GPU Rendering ¿Cómo habilitar y deshabilitar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.