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 .
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]
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 , en 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]
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 .
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]
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]
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 desde 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 esté ejecutando Windows. pnm2ppa
Se 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 .
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.
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]
{{cite web}}
: Falta o está vacío |title=
( ayuda )