Graphics Device Interface (GDI) es uno de los tres componentes o subsistemas de la interfaz de usuario de Microsoft Windows. Trabaja junto con el núcleo y la API de Windows.
Esta interfaz de programación de aplicaciones se encarga del control gráfico de los dispositivos de salida, como los monitores o las impresoras.
Las tareas más comunes de GDI son:
- el dibujo de líneas, curvas, polígonos;
- el relleno de cuadros, círculos, polígonos, etcétera;
- igualmente se encarga del renderizado de fuentes y textos, y,
- el manejo de paletas.
GDI no se encarga del dibujo de los menús, ventanas, etcétera, ya que este es un trabajo especial para el user32.dll
(una biblioteca de la API de Windows exclusiva para estas funciones).
Tal vez, la capacidad más significativa del GDI sobre métodos más directos de acceder al hardware, es la escalabilidad de posibilidades y la abstracción que se puede conseguir con los dispositivos de salida. Usando GDI es muy fácil dibujar en varios dispositivos, como en la pantalla o en una impresora. Esta capacidad es el objetivo principal del WYSIWYG de Microsoft Windows.
La mayoría de los videojuegos simples se pueden crear usando GDI. Sin embargo, no es lo suficientemente poderosa para la creación de videojuegos complejos debido a la falta de sincronización con el framebuffer (encargado de las animaciones) y su obvia incapacidad para la renderización de modelos y objetos 3D. Los videojuegos modernos utilizan DirectX u OpenGL que resuelven estos problemas.
Los objetos más importantes son:
- HDC (Handle to Device Context, “contexto de dispositivo”): que viene a ser el lienzo donde se pinta.
- HBRUSH (Handle to Brush, “brocha”): permite rellenar zonas con colores.
- HPEN (Handle to Pen, “pluma”): que permite el dibujado de líneas o bordes de otros elementos gráficos.
La forma de trabajar es heredada del lenguaje de programación C. Hay que crear y destruir explícitamente los elementos de dibujo, por lo que es muy propenso a fugas de memoria.
Microsoft complementó este sistema de dibujo con otro completamente distinto y basado en C++ denominado GDI+, incluido en todas las versiones de sus sistemas operativos desde Windows XP y Windows Server 2003.[1][2]
Posteriormente se han diseñado sistemas para sustituir GDI y GDI+: Direct2D y DirectWrite, disponibles desde Windows 7 y Windows Server 2008.