2009-07-09 18 views
8

Cuando salió GDI +, recuerdo todo el alboroto sobre cómo era la forma "nueva, más rápida, mejor" de mostrar cosas en Windows. Pero cada vez que lo miraba, me parecía que realmente era solo un envoltorio COM alrededor de GDI.¿GDI + es solo una capa encima de GDI, o algo nuevo?

¿Es eso cierto? ¿O es realmente GDI + una biblioteca gráfica independiente que simplemente comparte algunos paradigmas con GDI?

Personalmente, no estoy seguro de cómo podría ser independiente, pero nunca vi una declaración definitiva de una manera u otra.

Respuesta

7

Muchas funciones de GDI se aceleran con el hardware de gráficos, y algunas rutinas de GDI + pueden usar GDI debajo. Pero la mayoría de GDI + es independiente de GDI.

Un ejemplo importante y revelador es la representación de texto. En GDI + la renderización de texto se realiza completamente en software; el anti-aliasing, glyph pixel-fitting y otros efectos se realizan sin la tarjeta de video.

alt text http://i.msdn.microsoft.com/ms533818.fontstext10(en-us,VS.85).png

Chris Jackson de Microsoft tenía una entrada en el blog interesante en el que perfila la speed difference between text rendering in GDI and GDI+:

... mi ruta de código GDI rendía aproximadamente 99.000 glifos por segundos, mientras mi GDI + código la ruta era y representaba aproximadamente 16,000 glifos por segundo.

Otro ejemplo es el dibujo de líneas.GDI + es compatible con suavizado de línea/polígono y el círculo/elipse dibujo, mientras que GDI no:

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art33(en-us,VS.85).pngalt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art34(en-us,VS.85).png

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art36(en-us,VS.85).png

+3

Pero para responder a su pregunta más directa: GDI + es completamente nuevo. Esto realmente se convierte en un problema ya que es más lento que GDI (es decir, no es acelerado por hardware), y la representación del texto es diferente a GDI (lo que lleva a un texto que puede verse diferente en diferentes partes de una aplicación .NET). No es un contenedor COM alrededor de GDI, de hecho ni siquiera es COM. Es plano C api. Microsoft creó un conjunto de clases de C++ que simplifican la llamada a las funciones planas. 'System.Drawing' en .NET es un conjunto de clases que también llaman a las funciones planas. –

9

GDI + está construido sobre GDI y agrega varias características más. Por ejemplo, GDI + agrega soporte para transparencia, suavizado de mapa de bits anti-aliasing, etc.

GDI + es principalmente una API basada en objeto, y GDI es una API de función. La mayoría de las funcionalidades en GDI + no están optimizadas por hardware (las maneja el software), para contrastar con GDI. Por ejemplo, en GDI, BitBlt es manejado directamente por hardware. Las funciones de pintura GDI + bitmap no lo son.

GDI + es una poderosa API, pero tenga cuidado con su rendimiento.

GDI + está disponible en C++, COM y .NET

8

GDI + no es COM. GDI + tiene una API "plana" subyacente que se puede llamar desde C (o cualquier otro idioma, por lo tanto), y un contenedor orientado a objetos en C++ que simplemente llama a la API plana. También hay contenedores en .NET (System.Drawing) y Delphi que también llaman a la API plana. Funciona completamente diferente de GDI en el sentido de que no establece objetos (bolígrafos, pinceles, fuentes) en el contexto de un dispositivo, sino que los pasa a funciones de dibujo. No tiene mucho en común con GDI. Aunque no sé si la implementación de GDI + usa GDI, pero probablemente no, porque tiene muchas características que simplemente no están disponibles en GDI.

Desafortunadamente, es más lento que GDI. Sin embargo es muy poderoso.

Como decasteljau señaló mientras tanto, los problemas de rendimiento pueden provenir del hecho de que no se procesa en hardware, a diferencia de OpenVG o WPF. Recientemente utilicé XNA por eso para una aplicación gráfica en tiempo real.

Cuestiones relacionadas