Graphics Device Interface: Difference between revisions
change lead sentence. |
→GDI+: Remove non-notable GDI+ vulnerabilities. |
||
Line 32: | Line 32: | ||
GDI+ is similar (in purpose and structure) to [[Apple Computer|Apple]]'s ''[[Quartz 2D]]'' subsystem, and the open-source ''[[libart]]'' and [[Cairo (graphics)|Cairo]] libraries. |
GDI+ is similar (in purpose and structure) to [[Apple Computer|Apple]]'s ''[[Quartz 2D]]'' subsystem, and the open-source ''[[libart]]'' and [[Cairo (graphics)|Cairo]] libraries. |
||
===GDI+ vulnerability=== |
|||
In [[September]] [[2004]] it was found that GDI+ and other graphics APIs were vulnerable to an exploit related to a defect in the standard [[JPEG]] library. The vulnerability allowed someone to cause code execution on any system that displayed their jpeg with a tool that used the decoder in GDI+.<!-- was it this issue that was a huge mess to patch because of apps installing their own versions my memory is a bit fuzzy--> |
|||
*[http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx Microsoft Security Bulletin MS04-028] |
|||
*[http://www.f-secure.com/news/items/news_2004100500.shtml F-Secure: Critical vulnerability in MS Windows may escalate the virus threat] |
|||
==See also== |
==See also== |
Revision as of 20:25, 28 May 2006
The Graphics Device Interface (GDI, sometimes called Graphical Device Interface) is one of the three core components or "subsystems", together with the kernel and the user (window manager), of Microsoft Windows.
GDI is a Microsoft Windows standard for representing graphical objects and transmitting them to output devices such as monitors and printers.
GDI
GDI is responsible for tasks such as drawing lines and curves, rendering fonts and handling palettes. It is not directly responsible for drawing windows, menus, etc.: that task is reserved for the user subsystem. GDI is similar to Apple's classic QuickDraw.
Perhaps the most significant capability of GDI over more direct methods of accessing the hardware is its scaling capabilities, and abstraction of target devices. Using GDI, it is very easy to draw on multiple devices, such as a screen and a printer, and expect proper reproduction in each case. This capability is at the centre of all WYSIWYG applications for Microsoft Windows.
Simple games which do not require fast graphics rendering, such as Freecell or Minesweeper, use GDI. However, GDI cannot animate properly (no notion of synchronizing with the framebuffer) and lacks rasterization for 3D. Modern games use DirectX and sometimes OpenGL, which gives programmers access to more hardware capabilities.
In Windows Vista, GDI applications running in the new compositing engine will no longer be hardware-accelerated.
GDI printers
GDI printers (also known as Winprinters akin to Winmodems), in particular GDI laser printers, replace the traditional processing power of the printer itself with capabilities "borrowed" from the host computer. They work by rendering an image to a bitmap on the host computer and then sending the bitmap to the printer. This method has two advantages:
- It saves the cost of including a dedicated graphics processing CPU and RAM in the printer (typically about $50 US).
- Depending on the particular implementation it can provide performance benefits.
The disadvantages are that:
- It imposes a higher workload on the host system's resources. In the most recent systems this usually is a non-issue, in older systems (typically in the 200 to 500MHz range) it could make printing unbearably slow as documents become more complex.
- GDI printers usually do not include the usual range of emulations in their firmware (nor the processing ability to implement them). In consequence, where, with a full-featured PCL or PostScript printer, the user has many alternative driver configurations to fall back on in case of a software incompatibility or driver bug, with a GDI printer there is often no workaround.
- GDI printers generally only work with Windows. Exceptions exist, but as a rule it is not possible to use a GDI printer with other operating systems.
Most current model inkjet printers are GDI-based (largely for performance reasons, as the cost factor has primarily to do with lasers), but the trend is to add more flexibility: many offer Mac support, and the Linux community has become increasingly good at making Linux drivers available. Some (notably Epson) often also offer a more traditional emulation as a fallback.
In general, the cheapest current-model laser printers are GDI devices. Most manufacturers also produce more flexible models that add PCL compatibility, or PostScript, or both. In most cases it is only the very cheapest models in any given manufacturer's range that are GDI-only.
GDI+
With the introduction of Windows XP, GDI was deprecated in favor of its successor, the C++ based GDI+ subsystem. GDI+ is a "next generation" 2D graphics environment, adding advanced features such as alpha blending, gradient shading, more complex path management, intrinsic support for modern graphics-file formats like JPEG and PNG (which were conspicuously absent in GDI), and general support for composition of affine transformations in the 2D view pipeline. Use of these features is apparent in Windows XP's user interface, and their presence in the basic graphics layer greatly simplifies implementations of vector-graphics systems such as Flash or SVG. The GDI+ dynamic library can be shipped with an application and used under older versions of Windows.
The Microsoft .NET class library provides a managed interface for GDI+ via the System.Drawing
namespace.
GDI+ is similar (in purpose and structure) to Apple's Quartz 2D subsystem, and the open-source libart and Cairo libraries.