2010-09-15 8 views
0

J'ai un programme frontal pour PND fonctionnant sous Windows CE (à la fois 5.0 et 6.0) Il utilise une grande quantité d'images (actuellement au format png) sous forme de boutons ou à des fins de décoration. Les images sont chargées depuis la carte SD via le new Bitmap(path);Comment charger et gérer les images plus efficacement?

J'utilise actuellement la version 3.5 du framework.

Lors du chargement, OS + mon application a consommé de 75 à 80% de la mémoire du périphérique.

De bons moyens pour optimiser tous ces fichiers?

Répondre

4

Les seules façons qui me viennent à l'esprit d'optimiser ces images seraient de les redimensionner à la taille réelle dont elles ont besoin (comme la plupart des icônes seront utilisées dans un format 16x16) et si vous stockez aussi vous pouvez également définir la palette de couleurs utilisée sur une taille correspondant exactement aux besoins de l'image donnée (par exemple, une image de 16x16 a 256 pixels.) Vous avez donc besoin d'une palette maximale de 256 couleurs, mais peut-être aussi d'une palette de 16 couleurs est assez, parce que dans votre image sont seulement 16 couleurs différentes.)

Dans une deuxième approche, vous pouvez également vérifier si vous avez peut-être la même image plusieurs fois chargée. Dans ce cas, vous ne devez le charger qu'une seule fois et l'utiliser plusieurs fois.

Un dernier, qui me vient à l'esprit appartient aux images de fond. Si vous avez un arrière-plan solide, vous n'avez pas besoin d'une image de taille complète. Prenez juste un bitmap 1x1 et étirez-le à la taille requise. La même chose compte pour les arrière-plans dégradés, mais dans ce cas, vous avez un bitmap 1x2 qui sera étiré. Et enfin, si vous avez un motif régulier, prenez la plus petite brique unique et utilisez un mécanisme de tuile.

0

Si vous créez le système d'exploitation, est-il possible de stocker les images dans le cadre du système d'exploitation?

Si cela est possible et que l'image est entièrement chargée dans la mémoire RAM, vous pouvez charger les images uniquement sur la base de l'affichage et les décharger lorsqu'elles ne sont pas nécessaires. Cela permettra également d'éliminer le temps de chargement car l'accès à la RAM est plus rapide que l'accès à la carte SD. Une autre astuce avec le même concept serait de copier toutes les images sur un FS basé sur la RAM et de les charger seulement sur une base de besoin - l'inconvénient est que cela doit être fait après chaque redémarrage.

Questions connexes