stringtranslate.com

Interfaz de dispositivo gráfico

La interfaz de 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 la API de DirectDraw y más tarde por la API de Direct2D . [ cita requerida ] Las aplicaciones de Windows usan la API de Windows para interactuar con GDI, para tareas como dibujar líneas y curvas, renderizar fuentes y manejar paletas . El subsistema USER de Windows usa 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: Mac OS tiene QuickDraw , y Linux y Unix tienen el protocolo central X Window System .

Las ventajas más significativas de GDI sobre los métodos más directos de acceso al hardware son quizás sus capacidades 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 esperar una reproducción adecuada en cada caso. Esta capacidad es la base 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 rápida de gráficos pueden usar GDI. Sin embargo, GDI es relativamente difícil de usar para animación avanzada, carece de una noción de sincronización con fotogramas de video individuales en la tarjeta de video y carece de rasterización de hardware para 3D. Los juegos modernos generalmente usan DirectX , 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, pantalla o impresora. GDI mantiene el contexto actual. Para generar la salida se requiere un identificador para el contexto de dispositivo (HDC). Después de generar la salida, se puede liberar el identificador.

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

Historial de versiones

Primeras versiones

GDI estaba presente en la versión inicial de Windows. Los programas MS-DOS habían manipulado el hardware gráfico mediante interrupciones de software (a veces a través del BIOS de vídeo ) y manipulando la memoria de vídeo directamente. El código escrito de esta manera espera ser el único usuario de la memoria de vídeo, lo que no era sostenible en un entorno multitarea , como Windows. La revista BYTE , en diciembre de 1983, analizó los planes de Microsoft para un sistema que enviara 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 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++. Añade gráficos 2D anti-aliasing, coordenadas de punto flotante, sombreado de gradiente, administración de rutas más compleja, soporte intrínseco para formatos de archivos 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+ utiliza valores RGBA para representar el color. El uso de estas características es evidente en los componentes de Windows XP, como Microsoft Paint , Windows Picture and Fax Viewer , Photo Printing Wizard y el protector de pantalla My Pictures Slideshow. Su presencia en la capa de gráficos básicos 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+ está incluido 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 se encarga de la representación del 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 utilizando 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 está acelerado por hardware. Por lo tanto, el propio GDI 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 más sensibles porque la aplicación no necesita volver a renderizar el contenido subyacente. [8]

Ventanas 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 video local para la composición, lo que reduce el uso de memoria del sistema y aumenta el rendimiento de las operaciones gráficas. La mayoría de las operaciones GDI primitivas aún no están aceleradas por hardware, a diferencia de Direct2D . GDI+ sigue dependiendo de la renderizació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 la salida de un ordenador host que ejecuta Windows. El ordenador 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 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 el ordenador anfitrión para ello. Sin embargo, una impresora con su propio lenguaje de control puede aceptar la entrada de cualquier dispositivo con un controlador adecuado, mientras que una impresora GDI requiere un PC con Windows. Las impresoras GDI pueden estar disponibles para ordenadores en una red si están conectadas como impresoras compartidas en un ordenador que esté en Windows y ejecutándose. pnm2ppaSe han escrito algunos controladores GDI "genéricos" como ; su objetivo es hacer que las impresoras GDI sean compatibles con sistemas operativos que no sean Windows, como FreeBSD , pero no pueden admitir todas las impresoras. [11]

Para permitir una creación más sencilla de controladores para impresoras 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 realizar el desarrollo del controlador en modo kernel.

Microsoft se ha alejado de este modelo de impresión con 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, también aumenta su uso de objetos GDI. Cuando se utilizan demasiados objetos, Windows no puede dibujar más objetos GDI, lo que lleva a un mal comportamiento del software y a un funcionamiento del programa congelado y sin respuesta. [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 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). [15] [16] 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 controlar la cantidad de recursos GDI totales del sistema que se estaban utilizando. 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 para cada programa en el Administrador de tareas, pero no pueden informar al usuario sobre la capacidad GDI total 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 puede requerir un reinicio forzado del sistema, ya que impide que los programas centrales del sistema funcionen. En Windows 8 y 8.1, el cierre de sesión forzado se produce como resultado del desbordamiento de la capacidad de GDI, en lugar de un reinicio.

Sucesor

Direct2D es el sucesor de GDI y GDI+. Su hermano, DirectWrite , reemplaza a Uniscribe . Se entregaron 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 similar a GDI gratuita y de código abierto . El público objetivo de Win2D son los desarrolladores que usan C++, C# y Visual Basic.NET para desarrollar aplicaciones de la Plataforma universal de Windows . [17]

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 de Direct2D y GDI". Windows Developer . Microsoft .
  2. ^ Butler, John (diciembre de 1983). "Salida de gráficos independiente del dispositivo para Microsoft Windows". BYTE . pág. 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+". Consonancia semántica de Chris Jackson . Microsoft.
  7. ^ MSDN: Comparación de la aceleración de hardware entre Direct2D y GDI
  8. ^ab GDI no está acelerado por hardware en Windows Vista
  9. ^ Ventanas en capas... El software a veces es más rápido que el hardware. Avalite en MSDN Blogs.
  10. ^ Thomas Olsen (29 de octubre de 2008). "Presentación de la API Microsoft Direct2D".
  11. ^ ab "Impresora GDI genérica". Impresión abierta . The Linux Foundation . Consultado el 21 de julio de 2021 .
  12. ^ "Impresoras exclusivas de Windows". Proyecto de documentación de Linux . Consultado el 29 de octubre de 2019 .
  13. ^ Artículo 838283 de Microsoft Knowledge Base: Los menús de las aplicaciones de escritorio no se muestran correctamente 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: una fuga de GDI en Outlook 2007 provoca 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 Microsoft Knowledge Base: Los programas .NET diseñados en sistemas operativos NT más nuevos pueden funcionar mal en sistemas 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
  17. ^ "Win2D". microsoft/Win2D repo . Microsoft . Consultado el 21 de julio de 2021 – a través de GitHub.com .

Enlaces externos