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 ...

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top