Bonjour,
A Speed41 :
1 )... oui mais pour une stratégie donnée le nombre de ces triturations est sensiblement le même dans la version Pixels[] et Scanline[] donc l'écart de durée d'exécution entre ces deux versions devrait logiquement mettre en évidence la plus grande rapidité avec ScanLine[].Stratégies ... Ok mais pour chaque pixel de couleur rouge, je dois chercher dans toutes les directions le pixel de couleur rouge différent et une fois ces deux pixels obtenus je trace une ligne en faisant un dégradé (variation de la couleur rouge) donc je regarde chaque pixel de mon image plusieurs fois.
... il y a peut-être une lourdeur dans ton code qui bride les performances de ScanLine.
2)... bigre t'as une sacrée patience !!! félicitations. Moi je craque lorsqu'un un test de mise au point m'oblige à admirer le sablier pendant plus de 5 minutes ... et je m'arrange généralement pour faire la plus grande partie des tests de mise au point sur des modèles réduits afin de réduire au max les tests sur modèle de grandeur réelle. A propos de "plus de 4 heures" : à ta place j'aurais pas encore mis le tag "Résolu" devant l'intitulé de cette discussion car il y a certainement de quoi gagner en vitesse d'exécution, et peut-être aussi de quoi enlever ce tag en attandant la suite.un dessin de 600 x 800 plus de 4 heures
3)... moi je suis surtout supris par la faiblesse de l'écart entre les temps mis avec Pixel[] et ScanLine[] car je comprends fort bien que tes temps soient supérieurs aux miens vu que dans mes codes de test il n'y a pas toutes ces triturations pour trouver les pixels de couleur rouge différente.Il est claire qu'au vu de ton essai, je suis surpris du temps pris pour le tracé ... je vais regarder de plus près mon code et voir pour l'amérioration
... tu peux aussi poster ton code ici, il y aura peut-être d'autres suggestions d'amélioration d'autant plus que les idées des uns donnent souvent des idées aux autres ce qui est l'intérêt d'un forum.
4)... dans mes codes de tests j'ai été obligé d'ajouter les deux lignes suivantes :Est ce que le fait de travailler sur un TImage et non sur un TBitmap cela impacte la vitesse d'execution ?pour la bonne et simple raison que dans un 1er temps le code n'utilisait pas cette variable locale Bmp mais travaillait directement sur Image1.Picture.Bitmap sauf que ça ne changeait absolument pas les couleurs dans l'image affichée y compris après avoir ajouté un UpDate. Ma var locale Bmp récupère donc la version initiale du BitMap de Image1 en entrée de la routine et en fin du traitement je réaffecte le Bmp-modifé au BitMap de Image1 pour réactualiser son contenu et l'affichage et enfin ça marchait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Bmp:=Image1.Picture.Bitmap; .... boucles de traitement ... Image1.Picture.Bitmap:=Bmp;
Donc en réponse à ta question : cela impacte avant tout sur l'obtention du changement des couleurs visibles à l'écran sinon la vitesse d'exécution d'un Ligne := Bmp.ScanLine[Y]; et d'un Ligne := Image1.Picture.Bitmap.ScanLine[Y]; devrait être à peu près la même sauf que dans un cas on travaille sur une var locale et dans l'autre sur la propriété d'un composant ce qui donnerait un avantage à la var locale ... et comme ce n'est qu'avec elle que ça a marché impossible d'en savoir davantage sur cette différence de vitesse.
5) A Linkin... cela revient à faire ce que je viens d'évoquer ... sauf que dans mon code cela se fait en 2 instructions au lieu de 4 ... et comme ça marche, ça allège le code.Ne serait-il pas plus efficace de faire travailler sur un bitmap de cache?
A+
Partager