Oui, pour afficher le résultat, mais cela devrait être optimisé :grabiller a écrit :De ce que j'en comprends, tu n'utilises aussi qu'un seul Canvas.
- afficher plusieurs canvas permettrait peut-être de gagner un peu de ressources. A tester.
- n'utiliser qu'un canvas ou ensemble de canvas de la taille de la zone de dessin (qui serait donc au max la surface du bureau). Là, le canvas fait la taille du document. Donc, je suis monté jusque 5000*5000 sans que ça ralentisse trop.
En fait, je dessine d'abord sur une dalle (une petite image) pour pouvoir sauvegarder toutes les images si besoin (sauvegarde d'image). Puis, je redessine cette dalle sur le canvas.Petite question, pourquoi dessiner sur une image que tu re-dessine dans le canvas, alors qu'en dessinant dans le Canvas directement cela revient au même ?
Je ne redessine l'image complète (de la taille de l'area) sur le canvas que si je bouge la zone de la scrollarea.
J'ai testant en dessinant directement sur le canvas, mais je n'ai pas encore trouvé comment faire ça pour que ça fonctionne et que ce soit aussi optimisé.
qu'entends-tu par dalles virtuelles ?Je veux dire par là, pourquoi ne pas utiliser un système de dalles virtuelles ? Cela reviendrai à ne dessiner dans le Canvas que dans la zone d'une 'dalle' à chaque fois.
J'ai besoin des images des dalles pour la sauvegarder du document, voire l'export ensuite en une seule grande image qui fait tout le document, et cela avec transparence.
Hors, le canvas n'a pas de transparence, je suis donc obligé de passé par des dalles-image et stocker les infos sur ces dalle-images.
oui, j'y ai pensé. Je ferai un test quand je trouverai un peu de temps ^^.Autre alternative si on va dans le sens de Fred, pourquoi pas un Canvas par dalle ? (mais c'est peut-être aventureux, là )
Ce qu'on pourrait imaginer, c'est que StartDrawing() prenne une zone rectangulaire en parametre pour pouvoir travailler sur une portion reduite d'une image ou d'un canvas et optimiser ce genre d'operation (pour l'instant ce n'est pas prévu).
ce serait intéressant, mais il faudrait que ce soit en option ^^.Du coup, ne pourrait-on pas imaginer une accélération hardware pour le Canvas ?
Voir un truc multithreadé
Je m'étais posé exactement la même question pour mon appli 2D.C'est vrai que je pourrai envisager d'utiliser un OpenWindowedScreen() (voire une surface OpenGL, carrément) et m'en servir pour toute l'UI. En même temps cela change considérablement la manière dont les Events sont gérés et dans ce cas on est obligé d'updater l'UI constamment, comme dans un jeu, ce qui n'est peut-être pas le plus efficace non plus pour une application 'normale' (les ressources risquent d'en prendre un coup, du coup).
Pas facile comme choix.
En 2D, Djes m'avait expliqué qu'il valait mieux gérer ça avec un système de dalle (comme celui que j'ai essayé de mettre en place). Cela permettait de travailler sur des images immenses.
D'ailleurs, avec mon exemple, j'ai testé sur une image en 1000*1000 et en 5000*5000, c'est quasiment aussi rapide, donc, je doisêtre sur la bonne voie ^^. Il faudrait optimiser encore le système pour que ce soit nickel.
J'ai testé raafal chez moi, et ça prendre 48% de mon CPU lorsque je bouge les splitters. Mais c'est une petite machine (packardbell, AMD 1.4Ghz, ram 4Go, win8), je m'en sers surtout pour écrire mes Romans et faire un peu de bureautique, dessin (et de dev bien sûr ^^)