OVH Cloud OVH Cloud

Performance DrawImage

4 réponses
Avatar
Pradon
Bonjour !

Je manipule des fichier image relativement volumineux.
Apr=E8s migration VB6 vers VB net ,alors qu'il me fallait 25=20
secondes pour charger une bitmap de 247 ko et entre 2 et=20
15 secondes pour la d=E9placer ou la redimensionner , il me=20
faut maintenant 80 secondes sous VB net , pour la charger,=20
la d=E9placer ou la redimensionner ; c'est inacceptable!
Les fonctions utilis=E9es sont : paintPicture sous VB6 ;=20
drawimage sous Vb net.

J 'ai peine =E0 croire VB net moins performant , je pense ne=20
pas utiliser correctement system.drawing.image .
Merci pour l'aide.

4 réponses

Avatar
Zoury
Ouch!

247ko c'est loin d'être volumineux pour une image.. surtout si c'est un
bitmap.

Je ne sais pas quelle est le traitement que tu effectuais en VB6, mais 25
secondes me semble une éternité... et sache que PaintPicture() est très très
lent.

peux-tu nous montrer tes deux bouts de code (VB 6 et .NET) ?

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
>-----Message d'origine-----
Ouch!

247ko c'est loin d'être volumineux pour une image..


surtout si c'est un
bitmap.

Je ne sais pas quelle est le traitement que tu effectuais


en VB6, mais 25
secondes me semble une éternité... et sache que


PaintPicture() est très très
lent.

peux-tu nous montrer tes deux bouts de code (VB 6



et .NET) ?


Merci :
Je te joins quelques extraits de code

1) code VB6
ecran.Picture = LoadPicture
Form1.Picture1.Picture = LoadPicture(filename)
largeur = Form1.Picture1.Width
hauteur = Form1.Picture1.Height

ici code pour le calcul de kox et koy

ecran.PaintPicture Form1.Picture1.Picture, xoo, yoo,
largeur * kox, hauteur * koy


2) code VB Net

Private Sub ecran_Activated(ByVal sender As Object, ByVal
e As System.EventArgs) Handles MyBase.Activated
Static done As Boolean = False

If Not done Then

b1 = New Bitmap(Width, Height,
Me.CreateGraphics)
g1 = Graphics.FromImage(b1)
fontecran = New Font(Me.Font,
FontStyle.Regular)
done = True
End If
End Sub
'--------------------------------------------------
Private Sub ecran_Paint(ByVal sender As Object, ByVal
e As System.Windows.Forms.PaintEventArgs) Handles
MyBase.Paint
e.Graphics.DrawImage(b1, 0, 0)

End Sub
'-----------------------------------------------------
Form1.DefInstance.Picture1.Image =
System.Drawing.Image.FromFile(filename)
' Dim fondDePlan As Image
fondDePlan = Form1.DefInstance.Picture1.Image



c'est la réalisation de cette ligne qui prend tant de
temps !

g1.DrawImage(FondDePlan, xoox, yoox, largeurx, hauteurx)

après ,l'ecran est mis à jour,c'est immédiat

Public Sub miseAJourEcran()
Me.CreateGraphics.DrawImage(b1, 0, 0)
End Sub






--
Cordialement
Yanick
MVP pour Visual Basic


.



Avatar
COPS
Si tu veux traiter tes images le plus rapidement possible, il faut utiliser
les Pointeurs via C# (cela permet d'aller jusqu'a 20x + vite qu'avec du "bon"
code VB.NET.

A+

"" wrote:


>-----Message d'origine-----
>Ouch!
>
>247ko c'est loin d'être volumineux pour une image..
surtout si c'est un
>bitmap.
>
>Je ne sais pas quelle est le traitement que tu effectuais
en VB6, mais 25
>secondes me semble une éternité... et sache que
PaintPicture() est très très
>lent.
>
>peux-tu nous montrer tes deux bouts de code (VB 6

et .NET) ?


Merci :
Je te joins quelques extraits de code

1) code VB6
ecran.Picture = LoadPicture
Form1.Picture1.Picture = LoadPicture(filename)
largeur = Form1.Picture1.Width
hauteur = Form1.Picture1.Height

ici code pour le calcul de kox et koy

ecran.PaintPicture Form1.Picture1.Picture, xoo, yoo,
largeur * kox, hauteur * koy


2) code VB Net

Private Sub ecran_Activated(ByVal sender As Object, ByVal
e As System.EventArgs) Handles MyBase.Activated
Static done As Boolean = False

If Not done Then

b1 = New Bitmap(Width, Height,
Me.CreateGraphics)
g1 = Graphics.FromImage(b1)
fontecran = New Font(Me.Font,
FontStyle.Regular)
done = True
End If
End Sub
'--------------------------------------------------
Private Sub ecran_Paint(ByVal sender As Object, ByVal
e As System.Windows.Forms.PaintEventArgs) Handles
MyBase.Paint
e.Graphics.DrawImage(b1, 0, 0)

End Sub
'-----------------------------------------------------
Form1.DefInstance.Picture1.Image =
System.Drawing.Image.FromFile(filename)
' Dim fondDePlan As Image
fondDePlan = Form1.DefInstance.Picture1.Image



c'est la réalisation de cette ligne qui prend tant de
temps !

g1.DrawImage(FondDePlan, xoox, yoox, largeurx, hauteurx)

après ,l'ecran est mis à jour,c'est immédiat

Public Sub miseAJourEcran()
Me.CreateGraphics.DrawImage(b1, 0, 0)
End Sub





>
>--
>Cordialement
>Yanick
>MVP pour Visual Basic
>
>
>.
>



Avatar
>-----Message d'origine-----
Si tu veux traiter tes images le plus rapidement


possible, il faut utiliser
les Pointeurs via C# (cela permet d'aller jusqu'a 20x +


vite qu'avec du "bon"
code VB.NET.




Merci ;mais je recherche plus la simplicité que la
performance, et le C me fait peur. Tout de même! VB net
ne pas être moins performant que Vb6 pour une chose aussi
simple que le chargement et la manipulation
d'images.j'espère encore une solution vbnet.

Merci quand même !peut être devrais-je suivre tes conseils?