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.
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]
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]
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 .
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]
Windows 7 incluye aceleración de hardware GDI para operaciones de blitting en el Windows Display Driver Model v1.1 . Esto mejora el rendimiento de GDI y permite que DWM utilice la memoria de video 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 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]
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. pnm2ppa
Se 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 de impresora genérica (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 .
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 utilizaban. 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.
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]
{{cite web}}
: Falta o está vacío |title=
( ayuda )