begin process at 2012 02 11 13:27:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Général

 > 

[j2me] Vitesse des boucles pour un dessin


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[j2me] Vitesse des boucles pour un dessin

vendredi 9 mai 2008 à 12:08:41 | [j2me] Vitesse des boucles pour un dessin

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

vendredi 9 mai 2008 à 14:01:00 | Re : [j2me] Vitesse des boucles pour un dessin

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
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
vendredi 9 mai 2008 à 14:07:02 | Re : [j2me] Vitesse des boucles pour un dessin

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
vendredi 9 mai 2008 à 15:05:32 | Re : [j2me] Vitesse des boucles pour un dessin

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
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
vendredi 9 mai 2008 à 15:27:06 | Re : [j2me] Vitesse des boucles pour un dessin

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

vendredi 9 mai 2008 à 15:42:18 | Re : [j2me] Vitesse des boucles pour un dessin

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
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
vendredi 9 mai 2008 à 16:01:20 | Re : [j2me] Vitesse des boucles pour un dessin

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

vendredi 9 mai 2008 à 16:04:30 | Re : [j2me] Vitesse des boucles pour un dessin

Twub

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

Dsl ^^

Twub
vendredi 9 mai 2008 à 16:17:11 | Re : [j2me] Vitesse des boucles pour un dessin

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

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


Cette discussion est classée dans : java, int, dessin, width, j2me


Répondre à ce message

Sujets en rapport avec ce message

Probleme applet Java [ par chiro2000 ] Bonjour a tous J ai souci avec ma classe suivante. Mon but est dessiner la carte correspondant au fichier passe en parametre(data.tx) import java Java micro edition j2me [ par esmaocp ] J'ai besoin d'aide sur une petite application en j2me voila les explications: Vous devez rattraper un maximum de déchets de matières différentes tomb probleme urgent en java [ par laguchori ] bonjour tout le monde j'ai commencé a faire un programme java mais je n'arrive pas à le terminer import java.io.*; class Point{ public point(int abs,i URGENT AIDEZ MOI SVP [ par Aymanovitch ] salut tout le monde j'ai un petit problème !!! Je suis entrain de faire une calculatrice d'une expression arithmétique simple en JAVA. j'ai réussi à f j2me java ME SDK [ par kilanifst ] Bonjour, SVP j'ai une calaculatrice qui fonctione sous eclipse il me retourne un téléphone portable avec ses arguments mais quand je veux utiliser cet Généricité en java [ par momoiyeb ] Salut tout le monde j ai de la misère avec mon code, le ^probleme est que j ai une interface listeTriee public interface ListeTriee> extends Iterable equation de simple sous java [ par 208893 ] bonjour comment écrire une fonction simple sous java? le résultat s'affiche sous le JTextField1. et les données se sont des valeurs le v1 est de JTe hibernate.cfg.xml n'affiche pas les tables dans hibernate.reveng [ par hajepierre ] Salut les amis. Je vous ecris pour vous demander de l'aide sur un probleme de connection que j'ai avec java database, derby. Au fait, j'ai l'habitu application embarqué sous j2me [ par toumaggg ] bonjour a tous, je veut réalisé un application embarqué sous java 2 me avec Windows ce, bonh j'ai un des idées sur cette technologie mais j'arrive pa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,465 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales