Articulo de referencia

Interfaz de dispositivo gráfico

La interfaz de dispositivo gráfico en la arquitectura de Windows NT Por ejemplo, GDK utiliza GDI. La Interfaz de Dispositivos Gráficos ( GDI ) es un componente heredado de Micro...

La interfaz de dispositivo gráfico en la arquitectura de Windows NT
Por ejemplo, GDK utiliza GDI.

La Interfaz de Dispositivos Gráficos ( GDI ) es un componente heredado de Microsoft Windows responsable de representar objetos gráficos y transmitirlos a dispositivos de salida como monitores e impresoras . Fue reemplazada por la API DirectDraw y, posteriormente, por la API Direct2D . Las aplicaciones de Windows utilizan la API de Windows para interactuar con GDI, para tareas como dibujar líneas y curvas, renderizar fuentes y gestionar paletas . El subsistema USER de Windows utiliza GDI para renderizar elementos de la interfaz de usuario como marcos de ventanas y menús. Otros sistemas tienen componentes similares a GDI; por ejemplo, macOS tenía QuickDraw , y Linux y Unix tienen el protocolo central del Sistema X Window .

Las ventajas más significativas de GDI sobre los métodos de acceso directo al hardware residen, quizás, en su capacidad de escalado y su representación abstracta de los dispositivos de destino. Con GDI, es posible dibujar en varios dispositivos, como una pantalla y una impresora, y obtener una reproducción correcta en cada caso. Esta capacidad es fundamental para la mayoría de las aplicaciones WYSIWYG ( lo que ves es lo que obtienes ) de Microsoft Windows.

Los juegos sencillos que no requieren una renderización gráfica rápida pueden usar GDI. Sin embargo, GDI es relativamente difícil de usar para animaciones avanzadas, carece de un mecanismo para sincronizarse con los fotogramas de vídeo individuales en la tarjeta gráfica y no cuenta con rasterización por hardware para 3D. Los juegos modernos suelen usar Direct3D , Vulkan u OpenGL en su lugar.

Detalles técnicos

En GDI, un contexto de dispositivo (DC) define los atributos de texto e imágenes para el dispositivo de salida, por ejemplo, una pantalla o una impresora. GDI mantiene el contexto actual. Para generar la salida se requiere un identificador del contexto de dispositivo (HDC). Una vez generada la salida, se puede liberar dicho identificador.

GDI utiliza el algoritmo de dibujo de líneas de Bresenham para dibujar líneas con alias. [ 1 ]

Historial de versiones

Versiones tempranas

GDI estaba presente en la versión inicial de Windows. Los programas de MS-DOS manipulaban el hardware gráfico mediante interrupciones de software (a veces a través de la BIOS de vídeo ) y manipulando directamente la memoria de vídeo . El código escrito de esta manera presupone que es el único usuario de la memoria de vídeo, lo cual no era viable en un entorno multitarea como Windows. La revista BYTE , en diciembre de 1983, habló sobre los planes de Microsoft para un sistema que permitiera enviar gráficos tanto a impresoras como a monitores con el mismo código en la próxima primera versión de Windows. [ 2 ]

En Windows 3.1x y Windows 9x , GDI puede usar funciones de transferencia de bits para la aceleración 2D, si se instala un controlador de tarjeta gráfica adecuado. [ 3 ]

Desde Windows NT 4.0 , el GDI de Windows NT se ejecutaba en modo kernel ; [ 4 ] pero desde Windows Vista , el DWM se ejecuta en modo usuario .

Windows XP

Con la introducción de Windows XP , GDI+ complementó a GDI. GDI+ fue escrito en C++. Agrega gráficos 2D suavizados, coordenadas de punto flotante, sombreado de gradiente, administración de rutas más compleja, soporte intrínseco para formatos de archivo de gráficos modernos como JPEG y PNG , y soporte para la composición de transformaciones afines en la canalización de vista 2D. GDI+ usa valores RGBA para representar el color. El uso de estas características es evidente en componentes de Windows XP, como Microsoft Paint , el Visor de imágenes y fax de Windows , el Asistente para impresión de fotos y el protector de pantalla Presentación de diapositivas de Mis imágenes. Su presencia en la capa gráfica básica simplifica enormemente las implementaciones de sistemas de gráficos vectoriales como Adobe Flash o SVG . Además, .NET Framework proporciona una interfaz administrada para GDI+ a través del System.Drawingespacio de nombres .

Aunque GDI+ está incluido en Windows XP y versiones posteriores, la biblioteca dinámica GDI+ también puede distribuirse con una aplicación y utilizarse en versiones anteriores de Windows. [ 5 ]

Debido a las capacidades adicionales de procesamiento de texto e independencia de resolución en GDI+, la CPU se encarga de la representación del texto. [ 6 ] El resultado es un orden de magnitud más lento que GDI acelerado por hardware . [ 7 ] Chris Jackson publicó algunas pruebas que indicaban que un fragmento de código de representación de texto que había escrito podía representar 99 000 glifos por segundo en GDI, pero el mismo código usando GDI+ representaba 16 600 glifos por segundo.

GDI+ es similar (en propósito y estructura) al subsistema QuickDraw GX de Apple , y a las bibliotecas de código abierto libart y cairo .

Windows Vista

En Windows Vista, todas las aplicaciones de Windows, incluidas las aplicaciones GDI y GDI+, se ejecutan en el nuevo motor de composición, el Administrador de ventanas de escritorio (DWM), que está acelerado por hardware de la GPU. Por lo tanto, el propio GDI ya no está acelerado por hardware. [ 8 ] [ 9 ] [ 10 ] Debido a la naturaleza de las operaciones de composición, los movimientos de ventana pueden ser más rápidos o más receptivos porque la aplicación no necesita volver a renderizar el contenido subyacente. [ 9 ]

Windows 7

Windows 7 incluye aceleración de hardware GDI para operaciones de blitting en el modelo de controlador de pantalla de Windows v1.1 . Esto mejora el rendimiento de GDI y permite que DWM utilice la memoria de vídeo local para la composición, reduciendo así el consumo de memoria del sistema y aumentando el rendimiento de las operaciones gráficas. La mayoría de las operaciones GDI primitivas aún no cuentan con aceleración de hardware, a diferencia de Direct2D . GDI+ sigue dependiendo de la renderización por software en Windows 7. [ 11 ]

Impresoras GDI

Una impresora GDI o Winprinter (análoga a un Winmodem ) es una impresora diseñada para aceptar la salida de una computadora host con Windows, que realiza todo el procesamiento de impresión: GDI renderiza una página como un mapa de bits, que el controlador de impresora de la computadora recibe, procesa y envía a la impresora asociada. [ 12 ] [ 13 ] La comunicación entre el GDI y el controlador de la computadora, y la impresora, es bidireccional; la impresora le indica a la computadora si está lista para imprimir o si está fuera de línea, sin papel, etc.

Una impresora con su propio lenguaje de control puede aceptar la entrada de cualquier dispositivo con un controlador adecuado, sin necesidad de un PC con Windows. Dicha impresora requiere hardware, firmware y memoria para la representación de la página, tarea que normalmente realiza la interfaz GDI del ordenador con Windows. Las impresoras GDI pueden estar disponibles para ordenadores en una red si están conectadas como impresoras compartidas en un ordenador con Windows. Se pnm2ppahan escrito algunos controladores GDI "genéricos", cuyo objetivo es hacer que las impresoras GDI sean compatibles con sistemas operativos distintos de Windows, como FreeBSD , pero no son compatibles con todas las impresoras. [ 12 ]

Para facilitar la generación de controladores para impresoras Winprinter, Microsoft desarrolló el Controlador Universal de Impresora . Esto permite a los fabricantes de impresoras escribir "minicontroladores" de Descripción Genérica de Impresora (GPD, por sus siglas en inglés) que describen las capacidades y el conjunto de comandos de la impresora en texto plano, sin necesidad de programación en modo kernel.

Microsoft se ha alejado del modelo de impresión GDI con la especificación Open XML Paper Specification .

Limitaciones

Cada ventana consume objetos GDI. A medida que aumenta la complejidad de la ventana, con características adicionales como botones e imágenes, su uso de objetos GDI también aumenta. Cuando se utilizan demasiados objetos, Windows no puede dibujar más objetos GDI, lo que provoca un mal funcionamiento del software y un funcionamiento del programa bloqueado y sin respuesta. [ 14 ] Muchas aplicaciones también están codificadas incorrectamente y no liberan los objetos GDI después de su uso, lo que agrava aún más el problema. [ 15 ] El total de objetos GDI disponibles varía de una versión de Windows a otra: Windows 9x tenía un límite de 1200 objetos en total; Windows 2000 tiene un límite de 16 384 objetos; y Windows XP y posteriores tienen un límite configurable (a través del registro) que por defecto es de 10 000 objetos por proceso (pero un máximo teórico de 65 536 para toda la sesión). [ 16 ] [ 17 ] Windows 8 y posteriores aumentan el límite de objetos GDI a 65 536 por sesión de inicio de sesión de usuario.

Las versiones anteriores de Windows, como Windows 3.1 y Windows 98, incluían un programa de medición de recursos que permitía al usuario supervisar el uso de los recursos GDI del sistema. Este medidor de recursos consumía objetos GDI. Las versiones posteriores, como Windows 2000 y Windows XP, pueden informar sobre el uso de objetos GDI de cada programa en el Administrador de tareas, pero no pueden indicar al usuario la capacidad total de GDI disponible.

El desbordamiento de la capacidad de GDI puede afectar al propio Windows, impidiendo que se abran nuevas ventanas, se muestren los menús y aparezcan los cuadros de alerta. Esta situación puede ser difícil de solucionar y, en ocasiones, requerir un reinicio forzado del sistema, ya que impide el funcionamiento de los programas esenciales. En Windows 8 y 8.1, el desbordamiento de la capacidad de GDI provoca un cierre de sesión forzado en lugar de un reinicio.

Sucesor

Direct2D es el sucesor de GDI y GDI+. Su hermano, DirectWrite , reemplaza a Uniscribe . Se incluyeron en Windows 7 y Windows Server 2008 R2, y estuvieron disponibles para Windows Vista y Windows Server 2008 (con la Actualización de plataforma instalada). Posteriormente, Microsoft desarrolló Win2D , una biblioteca de clases gratuita y de código abierto similar a GDI. El público objetivo de Win2D son los desarrolladores que utilizan C++, C# y Visual Basic.NET para desarrollar aplicaciones de la Plataforma universal de Windows . [ 18 ]

Véase también

Notas y referencias

  1. Steven, White; David, Coulter; Mike, Jacobs (31 de mayo de 2018). "Comparación de la aceleración de hardware Direct2D y GDI" . Windows Developer . Microsoft .
  2. Butler, John (diciembre de 1983). "Salida gráfica independiente del dispositivo para Microsoft Windows" . BYTE . pág. 49. Consultado el 20 de octubre de 2013 . 
  3. "CL-GD543X Applications and Errata Book - Revision 1.2" (PDF) . Cirrus Logic . Abril de 1994. Consultado el 4 de enero de 2025 .
  4. "Ataques al núcleo mediante devoluciones de llamada en modo usuario" (PDF) . Archivado del original (PDF) el 19 de enero de 2012.
  5. SDK de plataforma redistribuible: GDI+
  6. "API de dibujo 2D en Windows -" . Blog para desarrolladores de DirectX . Blogs de MSDN. 12 de mayo de 2009. Consultado el 19 de julio de 2012 .
  7. Jackson, Chris. "Rendimiento de la representación de texto de GDI vs. GDI+" . Consonancia semántica de Chris Jackson . Microsoft.
  8. MSDN: Comparación de la aceleración de hardware Direct2D y GDI
  9. 1 2 GDI no está acelerado por hardware en Windows Vista
  10. Ventanas en capas... El software a veces es más rápido que el hardware . Avalite en los blogs de MSDN.
  11. Thomas Olsen (29 de octubre de 2008). "Presentación de la API Direct2D de Microsoft" .
  12. 1 2 "Impresora GDI genérica" . Impresión abierta . The Linux Foundation . Consultado el 21 de julio de 2021 .
  13. "Impresoras exclusivas para Windows" . Proyecto de Documentación de Linux . Consultado el 29 de octubre de 2019 .
  14. Artículo 838283 de la base de conocimientos de Microsoft: Los menús de las aplicaciones de escritorio se muestran incorrectamente si un proceso supera su cuota de objetos GDI en Windows XP o Windows 2000 http://support.microsoft.com/kb/838283
  15. Blog de Microsoft Developer Network: Una fuga de memoria GDI en Outlook 2007 causa problemas cuando el uso de GDI alcanza los 10 000 objetos https://blogs.msdn.com/rgregg/archive/2007/09/03/outlook-2007-gdi-leak-hotfix.aspx
  16. Red de desarrolladores de Microsoft - Límites de objetos GDI https://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
  17. Artículo 894500 de la base de conocimientos de Microsoft: Los programas .NET diseñados para sistemas operativos NT más recientes pueden presentar fallos en sistemas operativos Win 95 / Win 98 / Win ME más antiguos debido a límites de uso de GDI más bajos. http://support.microsoft.com/kb/894500
  18. "Win2D" . Repositorio microsoft/Win2D . Microsoft . Consultado el 21 de julio de 2021 a través de GitHub.com .
  • Página de GDI+ de Microsoft
  • Lista de preguntas frecuentes sobre GDI+ de Bob Powell en Wayback Machine (archivada el 20 de abril de 2015)
  • Artículo de MSDN sobre la descripción general de GDI
  • Boletín de seguridad de Microsoft MS04-028
  • Una vulnerabilidad crítica en MS Windows podría agravar la amenaza de virus - F-Secure en Wayback Machine (archivado el 4 de febrero de 2009)
  • IGDI+ : biblioteca Delphi de código abierto para GDI+.