WinLIFT GDI+ Pro version 2.50
The demonstration is an illustration of the many advanced features you get when you order the package.

Among things:

Many efforts have been done to make this demonstration as complete as possible.

The full source code is provided when you order the WinLIFT GDI+ Pro package. 
Learning from the source code is the best way to understand what is going on behind the hood.

In order to use the demo you must first select one picture (several is better) with the WinLIFT file selector common dialog, it will display thumbnails of the images while you browse your folders allowing you to perform multi-selection. 
As soon as a picture is selected then you will be able to use the "GDI+ demo" menu to try some of the provided GDIPLUS API.

Overview of GDI+


You will learn everything releted to the use of Microsoft GDI+ if you click on the link below:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/gdi+/aboutgdi+/whatsnewingdi+/newfeatures.asp

Microsoft® Windows® GDI+ is the subsystem of the Windows XP operating system or Windows.NET Server family that is responsible for displaying information on screens and printers. GDI+ is an application programming interface (API) that is exposed through a set of C++ classes.

As its name suggests, GDI+ is the successor to Windows Graphics Device Interface (GDI), the graphics device interface included with earlier versions of Windows. Windows XP or Windows.NET Server family supports GDI for compatibility with existing applications, but programmers of new applications should use GDI+ for all their graphics needs because GDI+ optimizes many of the capabilities of GDI and also provides additional features.

A graphics device interface, such as GDI+, allows application programmers to display information on a screen or printer without having to be concerned about the details of a particular display device. The application programmer makes calls to methods provided by GDI+ classes and those methods in turn make the appropriate calls to specific device drivers. GDI+ insulates the application from the graphics hardware, and it is this insulation that allows developers to create device-independent applications.

The Three Parts of GDI+


The services of Microsoft® Windows® GDI+ fall into the following three broad categories:

2-D vector graphics

Vector graphics involves drawing primitives (such as lines, curves, and figures) that are specified by sets of points on a coordinate system. For example, a straight line can be specified by its two endpoints, and a rectangle can be specified by a point giving the location of its upper-left corner and a pair of numbers giving its width and height. A simple path can be specified by an array of points to be connected by straight lines. A Bézier spline is a sophisticated curve specified by four control points.

GDI+ provides classes that store information about the primitives themselves, classes that store information about how the primitives are to be drawn, and classes that actually do the drawing. For example, the Rect class stores the location and size of a rectangle; the Pen class stores information about line color, line width, and line style; and the Graphics class has methods for drawing lines, rectangles, paths, and other figures. There are also several Brush classes that store information about how closed figures and paths are to be filled with colors or patterns.

Imaging

Certain kinds of pictures are difficult or impossible to display with the techniques of vector graphics. For example, the pictures on toolbar buttons and the pictures that appear as icons would be difficult to specify as collections of lines and curves. A high-resolution digital photograph of a crowded baseball stadium would be even more difficult to create with vector techniques. Images of this type are stored as bitmaps, arrays of numbers that represent the colors of individual dots on the screen. Data structures that store information about bitmaps tend to be more complex than those required for vector graphics, so there are several classes in GDI+ devoted to this purpose. An example of such a class is CachedBitmap, which is used to store a bitmap in memory for fast access and display.

Typography

Typography is concerned with the display of text in a variety of fonts, sizes, and styles. GDI+ provides an impressive amount of support for this complex task. One of the new features in GDI+ is subpixel antialiasing, which gives text rendered on an LCD screen a smoother appearance.

New Features


The following sections describe several of the new features in Microsoft® Windows® GDI+.

Gradient Brushes

GDI+ expands on Windows Graphics Device Interface (GDI) by providing linear gradient and path gradient brushes for filling shapes, paths, and regions. Gradient brushes can also be used to draw lines, curves, and paths. When you fill a shape with a linear gradient brush, the color gradually changes as you move across the shape. For example, suppose you create a horizontal gradient brush by specifying blue at the left edge of a shape and green at the right edge. When you fill that shape with the horizontal gradient brush, it will gradually change from blue to green as you move from its left edge to its right edge. Similarly, a shape filled with a vertical gradient brush will change color as you move from top to bottom. The following illustration shows an ellipse filled with a horizontal gradient brush and a region filled with a diagonal gradient brush.

Horizontal and Diagonal Gradient Brush

When you fill a shape with a path gradient brush, you have a variety of options for specifying how the colors change as you move from one portion of the shape to another. One option is to have a center color and a boundary color so that the pixels change gradually from one color to the other as you move from the middle of the shape towards the outer edges. The following illustration shows a path (created from a pair of Bézier splines) filled with a path gradient brush.

Path Filled with Gradient Brush

Cardinal Splines

GDI+ supports cardinal splines, which are not supported in GDI. A cardinal spline is a sequence of individual curves joined to form a larger curve. The spline is specified by an array of points and passes through each point in that array. A cardinal spline passes smoothly (no sharp corners) through each point in the array and thus is more refined than a path created by connecting straight lines. The following illustration shows two paths, one created by connecting straight lines and one created as a cardinal spline.

Cardinal Splines

Independent Path Objects

In GDI, a path belongs to a device context, and the path is destroyed as it is drawn. With GDI+, drawing is performed by a Graphics object, and you can create and maintain several GraphicsPath objects that are separate from the Graphics object. A GraphicsPath object is not destroyed by the drawing action, so you can use the same GraphicsPath object to draw a path several times.

Transformations and the Matrix Object

GDI+ provides the Matrix object, a powerful tool that makes transformations (rotations, translations, and so on) easy and flexible. A matrix object works in conjunction with the objects that are transformed. For example, a GraphicsPath object has a Transform method that receives the address of a Matrix object as an argument. A single 3×3 matrix can store one transformation or a sequence of transformations. The following illustration shows a path before and after a sequence of two transformations (first scale, then rotate).

Path before and after transformations

Scalable Regions

GDI+ expands greatly on GDI with its support for regions. In GDI, regions are stored in device coordinates, and the only transformation that can be applied to a region is a translation. GDI+ stores regions in world coordinates and allows a region to undergo any transformation (scaling, for example) that can be stored in a transformation matrix. The following illustration shows a region before and after a sequence of three transformations: scale, rotate, and translate.

Scalable Regions

Alpha Blending

Note that in the previous figure, you can see the untransformed region (filled with red) through the transformed region (filled with a hatch brush). This is made possible by alpha blending, which is supported by GDI+. With alpha blending, you can specify the transparency of a fill color. A transparent color is blended with the background color — the more transparent you make a fill color, the more the background shows through. The following illustration shows four ellipses that are filled with the same color (red) at different transparency levels.

Alpha Blending

Support for Multiple Image Formats

GDI+ provides the Image, Bitmap, and Metafile classes, which allow you to load, save and manipulate images in a variety of formats. The following formats are supported:

Changes in the Programming Model


The following sections describe several ways that programming with Microsoft® Windows® GDI+ is different from programming with Windows Graphics Device Interface (GDI).

Device Contexts, Handles, and Graphics Objects

If you have written programs using GDI (the graphics device interface included in previous versions of Windows), you are familiar with the idea of a device context (DC). A device context is a structure used by Windows to store information about the capabilities of a particular display device and attributes that specify how items will be drawn on that device. A device context for a video display is also associated with a particular window on the display. First you obtain a handle to a device context (HDC), and then you pass that handle as an argument to GDI functions that actually do the drawing. You also pass the handle as an argument to GDI functions that obtain or set the attributes of the device context.

When you use GDI+, you don't have to be as concerned with handles and device contexts as you do when you use GDI. You simply create a Graphics object and then invoke its methods in the familiar object-oriented style — myGraphicsObject.DrawLine(parameters). The Graphics object is at the core of GDI+ just as the device context is at the core of GDI. The device context and the Graphics object play similar roles, but there are some fundamental differences between the handle-based programming model used with device contexts (GDI) and the object-oriented model used with Graphics objects (GDI+).

The Graphics object, like the device context, is associated with a particular window on the screen and contains attributes (for example, smoothing mode and text rendering hint) that specify how items are to be drawn. However, the Graphics object is not tied to a pen, brush, path, image, or font as a device context is. For example, in GDI, before you can use a device context to draw a line, you must call SelectPbject to associate a pen object with the device context. This is referred to as selecting the pen into the device context. All lines drawn in the device context will use that pen until you select a different pen. With GDI+, you pass a Pen object as an argument to the DrawLine method of the Graphics class. You can use a different Pen object in each of a series of DrawLine calls without having to associate a given Pen object with a Graphics object.

To Draw a Line

The following example draw a red line of width 3 from location (20, 10) to location (200,100).

Drawing a line with GDI

To draw a line with GDI, you need two objects: a device context and a pen. You get a handle to a device context by calling CreatePen. Next, you call SelectObject to select the pen into the device context. You set the pen position to (20, 10) by calling MoveToEx and then draw a line from that pen position to (200, 100) by calling LineTo. Note that MoveToEx and LineTo both receive hdc as an argument.

HDC          hdc;
PAINTSTRUCT  ps;
HPEN         hPen;
HPEN         hPenOld;
hdc = BeginPaint(hWnd, &ps);
   hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
   hPenOld = (HPEN)SelectObject(hdc, hPen);
   MoveToEx(hdc, 20, 10, NULL);
   LineTo(hdc, 200, 100);
   SelectObject(hdc, hPenOld);
   DeleteObject(hPen);
EndPaint(hWnd, &ps);

Pens, Brushes, Paths, Images, and Fonts as Parameters

The preceding examples show that Pen objects can be created and maintained separately from the Graphics object, which supplies the drawing methods. Brush, GraphicsPath, Image, and Font objects can also be created and maintained separately from the Graphics object. Many of the drawing methods provided by the Graphics class receive a Brush, GraphicsPath, Image, or Font object as an argument. For example, the address of a Brush object is passed as an argument to the FillRectangle method, and the address of a GraphicsPath object is passed as an argument to the DrawPath method. Similarly, addresses of Image and Font objects are passed to the DrawImage and DrawString methods. This is in contrast to GDI where you select a brush, path, image, or font into the device context and then pass a handle to the device context as an argument to a drawing function.

Method Overloading

Many of the GDI+ methods are overloaded; that is, several methods share the same name but have different parameter lists. For example, the DrawLine method of the Graphics class comes in the following forms:

Show Example

All four of the DrawLine variations above receive a pointer to a Pen object, the coordinates of the starting point, and the coordinates of the ending point. The first two variations receive the coordinates as floating point numbers, and the last two variations receive the coordinates as integers. The first and third variations receive the coordinates as a list of four separate numbers, while the second and fourth variations receive the coordinates as a pair of Point (or PointF) objects.

No More Current Position

Note that in the DrawLine methods shown previously both the starting point and the ending point of the line are received as arguments. This is a departure from the GDI scheme where you call to set the current pen position followed by to draw a line starting at (x1, y1) and ending at (x2, y2). GDI+ as a whole has abandoned the notion of current position.

Separate Methods for Draw and Fill

GDI+ is more flexible than GDI when it comes to drawing the outlines and filling the interiors of shapes like rectangles. GDI has a Rectangle function that draws the outline and fills the interior of a rectangle all in one step. The outline is drawn with the currently selected pen, and the interior is filled with the currently selected brush.

hBrush = CreateHatchBrush(HS_CROSS, RGB(0, 0, 255));
hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
SelectObject(hdc, hBrush);
SelectObject(hdc, hPen);
Rectangle(hdc, 100, 50, 200, 80);

GDI+ has separate methods for drawing the outline and filling the interior of a rectangle. The DrawRectangle method of the Graphics class has the address of a Pen object as one of its parameters, and the FillRectangle method has the address of a Brush object as one of its parameters.

HatchBrush* myHatchBrush = new HatchBrush(
   HatchStyleCross,
   Color(255, 0, 255, 0),
   Color(255, 0, 0, 255));
Pen* myPen = new Pen(Color(255, 255, 0, 0), 3);
myGraphics.FillRectangle(myHatchBrush, 100, 50, 100, 30);
myGraphics.DrawRectangle(myPen, 100, 50, 100, 30);

Note that the FillRectangle and DrawRectangle methods in GDI+ receive arguments that specify the rectangle's left edge, top, width, and height. This is in contrast to the GDIRectangle function, which takes arguments that specify the rectangle's left edge, right edge, top, and bottom. Also note that the constructor for the Color class in GDI+ has four parameters. The last three parameters are the usual red, green, and blue values; the first parameter is the alpha value, which specifies the extent to which the color being drawn is blended with the background color.

Constructing Regions

GDI provides several functions for creating regions: CreateRectRgn, CreateEllpticRgn, CreateRoundRectRgn, CreatePolygonRgn, and CreatePolyPolygonRgn. You might expect the Region class in GDI+ to have analogous constructors that take rectangles, ellipses, rounded rectangles, and polygons as arguments, but that is not the case. The Region class in GDI+ provides a constructor that receives a Rect object reference and another constructor that receives the address of a GraphicsPath object. If you want to construct a region based on an ellipse, rounded rectangle, or polygon, you can easily do so by creating a GraphicsPath object (that contains an ellipse, for example) and then passing the address of that GraphicsPath object to a Region constructor.

GDI+ makes it easy to form complex regions by combining shapes and paths. The Region class has Union and Intersect methods that you can use to augment an existing region with a path or another region. One nice feature of the GDI+ scheme is that a GraphicsPath object is not destroyed when it is passed as an argument to a Region constructor. In GDI, you can convert a path to a region with the PathToRegion function, but the path is destroyed in the process. Also, a GraphicsPath object is not destroyed when its address is passed as an argument to a Union or Intersect method, so you can use a given path as a building block for several separate regions. This is shown in the following example. Assume that onePath is a pointer to a GraphicsPath object (simple or complex) that has already been initialized.

Region  region1(rect1);
Region  region2(rect2);
region1.Union(onePath);
region2.Intersect(onePath);

Types of Bitmaps


A bitmap is an array of bits that specifies the color of each pixel in a rectangular array of pixels. The number of bits devoted to an individual pixel determines the number of colors that can be assigned to that pixel. For example, if each pixel is represented by 4 bits, then a given pixel can be assigned one of 16 different colors (2^4 = 16). The following table shows a few examples of the number of colors that can be assigned to a pixel represented by a given number of bits.

Bits per pixel Number of colors that can be assigned to a pixel
1 2^1 = 2
2 2^2 = 4
4 2^4 = 16
8 2^8 = 256
16 2^16 = 65,536
24 2^24 = 16, 777, 216

Disk files that store bitmaps usually contain one or more information blocks that store information such as number of bits per pixel, number of pixels in each row, and number of rows in the array. Such a file might also contain a color table (sometimes called a color palette). A color table maps numbers in the bitmap to specific colors. The following illustration shows an enlarged image along with its bitmap and color table. Each pixel is represented by a 4-bit number, so there are 2^4 = 16 colors in the color table. Each color in the table is represented by a 24-bit number: 8 bits for red, 8 bits for green, and 8 bits for blue. The numbers are shown in hexadecimal (base 16) form: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.

Look at the pixel in row 3, column 5 of the image. The corresponding number in the bitmap is 1. The color table tells us that 1 represents the color red, so the pixel is red. All the entries in the top row of the bitmap are 3. The color table tells us that 3 represents blue, so all the pixels in the top row of the image are blue.

Note  Some bitmaps are stored in bottom-up format; the numbers in the first row of the bitmap correspond to the pixels in the bottom row of the image.

A bitmap that stores indexes into a color table is called a palette-indexed bitmap. Some bitmaps have no need for a color table. For example, if a bitmap uses 24 bits per pixel, that bitmap can store the colors themselves rather than indexes into a color table. The following illustration shows a bitmap that stores colors directly (24 bits per pixel) rather than using a color table. The illustration also shows an enlarged view of the corresponding image. In the bitmap, FFFFFF represents white, FF0000 represents red, 00FF00 represents green, and 0000FF represents blue.

 

Graphics File Formats

There are many standard formats for saving bitmaps in files. Microsoft® Windows® GDI+ supports the graphics file formats described in the following paragraphs.

Bitmap (BMP)

BMP is a standard format used by Windows to store device-independent and application-independent images. The number of bits per pixel (1, 4, 8, 15, 24, 32, or 64) for a given BMP file is specified in a file header. BMP files with 24 bits per pixel are common.

Graphics Interchange Format (GIF)

GIF is a common format for images that appear on Web pages. GIFs work well for line drawings, pictures with blocks of solid color, and pictures with sharp boundaries between colors. GIFs are compressed, but no information is lost in the compression process; a decompressed image is exactly the same as the original. One color in a GIF can be designated as transparent, so that the image will have the background color of any Web page that displays it. A sequence of GIF images can be stored in a single file to form an animated GIF. GIFs store at most 8 bits per pixel, so they are limited to 256 colors.

Joint Photographic Experts Group (JPEG)

JPEG is a compression scheme that works well for natural scenes, such as scanned photographs. Some information is lost in the compression process, but often the loss is imperceptible to the human eye. Color JPEG images store 24 bits per pixel, so they are capable of displaying more than 16 million colors. There is also a grayscale JPEG format that stores 8 bits per pixel. JPEGs do not support transparency or animation.

The level of compression in JPEG images is configurable, but higher compression levels (smaller files) result in more loss of information. A 20:1 compression ratio often produces an image that the human eye finds difficult to distinguish from the original. The following illustration shows a BMP image and two JPEG images that were compressed from that BMP image. The first JPEG has a compression ratio of 4:1 and the second JPEG has a compression ratio of about 8:1.

JPEG compression does not work well for line drawings, blocks of solid color, and sharp boundaries. The following illustration shows a BMP along with two JPEGs and a GIF. The JPEGs and the GIF were compressed from the BMP. The compression ratio is 4:1 for the GIF, 4:1 for the smaller JPEG, and 8:3 for the larger JPEG. Note that the GIF maintains the sharp boundaries along the lines, but the JPEGs tends to blur the boundaries.

JPEG is a compression scheme, not a file format. JPEG File Interchange Format (JFIF) is a file format commonly used for storing and transferring images that have been compressed according to the JPEG scheme. JFIF files displayed by Web browsers use the .jpg extension.

Exchangeable Image File (Exif)

Exif is a file format used for photographs captured by digital cameras. An Exif file contains an image that is compressed according to the JPEG specification. An Exif file also contains information about the photograph (date taken, shutter speed, exposure time, and so on) and information about the camera (manufacturer, model, and so on).

Portable Network Graphics (PNG)

The PNG format retains many of the advantages of the GIF format but also provides capabilities beyond those of GIF. Like GIF files, PNG files are compressed with no loss of information. PNG files can store colors with 8, 24, or 48 bits per pixel and gray scales with 1, 2, 4, 8, or 16 bits per pixel. In contrast, GIF files can use only 1, 2, 4, or 8 bits per pixel. A PNG file can also store an alpha value for each pixel, which specifies the degree to which the color of that pixel is blended with the background color.

PNG improves on GIF in its ability to progressively display an image; that is, to display better and better approximations of the image as it arrives over a network connection. PNG files can contain gamma correction and color correction information so that the images can be accurately rendered on a variety of display devices.

Tag Image File Format (TIFF)

TIFF is a flexible and extendable format that is supported by a wide variety of platforms and image-processing applications. TIFF files can store images with an arbitrary number of bits per pixel and can employ a variety of compression algorithms. Several images can be stored in a single, multiple-page TIFF file. Information related to the image (scanner make, host computer, type of compression, orientation, samples per pixel, and so on) can be stored in the file and arranged through the use of tags. The TIFF format can be extended as needed by the approval and addition of new tags.

 

WinLIFT GDI+ Pro provided API:

Initialization:
GdiplusStartup
GdiplusShutdown

Graphics Functions ALL:
Flush
CreateFromHDC
CreateFromHWND
CreateFromHWNDICM
DeleteGraphics
GetDC
ReleaseDC
SetCompositingMode
GetCompositingMode
SetRenderingOrigin
GetRenderingOrigin
SetCompositingQuality
GetCompositingQuality
SetSmoothingMode
GetSmoothingMode
SetPixelOffsetMode
GetPixelOffsetMode
SetTextRenderingHint
GetTextRenderingHint
SetTextContrast
GetTextContrast
SetInterpolationMode
GetInterpolationMode
SetWorldTransform
ResetWorldTransform
MultiplyWorldTransform
TranslateWorldTransform
ScaleWorldTransform
RotateWorldTransform
GetWorldTransform
ResetPageTransform
GetPageUnit
GetPageScale
SetPageUnit
SetPageScale
GetDpiX
GetDpiY
TransformPoints
TransformPointsI
GetNearestColor
CreateHalftonePalette
DrawLine
DrawLineI
DrawLines
DrawLinesI
DrawArc
DrawArcI
DrawBezier
DrawBezierI
DrawBeziers
DrawBeziersI
DrawRectangle
DrawRectangleI
DrawRectangles
DrawRectanglesI
DrawEllipse
DrawEllipseI
DrawPie
DrawPieI
DrawPolygon
DrawPolygonI
DrawPath
DrawCurve
DrawCurveI
DrawCurve2
DrawCurve2I
DrawCurve3
DrawCurve3I
DrawClosedCurve
DrawClosedCurveI
DrawClosedCurve2
DrawClosedCurve2I
GraphicsClear
FillRectangle
FillRectangleI
FillRectangles
FillRectanglesI
FillPolygon
FillPolygonI
FillPolygon2
FillPolygon2I
FillEllipse
FillEllipseI
FillPie
FillPieI
FillPath
FillClosedCurve
FillClosedCurveI
FillClosedCurve2
FillClosedCurve2I
FillRegion
DrawImage
DrawImageI
DrawImageRect
DrawImageRectI
DrawImagePoints
DrawImagePointsI
DrawImagePointRect
DrawImagePointRectI
DrawImageRectRect
DrawImageRectRectI
DrawImagePointsRect
DrawImagePointsRectI
EnumerateMetafileDestPoint
EnumerateMetafileDestPointI
EnumerateMetafileDestRect
EnumerateMetafileDestRectI
EnumerateMetafileDestPoints
EnumerateMetafileDestPointsI
EnumerateMetafileSrcRectDestPoint
EnumerateMetafileSrcRectDestPointI
EnumerateMetafileSrcRectDestRect
EnumerateMetafileSrcRectDestRectI
EnumerateMetafileSrcRectDestPoints
EnumerateMetafileSrcRectDestPointsI
SetClipGraphics
SetClipRect
SetClipRectI
SetClipPath
SetClipRegion
SetClipHrgn
ResetClip
TranslateClip
TranslateClipI
GetClip
GetClipBounds
GetClipBoundsI
IsClipEmpty
GetVisibleClipBounds
GetVisibleClipBoundsI
IsVisibleClipEmpty
IsVisiblePoint
IsVisiblePointI
IsVisibleRect
IsVisibleRectI
SaveGraphics
RestoreGraphics
BeginContainer
BeginContainerI
BeginContainer2
EndContainer
GetMetafileHeaderFromWmf
GetMetafileHeaderFromEmf
GetMetafileHeaderFromFile
GetMetafileHeaderFromMetafile
GetHemfFromMetafile
CreateMetafileFromWmf
CreateMetafileFromEmf
CreateMetafileFromFile
CreateMetafileFromWmfFile
RecordMetafile
RecordMetafileI
RecordMetafileFileName
RecordMetafileFileNameI
SetMetafileDownLevelRasterizationLimit
GetMetafileDownLevelRasterizationLimit
GetImageDecodersSize
GetImageDecoders
GetImageEncodersSize
GetImageEncoders
Comment

Image Functions ALL:
LoadImageFromFile
LoadImageFromFileICM
DisposeImage
SaveImageToFile
SaveAdd
SaveAddImage
GetImageGraphicsContext
GetImageBounds
GetImageDimension
GetImageType
GetImageWidth
GetImageHeight
GetImageHorizontalResolution
GetImageVerticalResolution
GetImageFlags
GetImageRawFormat
GetImagePixelFormat
GetImageThumbnail
GetEncoderParameterListSize
GetEncoderParameterList
ImageGetFrameDimensionsCount
ImageGetFrameDimensionsList
ImageGetFrameCount
ImageSelectActiveFrame
ImageRotateFlip
GetImagePalette
SetImagePalette
GetImagePaletteSize
GetPropertyCount
GetPropertyIdList
GetPropertyItemSize
GetPropertyItem
GetPropertySize
GetAllPropertyItems
RemovePropertyItem
SetPropertyItem
ImageForceValidation

Pen Functions ALL:
CreatePen1
CreatePen2
ClonePen
DeletePen
SetPenWidth
GetPenWidth
SetPenUnit
GetPenUnit
SetPenLineCap
SetPenStartCap
SetPenEndCap
SetPenDashCap
GetPenStartCap
GetPenEndCap
GetPenDashCap
SetPenLineJoin
GetPenLineJoin
SetPenCustomStartCap
GetPenCustomStartCap
SetPenCustomEndCap
GetPenCustomEndCap
SetPenMiterLimit
GetPenMiterLimit
SetPenMode
GetPenMode
SetPenTransform
GetPenTransform
ResetPenTransform
MultiplyPenTransform
TranslatePenTransform
ScalePenTransform
RotatePenTransform
SetPenColor
GetPenColor
SetPenBrushFill
GetPenBrushFill
GetPenFillType
GetPenDashStyle
SetPenDashStyle
GetPenDashOffset
SetPenDashOffset
GetPenDashCount
SetPenDashArray
GetPenDashArray
GetPenCompoundCount
SetPenCompoundArray
GetPenCompoundArray

CustomLineCap Functions ALL:
CreateCustomLineCap
DeleteCustomLineCap
CloneCustomLineCap
GetCustomLineCapType
SetCustomLineCapStrokeCaps
GetCustomLineCapStrokeCaps
SetCustomLineCapStrokeJoin
GetCustomLineCapStrokeJoin
SetCustomLineCapBaseCap
GetCustomLineCapBaseCap
SetCustomLineCapBaseInset
GetCustomLineCapBaseInset
SetCustomLineCapWidthScale
GetCustomLineCapWidthScale

AdjustableArrowCap Functions ALL:
CreateAdjustableArrowCap
SetAdjustableArrowCapHeight
GetAdjustableArrowCapHeight
SetAdjustableArrowCapWidth
GetAdjustableArrowCapWidth
SetAdjustableArrowCapMiddleInset
GetAdjustableArrowCapMiddleInset
SetAdjustableArrowCapFillState
GetAdjustableArrowCapFillState

Bitmap Functions ALL:
CreateBitmapFromFile
CreateBitmapFromFileICM
CreateBitmapFromScan0
CreateBitmapFromGraphics
CreateBitmapFromGdiDib
CreateBitmapFromHBITMAP
CreateHBITMAPFromBitmap
CreateBitmapFromHICON
CreateHICONFromBitmap
CreateBitmapFromResource
CloneBitmapArea
CloneBitmapAreaI
BitmapLockBits
BitmapUnlockBits
BitmapGetPixel
BitmapSetPixel
BitmapSetResolution

CachedBitmap Functions ALL:
CreateCachedBitmap
DeleteCachedBitmap
DrawCachedBitmap

Brush Functions ALL:
CloneBrush
DeleteBrush
GetBrushType

HatchBrush Functions ALL:
CreateHatchBrush
GetHatchStyle
GetHatchForegroundColor
GetHatchBackgroundColor

SolidBrush Functions ALL:
CreateSolidFill
SetSolidFillColor
GetSolidFillColor

LineBrush Functions ALL:
CreateLineBrush
CreateLineBrushI
CreateLineBrushFromRect
CreateLineBrushFromRectI
CreateLineBrushFromRectWithAngle
CreateLineBrushFromRectWithAngleI
SetLineColors
GetLineColors
GetLineRect
GetLineRectI
SetLineGammaCorrection
GetLineGammaCorrection
GetLineBlendCount
GetLineBlend
SetLineBlend
GetLinePresetBlendCount
GetLinePresetBlend
SetLinePresetBlend
SetLineSigmaBlend
SetLineLinearBlend
SetLineWrapMode
GetLineWrapMode
GetLineTransform
SetLineTransform
ResetLineTransform
MultiplyLineTransform
TranslateLineTransform
ScaleLineTransform
RotateLineTransform

TextureBrush Functions ALL:
CreateTexture
CreateTexture2
CreateTextureIA
CreateTexture2I
CreateTextureIAI
GetTextureTransform
SetTextureTransform
ResetTextureTransform
TranslateTextureTransform
MultiplyTextureTransform
ScaleTextureTransform
RotateTextureTransform
SetTextureWrapMode
GetTextureWrapMode
GetTextureImage

PathGradientBrush Functions ALL:
CreatePathGradient
CreatePathGradientI
CreatePathGradientFromPath
GetPathGradientCenterColor
SetPathGradientCenterColor
GetPathGradientSurroundColorsWithCount
SetPathGradientSurroundColorsWithCount
GetPathGradientPath
SetPathGradientPath
GetPathGradientCenterPoint
GetPathGradientCenterPointI
SetPathGradientCenterPoint
SetPathGradientCenterPointI
GetPathGradientRect
GetPathGradientRectI
GetPathGradientPointCount
GetPathGradientSurroundColorCount
SetPathGradientGammaCorrection
GetPathGradientGammaCorrection
GetPathGradientBlendCount
GetPathGradientBlend
SetPathGradientBlend
GetPathGradientPresetBlendCount
GetPathGradientPresetBlend
SetPathGradientPresetBlend
SetPathGradientSigmaBlend
SetPathGradientLinearBlend
GetPathGradientWrapMode
SetPathGradientWrapMode
GetPathGradientTransform
SetPathGradientTransform
ResetPathGradientTransform
MultiplyPathGradientTransform
TranslatePathGradientTransform
ScalePathGradientTransform
RotatePathGradientTransform
GetPathGradientFocusScales
SetPathGradientFocusScales

GraphicsPath Functions ALL:
CreatePath
CreatePath2
CreatePath2I
ClonePath
DeletePath
ResetPath
GetPointCount
GetPathTypes
GetPathPoints
GetPathPointsI
GetPathFillMode
SetPathFillMode
GetPathData
StartPathFigure
ClosePathFigure
ClosePathFigures
SetPathMarker
ClearPathMarkers
ReversePath
GetPathLastPoint
AddPathLine
AddPathLine2
AddPathArc
AddPathBezier
AddPathBeziers
AddPathCurve
AddPathCurve2
AddPathCurve3
AddPathClosedCurve
AddPathClosedCurve2
AddPathRectangle
AddPathRectangles
AddPathEllipse
AddPathPie
AddPathPolygon
AddPathPath
AddPathString
AddPathStringI
AddPathLineI
AddPathLine2I
AddPathArcI
AddPathBezierI
AddPathBeziersI
AddPathCurveI
AddPathCurve2I
AddPathCurve3I
AddPathClosedCurveI
AddPathClosedCurve2I
AddPathRectangleI
AddPathRectanglesI
AddPathEllipseI
AddPathPieI
AddPathPolygonI
FlattenPath
WindingModeOutline
WidenPath
WarpPath
TransformPath
GetPathWorldBounds
GetPathWorldBoundsI
IsVisiblePathPoint
IsVisiblePathPointI
IsOutlineVisiblePathPoint
IsOutlineVisiblePathPointI

PathIterator Functions ALL:
CreatePathIter
DeletePathIter
PathIterNextSubpath
PathIterNextSubpathPath
PathIterNextPathType
PathIterNextMarker
PathIterNextMarkerPath
PathIterGetCount
PathIterGetSubpathCount
PathIterIsValid
PathIterHasCurve
PathIterRewind
PathIterEnumerate
PathIterCopyData

Matrix Functions ALL:
CreateMatrix
CreateMatrix2
CreateMatrix3
CreateMatrix3I
CloneMatrix
DeleteMatrix
SetMatrixElements
MultiplyMatrix
TranslateMatrix
ScaleMatrix
RotateMatrix
ShearMatrix
InvertMatrix
TransformMatrixPoints
TransformMatrixPointsI
VectorTransformMatrixPoints
VectorTransformMatrixPointsI
GetMatrixElements
IsMatrixInvertible
IsMatrixIdentity
IsMatrixEqual

Region Functions ALL:
CreateRegion
CreateRegionRect
CreateRegionRectI
CreateRegionPath
CreateRegionRgnData
CreateRegionHrgn
CloneRegion
DeleteRegion
SetInfinite
SetEmpty
CombineRegionRect
CombineRegionRectI
CombineRegionPath
CombineRegionRegion
TranslateRegion
TranslateRegionI
TransformRegion
GetRegionBounds
GetRegionBoundsI
GetRegionHRgn
IsEmptyRegion
IsInfiniteRegion
IsEqualRegion
GetRegionDataSize
GetRegionData
IsVisibleRegionPoint
IsVisibleRegionPointI
IsVisibleRegionRect
IsVisibleRegionRectI
GetRegionScansCount
GetRegionScans
GetRegionScansI

ImageAttributes APIs ALL:
CreateImageAttributes
CloneImageAttributes
DisposeImageAttributes
SetImageAttributesToIdentity
ResetImageAttributes
SetImageAttributesColorMatrix
SetImageAttributesThreshold
SetImageAttributesGamma
SetImageAttributesNoOp
SetImageAttributesColorKeys
SetImageAttributesOutputChannel
SetImageAttributesOutputChannelColorProfile
SetImageAttributesRemapTable
SetImageAttributesWrapMode
SetImageAttributesICMMode
GetImageAttributesAdjustedPalette

FontFamily Functions ALL:
CreateFontFamilyFromName
DeleteFontFamily
CloneFontFamily
GetGenericFontFamilySansSerif
GetGenericFontFamilySerif
GetGenericFontFamilyMonospace
GetFamilyName
IsStyleAvailable
FontCollectionEnumerable
FontCollectionEnumerate
GetEmHeight
GetCellAscent
GetCellDescent
GetLineSpacing

Font Functions ALL:
CreateFontFromDC
CreateFontFromLogfontA
CreateFontFromLogfontW
CreateFont
CloneFont
DeleteFont
GetFamily
GetFontStyle
GetFontSize
GetFontUnit
GetFontHeight
GetFontHeightGivenDPI
GetLogFontA
GetLogFontW
NewInstalledFontCollection
NewPrivateFontCollection
DeletePrivateFontCollection
GetFontCollectionFamilyCount
GetFontCollectionFamilyList
PrivateAddFontFile
PrivateAddMemoryFont

Text Functions ALL:
DrawString
MeasureString
codepointsFitted linesFilled
MeasureCharacterRanges
DrawDriverString
MeasureDriverString

String format Functions ALL:
CreateStringFormat
StringFormatGetGenericDefault
StringFormatGetGenericTypographic
DeleteStringFormat
CloneStringFormat
SetStringFormatFlags
GetStringFormatFlags
SetStringFormatAlign
GetStringFormatAlign
SetStringFormatLineAlign
GetStringFormatLineAlign
SetStringFormatTrimming
GetStringFormatTrimming
SetStringFormatHotkeyPrefix
GetStringFormatHotkeyPrefix
SetStringFormatTabStops
GetStringFormatTabStops
GetStringFormatTabStopCount
SetStringFormatDigitSubstitution
GetStringFormatDigitSubstitution
GetStringFormatMeasurableCharacterRangeCount
SetStringFormatMeasurableCharacterRanges

GDIPLUS API encapsulation:
gpStart 
gpEnd
gpLoadImage
gpDeleteImage
gpDrawImageRectI
gpDrawImageRectRectI
gpCreateImageFromBitmap
gpSaveImageToFile ImgName
gpCreateBitmapFromDC
gpDrawEllipseI
gpDrawLineI
gpSetTextRenderingHint
gpDrawString
gpColorARGB
gpDrawStringEx
gpDrawStringFormated
gpDrawRectangleS
gpFillRectangleI
gpSetImageAttributesAlpha
gpSetCompositingQuality
gpFillEllipseI
gpFillPieI
gpFillEllipseHatchI
gpFillPieHatchI
gpFillRectangle
gpFillEllipse
gpRotateWorldTransform
gpDrawImage
gpRotateImageI

Helper Functions:
GetParameterGUID
GetDecoderClsid
GetEncoderClsid
PtrToStrW lpsz
ColorSetAlpha
ColorARGB