2010-04-06 14 views
5

En manejador de pintura de mi control de usuario que iterar sobre una colección de objetos de mapa de bits predefinidos y atraerlos hacia el área de cliente de esta manera:¿Cómo aumentar el rendimiento sobre DrawImage de GDI (sin escala)?

C# versión:

private void Control_Paint(object sender, PaintEventArgs e) { 
    Graphics g = e.Graphics; 
    foreach (BitmapObj bmpObj in _bitmapObjCollection) { 
     g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location); 
    } 
} 

versión 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 

El código funciona bien pero comienza a atascarse cuando se agregan una docena de objetos a la colección. Mi pregunta es: ¿hay alguna manera de acelerar esto? ¿Sería posible usar la función Bitblt Win32 para reemplazar DrawImageUnscaled? Y si es así, ¿cómo?

Gracias!

Nota: buscar en Google, para uso de BitBlt sólo me ha dado muestras de tapa de la pantalla hasta el momento ...

+0

ping atrás @ http://stackoverflow.com/questions/264720/gdi-graphicsdrawimage-really-slow – dankyy1

Respuesta

6

demasiado tarde, pero posiblemente alguien todavía necesita una solución.

He creado una pequeña biblioteca GLGDI con GDI + + sintaxis similar, que se ejecutan en OpenTK: http://code.google.com/p/glgdiplus/

No estoy seguro acerca de la estabilidad, que tiene algunos problemas con el lazo (problemas con TextPrint de OpenTK). Pero si necesita aumentar el rendimiento de su utilidad (como el editor de niveles en mi caso) puede ser una solución.

+0

Muy interesante. Le daré un vistazo. Gracias. –

Cuestiones relacionadas