c# Autre méthode de Drawing

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

[A]pokah.

Membre d'Honneur
V
Jan 25, 2012
2,012
3
944
27
Derrière toi !
Discord
Apokah#8011
Bonjour.

Je suis entrain d'essayer de Draw une Bitmap de (2116x1650), c'étais (8400x6500) au début et je l'es réduis parce que ça prenait quasiment 600 Mb de mémoire...

Bon mon problème c'est que je cherche une autre méthode pour Draw & Update que celle là :

"Load"
Code:
Img = new Bitmap(2116, 1650);
G = Graphics.FromImage(Img);
new Thread(DrawAll).Start();
"DrawAll"
Code:
while (!pictureBox1.IsDisposed)
            {
                pictureBox1.Image = Img;

                G.Clear(Color.Transparent);

                // Mes Drawins (Rectangles, bla bla)
            }

Ceci marche parfaitement, si je changes une valeur dans mes rectangles, la picturebox se met à jour en prenant charge les nouvelles modifs et en supprimant l'ancien drawings. Je combine ceci avec une BackGroundImage pour que ça sois complet.


Le problème, c'est que ceci utilise 19% d'UC d'un Processeur i7-4700MQ 2.40 GHz, je suis sûr ça serait encore plus dans d'autre processeurs... (sachant que 30% chez moi, c'est 90% chez un pote xD).

Du coup je voudrais savoir si il existe une autre méthode pour Draw & Update dans une PictureBox1.

En Disant "Draw & Update", Genre je draw, et quand je change une valeur, ça change le Drawing en supprimant les anciens.
Genre un Rectangle était dans X:0,Y:0. J'le met à X:1,Y:0 l'ancien Rectangle(0,0) se supprime et le nouveau (1,0) se Draw.

Merci, j'espère être bien claire :p
 

ragnarock

Membre actif
Mar 22, 2010
194
0
917
Salut, OpenGL c'est pas la peine, si ça pompe autant de mémoire avec GDI+ juste avec un bitmap dans un picturebox, c'est qu'il y a un problème dans ton code.

Si tu m'envoies ton projet, je jette volontiers un oeil.
 

[A]pokah.

Membre d'Honneur
V
Jan 25, 2012
2,012
3
944
27
Derrière toi !
Discord
Apokah#8011
Tu as Skype ? Si oui, passe le en message privé s'il te plait.
Si non, je t'envoie le code par Message Privé.
 
Jul 5, 2010
3,543
0
601
Le format bitmap est vraiment lourd puisque il ne compresse pas l'information. Tu ne peut utiliser des bitmap que pour des toutes petites images.
Ici, tu dois charger une image png. Tu auras déjà moins de problèmes.

Sans parler de consommation mémoire (qui sera de toute façon énorme si tu charge toute ton image en mémoire), tu peux forcer l'invalidation d'une sous-zone d'un élément en WinForm.
Aussi, au lieu d'invalider l'intégralité de ton image et de tout redessiner, invalide uniquement les zones qui changent pour ne redessiner que les parties changeantes.
Çà se rapproche un peu de ce que tu dis dans ta suggestion : Ton rectangle de taille 20/20, placé à 0/0 se trouve maintenant à 1/0. Alors, tu invalideras uniquement la région X=0/Y=0/W=21/H=20 et tu n'auras que cette portion de ton image à redessiner...Bien plus rapide que redessiner l'intégralité d'une image en 8400*6500.
 
Status
Not open for further replies.