La différence entre les deux images, c'est que l'image d'origine est produite en utilisant un LAYER_TYPE_HARDWARE
de la couche. Lorsque vous définissez une ombre couche sur le texte à l'aide de ce type de couche, l'effet de flou est créé par le processeur graphique sur une texture.
Voir cet article sur la visualisation des couches pour plus de détails.
L'image capturée sur l'autre main est créé par le rendu dans une image, qui est essentiellement le même que l'utilisation de LAYER_TYPE_SOFTWARE
. Depuis le flou n'est plus créé par le processeur graphique, il n'y a aucune garantie qu'il aura le même aspect.
Vous pouvez expérimenter avec elle. Ajouter le code pour forcer le rendu du logiciel:
tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
tv.setShadowLayer(20, 0, 0, Color.BLACK);
Après cela, les deux images se ressemblent.
Si vous souhaitez à la fois des images à regarder de plus comme l'original de votre image avec le matériel de flou, vous pouvez ajuster le rayon de flou:
tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
tv.setShadowLayer(8, 0, 0, Color.BLACK);
Si vous souhaitez obtenir des résultats exactement comme l'original, par la capture d'une image bitmap d'un matériel de rendu de l'image, il doit être possible mais je ne sais pas d'une manière facile. Vous pourriez avoir à réécrire l'application en utilisant OpenGL pour obtenir l'accès à la sous-jacentes graphiques tampons.