Comment augmenter les performances sur DrawImage de GDI (Unscaled)?
-
24-09-2019 - |
Question
J'itérer sur Dans mon gestionnaire d'peinture de contrôle utilisateur une collection d'objets prédéfinis Bitmap et les attirer vers la zone client ainsi:
Version C #:
private void Control_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
foreach (BitmapObj bmpObj in _bitmapObjCollection) {
g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location);
}
}
Version VB.NET:
Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics = e.Graphics
For Each bmpObj As BitmapObj In _bitmapObjCollection
g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location)
Next
End Sub
Le code fonctionne très bien mais commence à s'enliser quand une dizaine d'objets sont ajoutés à la collection. Ma question est: Est-il un moyen d'accélérer ce? Serait-il possible d'utiliser la fonction BitBlt Win32 pour remplacer DrawImageUnscaled? Et si oui, comment?
Merci!
Note: recherche sur Google pour useage de BitBlt ne m'a donné des échantillons de cap écran jusqu'à présent ...
La solution
Trop tard, mais peut-être quelqu'un encore besoin d'une solution.
J'ai créé une petite bibliothèque GLGDI + avec GDI + syntaxe similaire, qui fonctionne sur OpenTK: http://code.google.com/p/glgdiplus/
Je ne suis pas sûr de la stabilité, il a quelques problèmes avec DrawString (problème avec TextPrint de OpenTK). Mais si vous avez besoin gain de performances pour votre utilitaire (comme éditeur de niveau dans mon cas), il peut être une solution.