begin process at 2008 05 12 07:13:54
1 170 149 membres
53 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [j2me] Vitesse des boucles pour un dessin [ Divers / Général ] (Twub)

[j2me] Vitesse des boucles pour un dessin le 09/05/2008 12:08:41

Twub
Bonjour,

Voila je m'expose a un probleme bizarre, j'ai crée ma propre fonction de dessin d'un rectangle dans mon image, seulement elle est extrement lente.
Pour vous expliquer, voici ma fonction:

[code=java]
public void fillRect2(int _x, int _y, int _w, int _h, int _ARGB)
{
    int yDebut = _x+_y*this.__width;
    int yFin = _x+(_y+_h)*this.__width;
    int w = _w;
    int j, i;
    int width = this.__width;
   
    for(j = yDebut; j<=yFin; j += width)
    {
        for(i = j; i < w; i++)
            this.__tabJeux[i] = _ARGB;
   
   
        w += width;
    }
}
[/code]
Ici le __tabJeux est le tableau de pixel de mon image.


Comme vous voyez c'est exrement simple, seulement comparé au fillRect de la librairie Graphicscde JAVA, c'est lent.

En effet le fillRect de java exécuté 100fois met 3ms et le mien exécuté aussi 100fois met 600ms environ...

Je pense que cela vient du fais de ma boucle, mais je n'en suis pas sur du tout, auriez vous une explication ou une solution svp ^^

Voila, merci de votre aide ;)

Twub


Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 14:01:00

DARKSIDIOUS
Membre Club
(Admin CS)
Salut,

Soit à chaque fois que tu modifie ton tableau de pixels, l'affichage est mis à jour, ce qui rend ton algorithme bien plus lent, soit les fonctions de l'API Java sont natives, et donc bien plus rapide à exécuter que du code java managé (je pencherai plutôt pour la seconde !).
______________________________________
DarK Sidious

Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 14:07:02

Twub
Oui étant donné que je gere l'affichage qu'une fois le tableau rempli, la premiere hypothese me parait donc impossible.
Seulement il n'existerait pas en java la façon d'augmenter la rapidité de mon code? gérer la priorité par exemple?

Merci de ta reponse.

Twub

Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 15:05:32

DARKSIDIOUS
Membre Club
(Admin CS)
Salut,

600 ms pour 100 affichages, ca me paraît quand même pas trop mal pour du code managé ! Ca fait moins de 6 ms par tracé...

A titre de comparaison, le VB est beaucoup plus lent sur un PC : environ 16 ms par tracé en utilisant l'API Windows.

Je présume que tu veux utiliser ce code pour ton algorithme de déformation d'image...

Je t'avais conseillé d'utiliser les fonctions standard de l'API, et il semblerait bien que J2ME gère les Graphics2D vu qu'ils sont intégrés dans la doc de sun pour J2ME (il s'agit d'un package optionnel, mais package disponible tout de même) :
http://java.sun.com/javame/reference/apis/jsr209/

Tu te prendrais bien moins la tête en utilisant l'API standard.
______________________________________
DarK Sidious

Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 15:27:06

Twub
Bonjour,

Non l'algo de déformation de l'image je l'ai réglé, il est optimisé

Celui-ci, me permet juste de faire un pot de peinture dans une zone rectangulaire. Je ne peux par ailleurs pas utiliser les fonctions standard de dessin de java, puisque mon ecran est un tableau de pixel que je rempli case par case.
La pour laquel je refais les fonctions de dessin, c'est qu'elles sont toutes plus rapide que celle de java.
Toutes plus rapide sauf celle-ci...

Je n'ai pas vraiment d'explication de pourquoi celle-ci est plus lente...?

Mais en tout cas merci de t'y préocuper


Twub


Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 15:42:18

DARKSIDIOUS
Membre Club
(Admin CS)
Salut,

Et bien déjà, une toute petite optimisation :

for(i = xDebut; i<=xFin; i += height)
    {
        for(j = i; j < w; j++)
            this.__tabJeux[j] = _ARGB;
   
   
        w += width;
    }

Explication : Il y a de grandes chances que les pixels de ton tableaux soit rangés en mémoire sur les coordonnées X en ligne, et Y en colonnes, c'est à dire : [i, j][i + 1, j][i + 2, j]...[i + width, j][i, j + 1]...

Il est ainsi plus rapide pour le processeur de lire séquentiellement les tableaux de i qui ont de grande chance d'être placés en cache plutôt que de lire d'abord les j puis les i.

Mais ca ne te fera pas gagner 500 ms !

Montre nous plutôt comment tu appelle ta fonction, on ne sais jamais...
______________________________________
DarK Sidious

Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 16:01:20

Twub
Re-Bonjour,

en fait si tu regarde bien , c'est ce que mes boucles font deja, je calcul a quel pixel sur y je dois commencer et auquel je dois m'arreter.
Et donc je rajoute width pour aller a la ligne du dessous et je la rempli jusqu'a arriver au bout puis rebelotte, je vais a la ligne du dessous

Pour mon appel de fonction pour mes tests je le fais dans un programme a part pour etre sur de mes résultats de vitesse.

Voila,

Twub


Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 16:04:30

Twub
Ps: je comprend ta confusion, dans mon code j'ai nommé mon i avec j et mon j avec i ^^

Dsl ^^

Twub

Re : [j2me] Vitesse des boucles pour un dessin le 09/05/2008 16:17:11

DARKSIDIOUS
Membre Club
(Admin CS)
Salut,

Arf, t'as raison, ca m'a induit en erreur :p
______________________________________
DarK Sidious


Classé sous : java, int, dessin, width, j2me

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS