begin process at 2008 07 25 03:40:57
1 216 054 membres
37 nouveaux aujourd'hui
14 180 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 : probleme de Vitesse ou plutot probleme de comprehension ... [ Archives / Graphique ] (Nicolas___)

probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 18:55:01

Nicolas___

voila mon probleme
les types sont definis avant
puis ds une procedure il y a ceci
:=

var
Scan,ScanIMG : TypePRGBArray;
x,y:integer;
ir,iv,ib,mv,mb,mr,Fin: Integer;
begin
gauge1.MaxValue:=image.Picture.Bitmap.Height-1 ;

for y:=0 to image.Picture.Bitmap.Height-1 do
begin
gauge1.Progress:=y;
Scan := image.picture.Bitmap.ScanLine[Y];
for x:=0 to image.Picture.Bitmap.Width-1 do
begin

// Valeurs en rouge vert et bleu
mR := Scan[X].Rouge;
mV := Scan[X].Vert;
mB := Scan[X].Bleu;
// Transo en rgb
fin:=rgb(mr,mv,mb);

 fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr 4;
                                    OU
fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr edit1.text;

//fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shl  1;


                       Scan[X].Rouge := getRvalue(fin);
                       Scan[X].Vert  := getGvalue(fin);
                       Scan[X].Bleu  := getBvalue(fin);
end;
end;

 image.Refresh;
 gauge1.Progress:=0;

Voila le probleme est que qd je mets
fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr 4;
la vitesse est tres rapide

mais qd je mets
fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr edit1.text;
et que la valeur de edit1.text:=4
le tps de traitement est bcp plus long

(Tester sur les m images pr bien faire !)


POURQUOI ????? !

Merci

Ciao


Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 19:44:16

jlen100
Membre Club
salut
tu es sur de ton expression  shr edit1.text;?? normalement cela ne compile pas:  shr  n'admet  qu'un  integer  comme argument et non un string
@+
jlen


Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 20:19:11

Nicolas___
oui non excuse je suis sur mais j ai mis inttostr(edit1.text)

Deso oubli de ma part

Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 20:19:52

Nicolas___
bordel plutot strtoint() j y arriverais !!!!!

Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 20:28:09

Nicolas___
Enfin j ai trouve une parrade pour eviter le désagreable sentiment de perdre son tps 

fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr valcr;
 
ou  valcr est un integer que je fais varier grace a un Spinbutton

Mais le truc c pourquoi dirrectement a partir d'un (Spin ) Edit ca ralentit a ce point la le prog.

Au debut je pensais cela:

Vu que je dois realiser le StrToInt je perds du temps

Donc sol : Utulisation d'un SpinEdit qui donne un integer et la surprise , ca change rien donc

j utilise une variable et la tt est parfait !!!!

A rien comprendre  

Si qqun comprend ...  

Ciao

Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 20:33:34

jlen100
Membre Club
dans le cas de shr 4 le compilateur affecte directement la valeur dans le code qui se résume en un chargement de l'accumulateur et une instruction de décalage cela ne doit guère dépasser une trentaine de cycle horloge.
dans le cas ou tu mets strtoint((edit1.text) tu as en gros le le code suivant:
chargement de l'adresse de edit1.text (~4 instructions);
appel de la routine strtoint avec passage des parametres ( 5 à 10 instructions)
conversion (cela doit représenter entre 50 et 100 instructions)
retour de la routine (5 à 10 instructions)
affection du résultat à shr (2 à 3 instructions)
exécution de shr ..... OUF!!
comme tu le constates on passe de 2 instructions à ~100 à 200 soit un rapport de presque 1 à 100
il est donc normal
fin:=rgb(Scan[X].Rouge,Scan[X].Vert,Scan[X].Bleu ) shr edit1.text;soit beaucoup plus lente
@+
jlen

Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 21:14:59

f0xi
Membre Club
(Admin CS)

Attention Fin doit etre de type TColor et non de type Integer!





FOR x := 0 TO Image.Picture.Bitmap.Width-1 DO BEGIN
    Fin := ((Scan[x].Rouge SHL 16) + (Scan[x].Vert SHL 8) + (Scan[x].Bleu)) {..>>}
           // decalage de N bits
          
{<<..} SHR IntToStrDef(Edit1.Text,0);
           // ou pour decaler de N octets
           //
{<<..} SHR (IntToStrDef(Edit1.Text,0)*8);
    Scan[x].Rouge := byte(Fin SHR 16);
    Scan[x].Vert  := byte(Fin SHR 8);
    Scan[x].Bleu  := byte(Fin);
END;




La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.


Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 21:18:07

f0xi
Membre Club
(Admin CS)
Buglol :




SHR IntToStrDef(Edit1.Text,0);

SHR StrToIntDef(Edit1.Text,0);


La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.


Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 21:59:50

DeltaFX
Beuh.... ? Le resultat de RGB(r,g,b) n'est pas non plus un TColor alors puisqu'on balance un cardinal dans un Tcolor,est-ce que balancer un Tcolor dans un Integer c'est si catastrophique ? ( je stocke une couleur dans le tag de mes controls et c'est bien pratique)


Re : probleme de Vitesse ou plutot probleme de comprehension ... le 16/01/2006 22:27:14

f0xi
Membre Club
(Admin CS)
oui c'est vrai ... vus que TColor n'est rien d'autre qu'un integer...
mais disons que c'est plus parlant ... quand on analyse le code.

il me semblais que TColor avait une particularitée par rapport a integer mais j'ai confondus avec un autre type...
donc en effet ... ma remarque n'est pas a prendre en compte.

hum d'ailleur en parlant de ça j'ai vus une autre erreur dans le truc, sortir la convertion de Edit1.text de la boucle... tout comme l'a dis JLen100 en fait... :


VAR decal : byte;
begin
...
  Decal :=
IntToStrDef(Edit1.Text,0);
  FOR y ...
...
     FOR x := 0 TO Image.Picture.Bitmap.Width-1 DO BEGIN
       Fin := ((Scan[x].Rouge SHL 16) + (Scan[x].Vert SHL 8) + (Scan[x].Bleu))
SHR Decal;
       Scan[x].Rouge := byte(Fin SHR 16);
       Scan[x].Vert  := byte(Fin SHR 8);
       Scan[x].Bleu  := byte(Fin);
     END;
  END;
...
...




La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.



[Page 1 Page 2]
Classé sous : fin, scan, rouge, bleu, vert

Participer à cet échange

Pub



Appels d'offres

Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€
Demande de devis pour ...
Budget : 7 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS