Rapidité graphique, DrawImage ou DrawString ?

taouale2 Messages postés 24 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 4 février 2010 - 16 juin 2008 à 23:53
taouale2 Messages postés 24 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 4 février 2010 - 18 juin 2008 à 10:46
Bonjour, je suis en train de réaliser une application graphique en VB.NET sur PDA (WM5) qui doit tourner rapidement (25hz pour le rafraichissement). Je dois afficher quelques cercles et quelques traits, ainsi que du texte dans une police spécifique.
Mon problème est que lorsque je me contente d'afficher des traits et des cercles, je respecte largement la fréquence de rafraichissement à 25hz, mais dès que je fait du drawstring, je tombe à 15hz ...
Ma question est la suivante : si je crée une image pour chaque caractère de la police (principalement des chiffres), serait il plus rapide d'afficher ces images via drawimage plutot que d'utiliser drawstring ? Ou existe t'il une autre solution plus rapide ?
D'avance merci de votre aide

5 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 juin 2008 à 10:07
Bonjour

Regarde plutot du coté de Direct Draw (DirectX), c'est plus adapter pour ce genre de boulot.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
0
taouale2 Messages postés 24 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 4 février 2010
17 juin 2008 à 11:13
Merci de ta réponse, je regarde ça.
0
taouale2 Messages postés 24 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 4 février 2010
17 juin 2008 à 23:34
Aïe ... "DirectX Mobile 5.0 ne contient pas DirectDraw, donc pour faire de la 2D, vous n'avez pas le choix il faut passer par Direct3D." (source). Et là ça se corse ...
Mais peut etre y-a t'il ne possibilité d'optimiser mon code (je ne suis qu'amateur).Voici un bout de mon code, ce sera plus clair :

PublicClass Form1
    Dim objBitMap
 
    PrivateSub Form1_Load(ByVal sender AsObject, ByVal e As System.EventArgs)HandlesMyBase.Load
        objBitMap = New Bitmap(Pic_Temp.Image)'je crée un bitmap une seule fois au démarrage à partir d'une image contenue dans un picturebox
    EndSub
 
    PrivateSub Tmr_General_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Tmr_General.Tick
        Dim objGraphics As Graphics
        Dim MaFont As Font
        Dim MaBrush As Brush
        objGraphics = Graphics.FromImage(objBitMap)
        objGraphics.Clear(Color.Black)
        objGraphics.DrawImage(Pic_Temp.Image, 0, 0)'pic_temp est une picturebox contenant une image utilisée pour le fond
        MaFont = New Font("DS-Digital", 75, FontStyle.Italic)
        MaBrush = New SolidBrush(Color.LimeGreen)
        objGraphics.DrawString("toto", MaFont, MaBrush, 0, 0)
        Me.Pic_Tdb.Image = objBitMap 'je met objbitmap comme image dans ma picturebox de destination
        objGraphics.Dispose()
        MaFont .Dispose()
        MaBrush .Dispose()
        objGraphics = Nothing
    EndSub
EndClass

C'est très schématisé, j'affiche un tas de données en réalité.
Qu'en pensez vous ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
18 juin 2008 à 10:13
Bonjour

Scuse, j'avais pas vu que tu était sur embarqué....
Bin fatalement, ce ne sont pas non plus des équipements pour faire du graphisme haute définition rapide ....

Ma proposition tenait pour du fixe ou PC portable, mais pas embarqué.

N'ayant pas assez d'expérience dans ce domaine, je ne saurais te conseiller au mieux. Dsl.

Si tu peux, essaye plutot de dessiner directement sur le conteneur au lieu d'un bitmap, tu gagneras un peu peut être (avec un clignotement éventuellement).

Dsl.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
taouale2 Messages postés 24 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 4 février 2010
18 juin 2008 à 10:46
Bonjour, ne t'excuse pas ! c'est déjà sympa de m'avoir répondu . Et en plus ça m'a donné une piste : direct3d ... en fait, ça revient à traiter le problème comme un jeu. Mais effectivement, ça se corse parce que l'approche change pas mal. Je cherchais une solution simple, mais s'il n'y a pas le choix je vais m'y mettre ...
Mais avant, je vais tester la solution de dessiner dans un conteneur, c'est une bonne idée.
Je posterai mes résultats de toute façon.
S'il y a d'autres idées, je reste preneur !
0
Rejoignez-nous