2 votes

Les bitmaps de grande taille ne sont pas toujours créés

Tout le monde !

Je dessine un graphique à partir de certaines données de mon application. Le tracé est avec défilement et zoom. Je crée 2 bitmaps dans ce but dans MyMainFragment.onActivityCreated().

if (bitmaps[0] != null)
      {
         return;
      }    

final int deviceWidth = getResources().getDisplayMetrics().widthPixels;
          final int deviceHeight = getResources().getDisplayMetrics().heightPixels;
          final int deviceMaxDim = Math.max(deviceHeight, deviceWidth);

          bitmaps[0] = Bitmap.createBitmap(
             deviceMaxDim * 2,
             deviceMaxDim * 1,
             Bitmap.Config.ARGB_8888);

          bitmaps[1] = Bitmap.createBitmap(
           bitmaps[0].getWidth(),
           bitmaps[0].getHeight(),
           bitmaps[0].getConfig());

J'ai besoin de 2 bitmaps et non d'un seul en raison de l'algorithme de dessin que j'utilise. En exécutant le programme sur l'Asus Transformer, la taille des bmp en pixels est de 1280 * 2 * 1280, donc la taille des octets est de 1280 * 2 * 1280 * 4. Lorsque je lance le programme depuis Eclipse, tout va bien. Mais lorsque je le lance comme un utilisateur ordinaire depuis la tablette, il se plante une fois sur deux.

Que se passe-t-il derrière la scène lorsque je lance mon application à partir d'Eclipse pour qu'elle s'exécute et puis-je suivre les mêmes étapes de manière programmatique pour qu'elle ne plante pas lorsqu'elle est lancée normalement ? Ou dois-je utiliser d'autres algorithmes de dessin (peut-être quelque chose comme OpenGL) ?

Merci beaucoup.

1voto

RobinBobin Points 105

La solution était simple. J'ai créé un Canvas quelque part dans mon code, j'ai appelé Canvas#setBitmap(bitmaps[ ?]) sur celui-ci, mais je n'ai pas réalisé que je devais appeler Canvas.setBitmap(null) pour libérer la référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X