stringtranslate.com

Interfaz del dispositivo gráfico

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

La interfaz de dispositivo gráfico ( 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 DirectDraw API y posteriormente Direct2D API. [ cita necesaria ] Las aplicaciones de Windows utilizan la API de Windows para interactuar con GDI, para tareas como dibujar líneas y curvas, representar fuentes y manejar paletas . El subsistema USER de Windows utiliza GDI para representar elementos de la interfaz de usuario como marcos de ventanas y menús. Otros sistemas tienen componentes similares a GDI; por ejemplo: Mac OS tiene QuickDraw y Linux y Unix tienen el protocolo central del sistema X Window .

Las ventajas más significativas de GDI sobre métodos más directos de acceso al hardware son quizás sus capacidades de escalamiento y su representación abstracta de los dispositivos de destino. Usando GDI, es posible dibujar en múltiples dispositivos, como una pantalla y una impresora, y esperar una reproducción adecuada en cada caso. Esta capacidad está en el centro de la mayoría de las aplicaciones " Lo que ves es lo que obtienes " para Microsoft Windows.

Los juegos simples que no requieren una representación gráfica rápida pueden usar GDI. Sin embargo, GDI es relativamente difícil de usar para animación avanzada, carece de noción para sincronizar cuadros de video individuales en la tarjeta de video y carece de rasterización de hardware para 3D. Los juegos modernos suelen utilizar DirectX , Vulkan u OpenGL .

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, pantalla o impresora. GDI mantiene el contexto actual. Generar la salida requiere un identificador del contexto del dispositivo (HDC). Después de generar la salida, se podría soltar el mango.

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

Historial de versiones

Versiones tempranas

GDI estuvo presente en la versión inicial de Windows. Los programas MS-DOS habían manipulado el hardware de gráficos mediante interrupciones de software (a veces a través del Video BIOS ) y manipulando la memoria de video directamente. El código escrito de esta manera espera que sea el único usuario de la memoria de vídeo, lo que no era sostenible en un entorno multitarea , como Windows. La revista BYTE , de diciembre de 1983, analizó los planes de Microsoft para un sistema que generara gráficos tanto en impresoras como en 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 Bit blit para aceleración 2D, si está instalado el controlador de tarjeta gráfica adecuado. [3]

Windows XP

Con la introducción de Windows XP , GDI+ complementó a GDI. GDI+ ha sido escrito en C++. Agrega gráficos 2D suavizados, coordenadas de punto flotante, sombreado degradado, administración de rutas más compleja, soporte intrínseco para formatos de archivos gráficos modernos como JPEG y PNG , y soporte para la composición de transformaciones afines en el canal de vista 2D. GDI+ utiliza valores RGBA para representar el color. El uso de estas funciones es evidente en los componentes de Windows XP, como Microsoft Paint , el Visor de imágenes y faxes de Windows , el Asistente de impresión de fotografías y el protector de pantalla Mis imágenes. Su presencia en la capa de gráficos 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.Drawing espacio de nombres .

Si bien GDI+ se incluye con Windows XP y versiones posteriores, la biblioteca dinámica GDI+ también puede enviarse con una aplicación y usarse en versiones anteriores de Windows. [4]

Debido a las capacidades adicionales de procesamiento de texto e independencia de resolución en GDI+, la CPU realiza la representación de texto. [5] El resultado es un orden de magnitud más lento que el GDI acelerado por hardware . [6] 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, Desktop Window Manager (DWM), que se acelera por hardware. Como tal, el GDI en sí ya no está acelerado por hardware. [7] [8] [9] Debido a la naturaleza de las operaciones de composición, los movimientos de ventanas pueden ser más rápidos o con mayor capacidad de respuesta porque la aplicación no necesita volver a representar el contenido subyacente. [8]

ventana 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 uso de memoria del sistema y aumentando el rendimiento de las operaciones gráficas. La mayoría de las operaciones GDI primitivas todavía no están aceleradas por hardware, a diferencia de Direct2D . GDI+ sigue dependiendo de la representación por software en Windows 7. [10]

impresoras GDI

Una impresora GDI o Winprinter (análoga a un Winmodem ) es una impresora diseñada para aceptar resultados desde una computadora host que ejecuta Windows. La computadora host realiza todo el procesamiento de impresión: GDI representa una página como un mapa de bits, que el controlador de la impresora recibe, procesa y envía a la impresora asociada. [11] [12] La combinación de GDI y el controlador es bidireccional; reciben información de la impresora, como si está lista para imprimir o si se ha quedado sin papel.

Las impresoras que no dependen de GDI requieren hardware, firmware y memoria para la representación de páginas, mientras que una impresora GDI utiliza la computadora host para esto. Sin embargo, una impresora con su propio lenguaje de control puede aceptar entradas de cualquier dispositivo con un controlador adecuado, mientras que una impresora GDI requiere una PC con Windows. Las impresoras GDI pueden estar disponibles para las computadoras en una red si están conectadas como impresoras compartidas en una computadora que ejecuta Windows. pnm2ppaSe han escrito algunos controladores GDI "genéricos" como los ; Su objetivo es hacer que las impresoras GDI sean compatibles con sistemas operativos distintos de Windows, como FreeBSD , pero no pueden admitir todas las impresoras. [11]

Para permitir una creación más sencilla de controladores para Winprinters, se creó el controlador de impresora universal de Microsoft . Esto permite a los proveedores de impresoras escribir "minicontroladores" de descripción genérica de impresora (GPD), que describen las capacidades de la impresora y el conjunto de comandos en texto sin formato, en lugar de tener que desarrollar controladores en modo kernel.

Microsoft se ha alejado de este modelo de impresión con Open XML Paper Especificación .

Limitaciones

Cada ventana consume objetos GDI. A medida que aumenta la complejidad de la ventana, con funciones adicionales como botones e imágenes, también aumenta el uso de objetos GDI. Cuando se utilizan demasiados objetos, Windows no puede dibujar más objetos GDI, lo que provoca un mal comportamiento del software y una operación del programa congelada y que no responde. [13] Muchas aplicaciones también están codificadas incorrectamente y no liberan objetos GDI después de su uso, lo que agrava aún más el problema. [14] El total de objetos GDI disponibles varía de una versión de Windows a la siguiente: Windows 9x tenía un límite de 1200 objetos totales; 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 10.000 objetos por proceso (pero un máximo teórico de 65.536 para toda la sesión). [15] [16] Windows 8 y versiones 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 medidor de recursos para permitir al usuario monitorear cuántos recursos GDI totales del sistema estaban en uso. Este medidor de recursos consumía objetos GDI. Las versiones posteriores, como Windows 2000 y Windows XP, pueden informar el uso de objetos GDI para cada programa en el Administrador de tareas, pero no pueden indicarle 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, que se muestren menús y que aparezcan cuadros de alerta. La situación puede ser difícil de solucionar y potencialmente puede requerir un reinicio forzado del sistema, ya que impide que funcionen los programas centrales del sistema. En Windows 8 y 8.1, se produce un cierre de sesión forzado como resultado de un desbordamiento de capacidad de GDI, en lugar de un reinicio.

Sucesor

Direct2D es el sucesor de GDI y GDI+. Su hermano, DirectWrite , reemplaza a Uniscribe . Se enviaron con Windows 7 y Windows Server 2008 R2, y estaban disponibles para Windows Vista y Windows Server 2008 (con Platform Update instalado). Más tarde, 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 para la Plataforma universal de Windows . [17]

Ver también

notas y referencias

  1. ^ Steven, blanco; David, Coulter; Mike, Jacobs (31 de mayo de 2018). "Comparación de la aceleración de hardware Direct2D y GDI". Desarrollador de Windows . Microsoft .
  2. ^ Mayordomo, John (diciembre de 1983). "Salida de gráficos independiente del dispositivo para Microsoft Windows". BYTE . pag. 49 . Consultado el 20 de octubre de 2013 .
  3. ^ https://www.dosdays.co.uk/media/cirrus_logic/CL-GD543X_Applications_and_Eratta_Book_Apr94.pdf. {{cite web}}: Falta o está vacío |title=( ayuda )
  4. ^ Plataforma SDK redistribuible: GDI+
  5. ^ "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 .
  6. ^ Jackson, Chris. "Rendimiento de representación de texto GDI frente a GDI+". La consonancia semántica de Chris Jackson . Microsoft.
  7. ^ MSDN: Comparación de la aceleración de hardware Direct2D y GDI
  8. ^ ab GDI no está acelerado por hardware en Windows Vista
  9. ^ Ventanas en capas... El SW a veces es más rápido que el HW. Avalite en los blogs de MSDN.
  10. ^ Thomas Olsen (29 de octubre de 2008). "Presentación de la API de Microsoft Direct2D".
  11. ^ ab "Impresora GDI genérica". Abra Impresión . La Fundación Linux . Consultado el 21 de julio de 2021 .
  12. ^ "Impresoras sólo para Windows". Proyecto de documentación de Linux . Consultado el 29 de octubre de 2019 .
  13. ^ Artículo 838283 de la base de conocimiento de Microsoft: los menús de las aplicaciones de escritorio se muestran incorrectamente si un proceso excede su cuota de objetos GDI en Windows XP o Windows 2000 http://support.microsoft.com/kb/838283
  14. ^ Blog de Microsoft Developer Network: la fuga de GDI en Outlook 2007 causa problemas cuando el uso de GDI alcanza los 10.000 objetos http://blogs.msdn.com/rgregg/archive/2007/09/03/outlook-2007-gdi-leak-hotfix.aspx
  15. ^ Microsoft Developer Network: límites de objetos GDI http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
  16. ^ Artículo 894500 de la base de conocimientos de Microsoft: los programas .NET diseñados en sistemas operativos NT más nuevos pueden funcionar mal en Win 95/Win 98/Win ME anteriores debido a límites de uso de GDI más bajos http://support.microsoft.com/kb/894500
  17. ^ "Win2D". repositorio de microsoft/Win2D . Microsoft . Consultado el 21 de julio de 2021 a través de GitHub.com .

enlaces externos