Cómo aumentar el rendimiento en DrawImage de GDI (sin escala)?
-
24-09-2019 - |
Pregunta
En manejador de pintura de mi control de usuario que iterar sobre una colección de objetos de mapa de bits predefinidos y les señalará a la área de cliente de esta manera:
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 empieza a atascan cuando se añaden una docena de objetos de la colección. Mi pregunta es: ¿Hay una manera de acelerar este proceso? ¿Sería posible utilizar 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 ha cedido mi examinar muestras de capitalización hasta el momento ...
Solución
Demasiado tarde, pero posiblemente alguien todavía necesita una solución.
He creado una pequeña biblioteca con GLGDI + + sintaxis similar GDI, 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 (problema TextPrint de OpenTK). Pero si necesita aumentar el rendimiento de su utilidad (como editor de niveles en mi caso) puede ser la solución.