# CGdiPlus

GDI+ is the successor to GDI, the graphics device interface included with earlier versions of Windows. Windows XP or Windows .NET Server 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 the provided functions and those functions 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.

Include file: CGdiPlus.inc.

# CGpBase class

Initializes the GDI+ library and keeps a reference count of it. The destructor shut downs the library. All the other GDI+ classes inherit from CGpBase.

### GetLastStatus method

Returns a value that indicates the nature of this object’s most recent method failure.

    FUNCTION GetLastStatus () AS GpStatus

#### Return value

Returns an element of the GpStatus enumeration.

If no methods invoked on this object have failed since the previous call to GetLastStatus, then GetLastStatus returns Ok (0). If at least one method has failed since the previous call to GetLastStatus, then GetLastStatus returns a value that indicates the nature of the most recent failure.

For a detailed list of status codes see the GpStatus enumeration.

# Structures

Name | Description
--- | ---
BitmapData | Stores attributes of a bitmap.
CharacterRange | Specifies a range of character positions within a string.
ColorMap | Contains two COLORREF values.
ColorMatrix | Contains a 5x5 matrix of real numbers.
ColorPalette | Defines an array of colors that make up a color palette.
EncoderParameter | Holds a parameter that can be passed to an image encoder.
EncoderParameters | Holds array of EncoderParameter structures.
ENHMETAHEADER3 | Contains enhanced-metafile data.
GdiplusStartupInput | Holds a block of arguments that are required by the GdiplusStartup function.
GdiplusStartupOutput | Uses the GdiplusStartupOutput structure to return (in its output parameter) a pointer to a hook function and a pointer to an unhook function.
GpPathData | Used to get or set the data points (and their types) of a path.
GpPoint | Defines the x- and y-coordinates of a point.
GpPointF | Defines the x- and y-coordinates of a point.
GpRect | Defines the upper-left corner, width, and height of a rectangle.
GpRectF | Defines the upper-left corner, width, and height of a rectangle.
GpSize | Encapsulates a Width and Height dimension in a 2-D coordinate system.
GpSizeF | Encapsulates a Width and Height dimension in a 2-D coordinate system.
ImageCodecInfo | Stores information about an image codec.
LOGFONTA | Defines the attributes of a font.
LOGFONTW | Defines the attributes of a font.
MetafileHeader | Stores properties of an associated metafile.
PropertyItem | Holds one piece of image metadata.
PWMFRect16 | Defines a rectangle that bounds a placeable metafile.
WmfPlaceableFileHeader | Defines the fields of a placeable metafile header.

# Enumerations

Name | Description
--- | ---
BrushType | Indicates the type of brush.
Color | Predefined ARGB colors.
ColorAdjustType | Specifies which GDI+ objects use color-adjustment information.
ColorChannelFlags | Specifies individual channels in the CMYK (cyan, magenta, yellow, black) color space.
ColorMatrixFlags | Specifies the types of images and colors that will be affected by the color and grayscale adjustment settings.
ColorMode | ColorModeARGB32 = 0, ColorModeARGB64 = 1.
CombineMode | Specifies how a new region is combined with an existing region.
CompositingMode | Specifies how rendered colors are combined with background colors.
CompositingQuality | Specifies whether gamma correction is applied when colors are blended with background colors.
CoordinateSpace | Specifies coordinate spaces.
CustomLineCapType | CustomLineCapTypeDefault = 0, CustomLineCapTypeAdjustableArrow = 1.
DashCap | Specifies the type of graphic shape to use on both ends of each dash in a dashed line.
DashStyle | Specifies the line style of a line drawn with a Microsoft Windows GDI+ pen.
DriverStringOptions | Specifies the spacing, orientation, and quality of the rendering for driver strings.
EmfPlusRecordType | Identifies metafile record types used in Microsoft Windows Metafile Format (WMF), Enhanced Metafile (EMF), and EMF+ files.
EmfToWmfBitsFlags | Specifies options for the GdipEmfToWmfBits method, which converts an Enhanced Metafile (EMF) metafile to a Microsoft Windows Metafile Format (WMF) metafile.
EmfType | Specifies the nature of the records that are placed in an Enhanced Metafile (EMF) file.
EncoderParameterValueType | Specifies data types for image codec (encoder/decoder) parameters.
EncoderValue | Specifies values that can be passed as arguments to image encoders.
FillMode | Specifies how to fill areas that are formed when a path or curve intersects itself.
FlushIntention | Specifies when to flush the queue of graphics operations.
FontStyle | Specifies the style of the typeface of a font. Styles can be combined.
GenericFontFamily | GenericFontFamilySerif = 0, GenericFontFamilySansSerif = 1, GenericFontFamilyMonospace = 2.
HatchStyle | Specifies the hatch pattern used by a brush of type HatchBrush.
HistogramFormat | Specifies the number and type of histograms that represent the color channels of a bitmap.
HotkeyPrefix | Specifies how to display hot keys.
ImageFlags | Specifies the attributes of the pixel data contained in an image.
ImageLockMode | Specifies flags that are passed to the flags parameter of the GdipBitmapLockBits function.
ImageType | Indicates whether an image is a bitmap or a metafile.
InterpolationMode | Specifies the algorithm that is used when images are scaled or rotated.
ItemDataPosition | Specifies the location of custom metadata in an image file.
LinearGradientMode | Specifies the direction in which the change of color occurs for a linear gradient brush.
LineCap | Specifies the type of graphic shape to use on the end of a line drawn with a Microsoft Windows GDI+ pen.
LineJoin | Specifies how to join two lines that are drawn by the same pen and whose ends meet.
MatrixOrder | Specifies the order of multiplication when a new matrix is multiplied by an existing matrix.
MetafileFrameUnit | Specifies the unit of measure for a metafile frame rectangle.
MetafileType | Specifies types of metafiles.
ObjectType | Indicates the object type value of an EMF+ record.
PaletteFlags | Indicates attributes of the color data in a palette.
PaletteType | Identify several standard color palette formats.
PathPointType | Indicates point types and flags for the data points in a path.
PenAlignment | Specifies the alignment of a pen relative to the stroke that is being drawn.
PenType | Indicates the type of pattern, texture, or gradient that a pen draws.
PixelOffsetMode | Specifies the pixel offset mode.
QualityMode | Specifies the quality mode.
RotateFlipType | Specifies the direction of an image’s rotation and the axis used to flip the image.
SmoothingMode | Specifies the type of smoothing (antialiasing) that is applied to lines and curves.
Status | Indicates the result of a Microsoft Windows GDI+ function call.
StringAlignment | Specifies how a string is aligned in reference to the bounding rectangle.
StringDigitSubstitute | Specifies how to substitute digits in a string according to a user’s locale or language.
StringFormatFlags | Specifies text layout information (such as orientation and clipping) and display manipulations (such as ellipsis insertion, digit substitution, and representation of characters that are not supported by a font).
StringTrimming | Specifies how to trim characters from a string so that the string fits into a layout rectangle.
TestControl | TestControlForceBilinear = 0, TestControlNoICM = 1, TestControlGetBuildNumber = 2.
TextRenderingHint | Specifies the process used to render text.
Unit | Specifies the unit of measure for a given data type.
WarpMode | Specifies warp modes that can be used to transform images.
WrapMode | Specifies how repeated copies of an image are used to tile an area.

# Constants

Name | Description
--- | ---
Image Encoder Constants | GUIDs that specify the various parameter categories of the EncodeParameter objects.
Image File Format Constants | GUIDs that specify the that identify the file formats of an image.
Image Frame Dimension Constants | GUIDs that identify the page and time dimensions.
Image Pixel Format Constants | Pixel formats used in bitmaps.
Image Property Tag Type Constants | Specifies the data type of the values stored in the value data member of a PropertyItem structure.
Image Property Tag Constants | Property items supported by Microsoft Windows GDI+.

## BitmapData Structure

A BitmapData structure stores attributes of a bitmap. Used by the GdipBitmapLockBits and GdipBitmapUnlockBits functions.

    TYPE BitmapData
       Width AS UINT
       Height AS UINT
       Stride AS INT_
       PixelFormat AS PixelFormat
       Scan0 AS ANY PTR
       Reserved AS UINT_PTR
    END TYPE

Member | Description
--- | ---
Width | Number of pixels in one scan line of the bitmap.
Height | Number of scan lines in the bitmap.
Stride | Offset, in bytes, between consecutive scan lines of the bitmap. If the stride is positive, the bitmap is top-down. If the stride is negative, the bitmap is bottom-up.
PixelFormat | Integer that specifies the pixel format of the bitmap.
Scan0 | Pointer to the first (index 0) scan line of the bitmap.
Reserved | Reserved for future use.

## CharacterRange Structure

A CharacterRange structure specifies a range of character positions within a string.

    TYPE CharacterRange
       First AS INT_
       Length AS INT_
    END TYPE

Member | Description
--- | ---
First | Specifies the first position of this range.
Length | Specifies the number of positions in this range.

#### Remarks

A character range is a range of character positions within a string of text. The area of the display that is occupied by a group of characters that are specified by the character range is the bounding region. A character range is set by GdipSetStringFormatMeasurableCharacterRanges. The number of ranges that are currently set can be determined by calling GdipGetStringFormatMeasurableCharacterRangeCount. This number is also the number of regions expected to be obtained by the GdipMeasureCharacterRanges function.

## ColorMap Structure

The ColorMap structure contains two COLORREF values. Several of the ImageAttributes functions adjust image colors by using a color remap table, which is an array of ColorMap structures.

    TYPE ColorMap
       oldColor AS Color
       newColor AS Color
    END TYPE

Member | Description
--- | ---
oldColor | The original color.
newColor | The new color.

#### Remarks

Because the FreeBasic 32-bit headers don’t define the GDI+ ColorMap structure and use the GDI ColorMap one, that has different member names, there is a conflict. To solve it, I have defined an union that can be used to replace ColorMap in both 32 and 64-bit.

    UNION GDIP_COLORMAP
       ' // For compatibility with GDI+
       TYPE
          oldColor AS COLORREF
          newColor AS COLORREF
       END TYPE
       ' // For compatibility with GDI
       TYPE
          from AS COLORREF
          to AS COLORREF
       END TYPE
    END UNION

## ColorMatrix Structure

The ColorMap structure contains two COLORREF values. Several of the ImageAttributes functions adjust image colors by using a color remap table, which is an array of ColorMap structures.

    TYPE ColorMatrix
       m(0 to 5-1, 0 to 5-1) AS REAL
    END TYPE

Member | Description
--- | ---
m | 5x5 array of real numbers.

#### Remarks

A 5x5 color matrix is a homogeneous matrix for a 4-space transformation. The element in the fifth row and fifth column of a 5x5 homogeneous matrix must be 1, and all of the other elements in the fifth column must be 0. Color matrices are used to transform color vectors. The first four components of a color vector hold the red, green, blue, and alpha components (in that order) of a color. The fifth component of a color vector is always 1.

## ColorPalette Structure

The ColorPalette structure defines an array of colors that make up a color palette. The colors are 32-bit ARGB colors.

    TYPE ColorPalette
       Flags AS UINT
       Count AS UINT
       Entries(0) AS ARGB
    END TYPE

Member | Description
--- | ---
Flags | Combination of flags from the PaletteFlags enumeration.
Count | Number of elements in the Entries array.
Entries | Array of ARGB colors.

## EncoderParameter Structure

An EncoderParameter structure holds a parameter that can be passed to an image encoder. An EncoderParameter structure can also be used to receive a list of possible values supported by a particular parameter of a particular image encoder.

    TYPE EncoderParameter
       Guid AS GUID
       NumberOfValues AS ULONG
       Type AS ULONG
       Value AS ANY PTR
    END TYPE

Member | Description
--- | ---
Guid | Identifies the parameter category. GUIDs that represent various parameter categories (EncoderCompression, EncoderColorDepth, and the like) are defined in Gdiplusimaging.inc.
NumberOfValues | Number of values in the array pointed to by the Value data member.
Type | Identifies the data type of the parameter. The EncoderParameterValueType enumeration in Gdiplusenums.inc defines several possible value types.
Value | Pointer to an array of values. Each value has the type specified by the Type data member.

## EncoderParameters Structure

An EncoderParameters structure is an array of EncoderParameter structures along with a data member that specifies the number of EncoderParameter structures in the array.

    TYPE EncoderParameters
       Count AS UINT
       Parameter(0) AS EncoderParameter
    END TYPE

Member | Description
--- | ---
Count | Number of EncoderParameter structures in the array.
Parameter () | Array of EncoderParameter structures.

#### Remarks

When you create an EncoderParameters structure, you must allocate enough memory to hold all of the EncoderParameter structures that will eventually be placed in the array.

## ENHMETAHEADER3 Structure

The ENHMETAHEADER3 structure contains enhanced-metafile data including the dimensions of the metafile image, the number of records in the metafile, and the resolution of the device on which the metafile was created.

    TYPE ENHMETAHEADER3
       itype AS DWORD
       nSize AS DWORD
       rclBounds AS RECTL
       rclFrame AS RECTL
       dSignature AS DWORD
       nVersion AS DWORD
       nBytes AS DWORD
       nRecords AS DWORD
       nHandles AS WORD
       sReserved AS WORD
       nDescription AS DWORD
       offDescription AS DWORD
       nPalEntries AS DWORD
       szlDevice AS SIZEL
       szlMillimeters AS SIZEL
    END TYPE

Member | Description
--- | ---
iType | Record type. Value is always EMR_HEADER.
nSize | Structure size, in bytes. This may be greater than the value returned by SIZEOF (ENHMETAHEADER3).
rclBounds | Bounding rectangle, in device units, for the image stored in the metafile.
rclFrame | Rectangle, in 0.01 millimeter units, that surrounds the image stored in the metafile.
dSignature | Must be ENHMETA_SIGNATURE.
nVersion | Version number of the metafile format. The current version is &H10000.
nBytes | Size, in bytes, of the metafile.
nRecords | Number of records in the metafile.
nHandles | Number of handles in the metafile handle table. Handle index zero is reserved.
sReserved | Reserved. Must be zero.
nDescription | Number of characters in the string that contains the description of the metafile’s contents. This member is 0 if the metafile does not have a description string.
offDescription | Offset from the beginning of the ENHMETAHEADER3 structure to the string that contains the description of the metafile’s contents. This member is 0 if the metafile does not have a description string.
nPalEntries | Number of entries in the metafile palette.
szlDevice | Resolution, in pixels, of the reference device.
szlMillimeters | Resolution, in millimeters, of the reference device.

## GdiplusStartupInput Structure

The GdiplusStartupInput structure holds a block of arguments that are required by the GdiplusStartup function.

    TYPE GdiplusStartupInput
       GdiplusVersion AS UINT32
       DebugEventCallback AS DebugEventProc
       SuppressBackgroundThread AS BOOL
       SuppressExternalCodecs AS BOOL
    END TYPE

Member | Description
--- | ---
GdiplusVersion | Specifies the version of Microsoft Windows GDI+. Must be 1.
DebugEventCallback | Pointer to a callback function that GDI+ can call, on debug builds, for assertions and warnings. The default value is NULL.
SuppressBackgroundThread | Boolean value that specifies whether to suppress the GDI+ background thread. If you set this member to TRUE, GdiplusStartup returns (in its output parameter) a pointer to a hook function and a pointer to an unhook function. You must call those functions appropriately to replace the background thread. If you do not want to be responsible for calling the hook and unhook functions, set this member to FALSE. The default value is FALSE.
SuppressExternalCodecs | Boolean value that specifies whether you want GDI+ to suppress external image codecs. GDI+ version 1.0 does not support external image codecs, so this parameter is ignored.

#### Remarks

The GdiplusStartupInput structure provides a constructor that sets the GdiplusVersion member to 1 and allows you to specify values for the other three members. All of the constructor parameters are optional, so you can declare a variable of type GdiplusStartupInput without passing any arguments to the constructor, and all of the members will be initialized with appropriate default values.

If you set the SuppressBackgroundThread member of the GdiplusStartupinput parameter to TRUE, you must call the hook and unhook functions returned in the output parameter. Call those functions before and after the application’s main message loop; that is, a message loop that is active for the lifetime of GDI+. Call the hook function before the loop starts, and call the unhook function after the loop ends.

## GdiplusStartupOutput Structure

The GdiplusStartup function uses the GdiplusStartupOutput structure to return (in its output parameter) a pointer to a hook function and a pointer to an unhook function. If you set the SuppressBackgroundThread member of the input parameter to TRUE, then you are responsible for calling those functions to replace the Microsoft Windows GDI+ background thread.

Call the hook and unhook functions before and after the application’s main message loop; that is, a message loop that is active for the lifetime of GDI+. Call the hook function before the loop starts, and call the unhook function after the loop ends. The token parameter of the hook function receives an identifier that you should later pass to the unhook function. If you do not pass the proper identifier (the one returned by the hook function) to the unhook function, there will be resource leaks that won’t be cleaned up until the process exits.

If you do not want to be responsible for calling the hook and unhook functions, set the SuppressBackgroundThread member of the input parameter (passed to GdiplusStartup) to FALSE.

    TYPE GdiplusStartupOutput
       NotificationHook AS NotificationHookProc
       NotificationUnhook AS NotificationUnhookProc
    END TYPE

Member | Description
--- | ---
NotificationHook | Receives a pointer to a hook function.
NotificationUnhook | Receives a pointer to an unhook function.

## GpPathData Structure

The GpPathData structure is used by the GdipGetPathData function. It has an array of points and an array of types. Each element in the array of types is a byte that specifies the point type and a set of flags for the corresponding element in the array of points. You can use a GpathData structure to get or set the data points (and their types) of a path.

    TYPE GpPathData
       Count AS INT_
       Points AS GpPointF PTR
       Types AS BYTE PTR
    END TYPE

-also-

    type GpPathData as any

Member | Description
--- | ---
NotificationHook | Receives a pointer to a hook function.
NotificationUnhook | Receives a pointer to an unhook function.

#### Remarks

Because of another mess in the FreeBASIC Gdi+ headers, this structure can’t be used with 32 and 64-bit at the same time. Therefore, I have declared a replacement in AfxGdiPlus.inc.

    TYPE GDIP_PATHDATA
       Count AS LONG
       Points AS GpPointF PTR
       Types AS UBYTE PTR
    END TYPE

## GpPoint Structure

Defines the x- and y-coordinates of a point.

    TYPE GpPoint
       x AS INT_
       y AS INT_
    END TYPE

Member | Description
--- | ---
x | Specifies the x-coordinate of a point.
y | Specifies the y-coordinate of a point.

## GpPointF Structure

Defines the x- and y-coordinates of a point.

    TYPE GpPoint
       x AS FLOAT
       y AS FLOAT
    END TYPE

Member | Description
--- | ---
x | Specifies the x-coordinate of a point.
y | Specifies the y-coordinate of a point.

## GpRect Structure

Defines the upper-left corner, width, and height of a rectangle.

    TYPE GpRect
       x AS INT_
       y AS INT_
       width AS INT_
       height AS INT_
    END TYPE

Member | Description
--- | ---
x | Specifies the x-coordinate of the upper-left corner of a rectangle.
y | Specifies the y-coordinate of the upper-left corner of a rectangle.
width | Specifies the width of a rectangle.
height | Specifies the height of a rectangle.

## GpRectF Structure

Defines the upper-left corner, width, and height of a rectangle.

    TYPE GpRect
       x AS REAL
       y AS REAL
       width AS REAL
       height AS REAL
    END TYPE

Member | Description
--- | ---
x | Specifies the x-coordinate of the upper-left corner of a rectangle.
y | Specifies the y-coordinate of the upper-left corner of a rectangle.
width | Specifies the width of a rectangle.
height | Specifies the height of a rectangle.

## GpSize Structure

Encapsulates a Width and Height dimension in a 2-D coordinate system.

    TYPE GpSize
       Width AS INT_
       Height AS INT_
    END TYPE

Member | Description
--- | ---
Width | Horizontal measurement.
Height | Vertical measurement.

## GpSizeF Structure

Encapsulates a Width and Height dimension in a 2-D coordinate system.

    TYPE GpSizeF
       Width AS REAL
       Height AS REAL
    END TYPE

Member | Description
--- | ---
Width | Horizontal measurement.
Height | Vertical measurement.

## ImageCodecInfo Structure

An ImageCodecInfo structure stores information about an image codec (encoder/decoder). GDI+ provides several built-in image codecs. You can obtain information about those codecs by calling the GetImageEncoders function and the GetImageDecoders function. Each of those functions returns an array of ImageCodecInfo structures, one for each available encoder or decoder.

    TYPE ImageCodecInfo
       Clsid AS CLSID
       FormatID AS GUID
       CodecName AS WCHAR PTR
       DllName AS WCHAR PTR
       FormatDescription AS WCHAR PTR
       FilenameExtension AS WCHAR PTR
       MimeType AS WCHAR PTR
       Flags AS DWORD
       Version AS DWORD
       SigCount AS DWORD
       SigSize AS DWORD
       SigPattern AS UBYTE PTR
       SigMask AS UBYTE PTR
    END TYPE

Member | Description
--- | ---
Clsid | Codec identifier.
FormatID | File format identifier. GUIDs that identify various file formats (ImageFormatBMP, ImageFormatEMF, and the like) are defined in Gdiplusimaging.inc.
CodecName | Pointer to a null-terminated wide string that contains the codec name.
DllName | Pointer to a null-terminated wide string that contains the path name of the DLL in which the codec resides. If the codec is not in a DLL, this pointer is NULL.
FormatDescription | Pointer to a null-terminated wide string that contains the name of the file format used by the codec.
FilenameExtension | Pointer to a null-terminated wide string that contains all file-name extensions associated with the codec. The extensions are separated by semicolons.
MimeType | Pointer to a null-terminated wide string that contains the mime type of the codec.
Flags | Combination of flags from the ImageCodecFlags enumeration.
Version | Integer that indicates the version of the codec.
SigCount | Integer that indicates the number of signatures used by the file format associated with the codec.
SigSize | Integer that indicates the number of bytes in each signature.
SigPattern | Pointer to an array of bytes that contains the pattern for each signature.
SigMask | Pointer to an array of bytes that contains the mask for each signature.

## LOGFONTA Structure

Defines the attributes of a font.

    TYPE LOGFONTA
       lfHeight AS LONG
       lfWidth AS LONG
       lfEscapement AS LONG
       lfOrientation AS LONG
       lfWeight AS LONG
       lfItalic AS UBYTE
       lfUnderline AS UBYTE
       lfStrikeOut AS UBYTE
       lfCharSet AS UBYTE
       lfOutPrecision AS UBYTE
       lfClipPrecision AS UBYTE
       lfQuality AS UBYTE
       lfPitchAndFamily AS UBYTE
       lfFaceName AS ZSTRING * 32   ' LF_FACESIZE
    END TYPE

Member | Description
--- | ---
lfHeight | Value of type LONG that specifies the height, in logical units, of the font’s character cell or character.
lfWidth | Value of type LONG that specifies the width, in logical units, of characters in the font.
lfEscapement | Value of type LONG that contains the angle, in tenths of degrees, between the escapement vector and the x-axis of the device. The escapement vector is parallel to the base line of a row of text.
lfOrientation | Value of type LONG that specifies the angle, in tenths of degrees, between each character’s base line and the x-axis of the device.
lfWeight | Value of type LONG that specifies the weight of the font in the range from 0 through 1000.
lfItalic | Value of type BYTE that specifies an italic font if set to TRUE.
lfUnderline | Value of type BYTE that specifies an underlined font if set to TRUE.
lfStrikeOut | Value of type BYTE that specifies a strikeout font if set to TRUE.
lfCharSet | Value of type BYTE that specifies the character set.
lfOutPrecision | Value of type BYTE that specifies the output precision. The output precision defines how closely the output must match the requested font’s height, width, character orientation, escapement, pitch, and font type.
lfClipPrecision | Value of type BYTE that specifies the clipping precision. The clipping precision defines how to clip characters that are partially outside the clipping region.
lfQuality | Value of type BYTE that specifies the output quality. The output quality defines how carefully the Microsoft Windows Graphics Device Interface (GDI) must attempt to match the logical-font attributes to those of an actual physical font.
lfPitchAndFamily | Value of type BYTE that specifies the pitch and family of the font.
lfFaceName | Array of characters that contains a null-terminated string that specifies the typeface name of the font. The length of the string must not exceed 32 characters, including the NULL terminator.

## LOGFONTW Structure

Defines the attributes of a font.

    TYPE LOGFONTW
       lfHeight AS LONG
       lfWidth AS LONG
       lfEscapement AS LONG
       lfOrientation AS LONG
       lfWeight AS LONG
       lfItalic AS UBYTE
       lfUnderline AS UBYTE
       lfStrikeOut AS UBYTE
       lfCharSet AS UBYTE
       lfOutPrecision AS UBYTE
       lfClipPrecision AS UBYTE
       lfQuality AS UBYTE
       lfPitchAndFamily AS UBYTE
       lfFaceName AS WSTRING * 32   ' LF_FACESIZE
    END TYPE

Member | Description
--- | ---
lfHeight | Value of type LONG that specifies the height, in logical units, of the font’s character cell or character.
lfWidth | Value of type LONG that specifies the width, in logical units, of characters in the font.
lfEscapement | Value of type LONG that contains the angle, in tenths of degrees, between the escapement vector and the x-axis of the device. The escapement vector is parallel to the base line of a row of text.
lfOrientation | Value of type LONG that specifies the angle, in tenths of degrees, between each character’s base line and the x-axis of the device.
lfWeight | Value of type LONG that specifies the weight of the font in the range from 0 through 1000.
lfItalic | Value of type BYTE that specifies an italic font if set to TRUE.
lfUnderline | Value of type BYTE that specifies an underlined font if set to TRUE.
lfStrikeOut | Value of type BYTE that specifies a strikeout font if set to TRUE.
lfCharSet | Value of type BYTE that specifies the character set.
lfOutPrecision | Value of type BYTE that specifies the output precision. The output precision defines how closely the output must match the requested font’s height, width, character orientation, escapement, pitch, and font type.
lfClipPrecision | Value of type BYTE that specifies the clipping precision. The clipping precision defines how to clip characters that are partially outside the clipping region.
lfQuality | Value of type BYTE that specifies the output quality. The output quality defines how carefully the Microsoft Windows Graphics Device Interface (GDI) must attempt to match the logical-font attributes to those of an actual physical font.
lfPitchAndFamily | Value of type BYTE that specifies the pitch and family of the font.
lfFaceName | Array of wide characters that contains a null-terminated string that specifies the typeface name of the font. The length of the string must not exceed 32 characters, including the NULL terminator.

## MetafileHeader Structure

A MetafileHeader structure stores properties of an associated metafile.

    UNION MetafileHeader_UNION
       WmfHeader AS METAHEADER
       EmfHeader AS ENHMETAHEADER3
    END UNION

    TYPE MetafileHeader
       Type_ AS MetafileType     ' // The type of the associated metafile
       Size AS UINT              ' // Size of the metafile (in bytes)
       Version AS UINT           ' // EMF+, EMF, or WMF version
       EmfPlusFlags AS UINT
       DpiX AS REAL
       DpiY AS REAL
       X AS INT_                 ' // Bounds in device units
       Y AS INT_
       Width AS INT_
       Height AS INT_
       union
          WmfHeader as METAHEADER
          EmfHeader as ENHMETAHEADER3
       end union
       EmfPlusHeaderSize AS INT_ ' // size of the EMF+ header in file
       LogicalDpiX AS INT_       ' // Logical Dpi of reference Hdc
       LogicalDpiY AS INT_       ' // usually valid only for EMF+
    END TYPE

#### Remarks

Metafiles provide a device-independent and application-independent way to share pictures. They contain records that describe a sequence of graphics application programming interfaces (APIs) to invoke in a particular order with their associated graphics data. Metafiles can be recorded by an application and later played back by that application or by another one to reproduce a particular picture. They can also be used to send content to a print spooler. Enhanced metafiles support the ability to provide both Microsoft Windows GDI+ and Windows Graphics Device Interface (GDI) descriptions of the same picture so that both GDI+ and down-level GDI applications can render it.

## PropertyItem Structure

A PropertyItem structure holds one piece of image metadata.

    TYPE PropertyItem
       id AS PROPID
       length AS ULONG
       wtype AS WORD
       value AS ANY PTR
    END TYPE

Member | Description
--- | ---
id | Integer that identifies the kind of metadata stored in this PropertyItem object. Constants that identify various kinds of metadata (PropertyTagEquipMake, PropertyTagEquipModel, and the like) are defined in Gdiplusimaging.inc. The PROPID data type is defined in Wtypes.inc.
length | Size, in bytes, of the value array.
wtype | Integer that identifies the data type of the values in the value array. Constants that identify various data types (PropertyTagTypeByte, PropertyTagTypeASCII, and the like) are defined in Gdiplusimaging.inc.
value | Pointer to an array of values. Each value in the array has the data type specified by the type data member.

## PWMFRect16 Structure

The PWMFRect16 structure defines a rectangle that bounds a placeable metafile. The rectangle defines the size and position of the metafile.

    TYPE PWMFRect16
       Left AS INT16
       Top AS INT16
       Right AS INT16
       Bottom AS INT16
    END TYPE

Member | Description
--- | ---
Left | Left coordinate of the rectangle that bounds the metafile.
Top | Top coordinate of the rectangle that bounds the metafile.
Right | Right coordinate of the rectangle that bounds the metafile.
Bottom | Bottom coordinate of the rectangle that bounds the metafile.

## WmfPlaceableFileHeader Structure

The WmfPlaceableFileHeader structure defines the fields of a placeable metafile header. Placeable metafiles were created as a way of specifying how a metafile is mapped and scaled on a display device.

    TYPE WmfPlaceableFileHeader
       Key AS UINT32
       Hmf AS INT16
       BoundingBox AS PWMFRect16
       Inch AS INT16
       Reserved AS UINT32
       Checksum AS INT16
    END TYPE

Member | Description
--- | ---
Key | Identification value that indicates the presence of a placeable metafile header. This value is always &h9AC6CDD7.
Hmf | Handle to the metafile in memory. When written to disk, this field is not used and will always contains the value 0.
BoundingBox | Destination rectangle, measured in twips, for displaying the metafile.
Inch | Number of twips per inch used to represent the image. Normally, there are 1440 twips per inch; however, this number can be changed to scale the image. * A value of 720 specifies that the image is twice its normal size. * A value of 360 specifies that the image is four times its normal size. * A value of 2880 specifies that the image is half its normal size.
Reserved | Not used and is always set to 0.
Checksum | Checksum for the previous 10 WORDs in the header. This value can be used to determine whether the metafile has become corrupted.

#### Remarks

Although placeable metafiles are quite common, they are not directly supported by the Microsoft Windows application programming interface (API). To display a placeable metafile using the Windows API, you must first strip the placeable metafile header from the file. This is typically performed by copying the metafile to a temporary file starting at file offset 22 (0x16). This is because each placeable metafile begins with a 22-byte header that is followed by a standard metafile.

## BrushType Enumeration

The BrushType enumeration indicates the type of brush. There are five types of brushes.

    BrushTypeSolidColor = 0
    BrushTypeHatchFill = 1
    BrushTypeTextureFill = 2
    BrushTypePathGradient = 3
    BrushTypeLinearGradient = 4

Constant | Meaning
--- | ---
BrushTypeSolidColor | Indicates a brush of type SolidBrush. A solid brush paints a single, constant color that can be opaque or transparent.
BrushTypeHatchFill | Indicates a brush of type HatchBrush. A hatch brush paints a background and paints, over that background, a pattern of lines, dots, dashes, squares, crosshatch, or some variation of these. The hatch brush consists of two colors: one for the background and one for the pattern over the background. The color of the background is called the background color, and the color of the pattern is called the foreground color.
BrushTypeTextureFill | Indicates a brush of type TextureBrush. A texture brush paints an image. The image or texture is either a portion of a specified image or a scaled version of a specified image. The type of image (metafile or nonmetafile) determines whether the texture is a portion of the image or a scaled version of the image.
BrushTypePathGradient | Indicates a brush of type PathGradientBrush. A path gradient brush paints a color gradient in which the color changes from a center point outward to a boundary that is defined by a closed curve or path. The color gradient has one color at the center point and one or multiple colors at the boundary.
BrushTypeLinearGradient | Indicates a brush of type LinearGradientBrush. A linear gradient brush paints a color gradient in which the color changes evenly from the starting boundary line of the linear gradient brush to the ending boundary line of the linear gradient brush. The boundary lines of a linear gradient brush are two parallel straight lines. The color gradient is perpendicular to the boundary lines of the linear gradient brush, changing gradually across the stroke from the starting boundary line to the ending boundary line. The color gradient has one color at the starting boundary line and another color at the ending boundary line.

## Color Enumeration

    AliceBlue = &hFFF0F8FF
    AntiqueWhite = &hFFFAEBD7
    Aqua = &hFF00FFFF
    Aquamarine = &hFF7FFFD4
    Azure = &hFFF0FFFF
    Beige = &hFFF5F5DC
    Bisque = &hFFFFE4C4
    Black = &hFF000000
    BlanchedAlmond = &hFFFFEBCD
    Blue = &hFF0000FF
    BlueViolet = &hFF8A2BE2
    Brown = &hFFA52A2A
    BurlyWood = &hFFDEB887
    CadetBlue = &hFF5F9EA0
    Chartreuse = &hFF7FFF00
    Chocolate = &hFFD2691E
    Coral = &hFFFF7F50
    CornflowerBlue = &hFF6495ED
    Cornsilk = &hFFFFF8DC
    Crimson = &hFFDC143C
    Cyan = &hFF00FFFF
    DarkBlue = &hFF00008B
    DarkCyan = &hFF008B8B
    DarkGoldenrod = &hFFB8860B
    DarkGray = &hFFA9A9A9
    DarkGreen = &hFF006400
    DarkKhaki = &hFFBDB76B
    DarkMagenta = &hFF8B008B
    DarkOliveGreen = &hFF556B2F
    DarkOrange = &hFFFF8C00
    DarkOrchid = &hFF9932CC
    DarkRed = &hFF8B0000
    DarkSalmon = &hFFE9967A
    DarkSeaGreen = &hFF8FBC8B
    DarkSlateBlue = &hFF483D8B
    DarkSlateGray = &hFF2F4F4F
    DarkTurquoise = &hFF00CED1
    DarkViolet = &hFF9400D3
    DeepPink = &hFFFF1493
    DeepSkyBlue = &hFF00BFFF
    DimGray = &hFF696969
    DodgerBlue = &hFF1E90FF
    Firebrick = &hFFB22222
    FloralWhite = &hFFFFFAF0
    ForestGreen = &hFF228B22
    Fuchsia = &hFFFF00FF
    Gainsboro = &hFFDCDCDC
    GhostWhite = &hFFF8F8FF
    Gold = &hFFFFD700
    Goldenrod = &hFFDAA520
    Gray = &hFF808080
    Green = &hFF008000
    GreenYellow = &hFFADFF2F
    Honeydew = &hFFF0FFF0
    HotPink = &hFFFF69B4
    IndianRed = &hFFCD5C5C
    Indigo = &hFF4B0082
    Ivory = &hFFFFFFF0
    Khaki = &hFFF0E68C
    Lavender = &hFFE6E6FA
    LavenderBlush = &hFFFFF0F5
    LawnGreen = &hFF7CFC00
    LemonChiffon = &hFFFFFACD
    LightBlue = &hFFADD8E6
    LightCoral = &hFFF08080
    LightCyan = &hFFE0FFFF
    LightGoldenrodYellow = &hFFFAFAD2
    LightGray = &hFFD3D3D3
    LightGreen = &hFF90EE90
    LightPink = &hFFFFB6C1
    LightSalmon = &hFFFFA07A
    LightSeaGreen = &hFF20B2AA
    LightSkyBlue = &hFF87CEFA
    LightSlateGray = &hFF778899
    LightSteelBlue = &hFFB0C4DE
    LightYellow = &hFFFFFFE0
    Lime = &hFF00FF00
    LimeGreen = &hFF32CD32
    Linen = &hFFFAF0E6
    Magenta = &hFFFF00FF
    Maroon = &hFF800000
    MediumAquamarine = &hFF66CDAA
    MediumBlue = &hFF0000CD
    MediumOrchid = &hFFBA55D3
    MediumPurple = &hFF9370DB
    MediumSeaGreen = &hFF3CB371
    MediumSlateBlue = &hFF7B68EE
    MediumSpringGreen = &hFF00FA9A
    MediumTurquoise = &hFF48D1CC
    MediumVioletRed = &hFFC71585
    MidnightBlue = &hFF191970
    MintCream = &hFFF5FFFA
    MistyRose = &hFFFFE4E1
    Moccasin = &hFFFFE4B5
    NavajoWhite = &hFFFFDEAD
    Navy = &hFF000080
    OldLace = &hFFFDF5E6
    Olive = &hFF808000
    OliveDrab = &hFF6B8E23
    Orange = &hFFFFA500
    OrangeRed = &hFFFF4500
    Orchid = &hFFDA70D6
    PaleGoldenrod = &hFFEEE8AA
    PaleGreen = &hFF98FB98
    PaleTurquoise = &hFFAFEEEE
    PaleVioletRed = &hFFDB7093
    PapayaWhip = &hFFFFEFD5
    PeachPuff = &hFFFFDAB9
    Peru = &hFFCD853F
    Pink = &hFFFFC0CB
    Plum = &hFFDDA0DD
    PowderBlue = &hFFB0E0E6
    Purple = &hFF800080
    Red = &hFFFF0000
    RosyBrown = &hFFBC8F8F
    RoyalBlue = &hFF4169E1
    SaddleBrown = &hFF8B4513
    Salmon = &hFFFA8072
    SandyBrown = &hFFF4A460
    SeaGreen = &hFF2E8B57
    SeaShell = &hFFFFF5EE
    Sienna = &hFFA0522D
    Silver = &hFFC0C0C0
    SkyBlue = &hFF87CEEB
    SlateBlue = &hFF6A5ACD
    SlateGray = &hFF708090
    Snow = &hFFFFFAFA
    SpringGreen = &hFF00FF7F
    SteelBlue = &hFF4682B4
    Tan = &hFFD2B48C
    Teal = &hFF008080
    Thistle = &hFFD8BFD8
    Tomato = &hFFFF6347
    Transparent = &hFFFFFF
    Turquoise = &hFF40E0D0
    Violet = &hFFEE82EE
    Wheat = &hFFF5DEB3
    White = &hFFFFFFFF
    WhiteSmoke = &hFFF5F5F5
    Yellow = &hFFFFFF00
    YellowGreen = &hFF9ACD32

    AlphaShift = 24
    RedShift = 16
    GreenShift = 8
    BlueShift = 0

    AlphaMask = &hFF000000
    RedMask = &h00FF0000
    GreenMask = &h0000FF00
    BlueMask = &h000000FF

## ColorAdjustType Enumeration

The ColorAdjustType enumeration specifies which GDI+ objects use color-adjustment information. You can adjust the colors in a rendered image using the ImageAttributes functions. There are five adjustment categories: default, bitmap, brush, pen, and text.

    ColorAdjustTypeDefault = 0
    ColorAdjustTypeBitmap  = 1
    ColorAdjustTypeBrush   = 2
    ColorAdjustTypePen     = 3
    ColorAdjustTypeText    = 4
    ColorAdjustTypeCount   = 5
    ColorAdjustTypeAny     = 6

Constant | Meaning
--- | ---
ColorAdjustTypeDefault | Specifies that color or grayscale adjustment applies to all categories that do not have adjustment settings of their own.
ColorAdjustTypeBitmap | Specifies that color or grayscale adjustment applies to bitmapped images.
ColorAdjustTypeBrush | Specifies that color or grayscale adjustment applies to brush operations in metafiles.
ColorAdjustTypePen | Specifies that color or grayscale adjustment applies to pen operations in metafiles.
ColorAdjustTypeText | Specifies that color or grayscale adjustment applies to text drawn in metafiles.
ColorAdjustTypeCount | Used internally to record the number of color adjustment types.
ColorAdjustTypeAny | Reserved.

## ColorChannelFlags Enumeration

The ColorChannelFlags enumeration specifies individual channels in the CMYK (cyan, magenta, yellow, black) color space. This enumeration is used by the GdipSetImageAttributesOutputChannel function.

    ColorChannelFlagsC    = 0
    ColorChannelFlagsM    = 1
    ColorChannelFlagsY    = 2
    ColorChannelFlagsK    = 3
    ColorChannelFlagsLast = 4

Constant | Meaning
--- | ---
ColorChannelFlagsC | Specifies the cyan color channel.
ColorChannelFlagsM | Specifies the magenta color channel.
ColorChannelFlagsY | Specifies the yellow color channel.
ColorChannelFlagsK | Specifies the black color channel.

## ColorMatrixFlags Enumeration

The ColorMatrixFlags enumeration specifies the types of images and colors that will be affected by the color and grayscale adjustment settings. It is used by the GdipSetImageAttributesColorMatrix function.

    ColorMatrixFlagsDefault = 0
    ColorMatrixFlagsSkipGrays = 1
    ColorMatrixFlagsAltGray = 2

Constant | Meaning
--- | ---
ColorMatrixFlagsDefault | Specifies that all color values (including grays) are adjusted by the same color-adjustment matrix.
ColorMatrixFlagsSkipGrays | Specifies that colors are adjusted but gray shades are not adjusted. A gray shade is any color that has the same value for its red, green, and blue components.
ColorMatrixFlagsAltGray | Specifies that colors are adjusted by one matrix and gray shades are adjusted by another matrix.

## ColorMode Enumeration

    ColorModeARGB32 = 0
    ColorModeARGB64 = 1

## CombineMode Enumeration

The CombineMode enumeration specifies how a new region is combined with an existing region.

    CombineModeReplace      = 0
    CombineModeIntersect    = 1
    CombineModeUnion        = 2
    CombineModeXor          = 3
    CombineModeExclude      = 4
    CombineModeComplement   = 5

Constant | Meaning
--- | ---
CombineModeReplace | Specifies that the existing region is replaced by the new region.
CombineModeIntersect | Specifies that the existing region is replaced by the intersection of itself and the new region.
CombineModeUnion | Specifies that the existing region is replaced by the union of itself and the new region.
CombineModeXor | Specifies that the existing region is replaced by the result of performing an XOR on the two regions. A point is in the XOR of two regions if it is in one region or the other but not in both regions.
CombineModeExclude | Specifies that the existing region is replaced by the portion of itself that is outside of the new region.
CombineModeComplement | Specifies that the existing region is replaced by the portion of the new region that is outside of the existing region.

## CompositingMode Enumeration

The CompositingMode enumeration specifies how rendered colors are combined with background colors. This enumeration is used by the GdipGetCompositingMode and GdipSetCompositingMode functions.

    CompositingModeSourceOver = 0
    CompositingModeSourceCopy = 1

Constant | Meaning
--- | ---
CompositingModeSourceOver | Specifies that when a color is rendered, it is blended with the background color. The blend is determined by the alpha component of the color being rendered.
CompositingModeSourceCopy | Specifies that when a color is rendered, it overwrites the background color. This mode cannot be used along with TextRenderingHintClearTypeGridFit.

## CompositingQuality Enumeration

The CompositingQuality enumeration specifies whether gamma correction is applied when colors are blended with background colors. This enumeration is used by the GdipGetCompositingQuality and GdipSetCompositingQuality functions.

    CompositingQualityInvalid        = QualityModeInvalid
    CompositingQualityDefault        = QualityModeDefault
    CompositingQualityHighSpeed      = QualityModeLow
    CompositingQualityHighQuality    = QualityModeHigh
    CompositingQualityGammaCorrected = 3
    CompositingQualityAssumeLinear   = 4

Constant | Meaning
--- | ---
CompositingQualityDefault | Specifies that gamma correction is not applied.
CompositingQualityHighSpeed | Specifies that gamma correction is not applied.
CompositingQualityHighQuality | Specifies that gamma correction is applied.
CompositingQualityGammaCorrected | Specifies that gamma correction is applied.
CompositingQualityAssumeLinear | Specifies that gamma correction is not applied.

#### Remarks

When you specify that gamma correction should not be applied, the image data to be rendered (blended with the background) is assumed to be in a linear color space with a gamma value of 1.0. As a result, no gamma adjustment is applied to the image data before or after blending the image with the background.

When you specify that gamma correction should be applied, the image data to be rendered (blended with the background) is assumed to be in the sRGB color space with a gamma value of 2.2. To ensure accurate blending, the input image data is transformed into a linear (gamma = 1.0) space before the colors are blended and transformed back into sRGB (gamma = 2.2) space afterward. This mode results in a more accurate blend at the expense of additional processing time.

## CoordinateSpace Enumeration

The CoordinateSpace enumeration specifies coordinate spaces. This enumeration is used by the GdipTransformPoints and GdipTransformPointsI functions, which converts points from one coordinate space to another.

    CoordinateSpaceWorld  = 0
    CoordinateSpacePage   = 1
    CoordinateSpaceDevice = 2

Constant | Meaning
--- | ---
CoordinateSpaceWorld | Specifies the world coordinate space.
CoordinateSpacePage | Specifies the page coordinate space.
CoordinateSpaceDevice | Specifies the device coordinate space.

## CustomLineCapType Enumeration

    CustomLineCapTypeDefault = 0
    CustomLineCapTypeAdjustableArrow = 1

## DashCap Enumeration

The DashCap enumeration specifies the type of graphic shape to use on both ends of each dash in a dashed line.

    DashCapFlat = 0
    DashCapRound = 2
    DashCapTriangle = 3

Constant | Meaning
--- | ---
DashCapFlat | Specifies a square cap that squares off both ends of each dash.
DashCapRound | Specifies a circular cap that rounds off both ends of each dash.
DashCapTriangle | Specifies a triangular cap that points both ends of each dash.

#### Remarks

If you set the alignment of a Pen to PenAlignmentInset, you cannot use that pen to draw triangular dash caps.

## DashStyle Enumeration

The DashStyle enumeration specifies the line style of a line drawn with a Microsoft Windows GDI+ pen. The line can be drawn by using one of several predefined styles or a custom style.

    DashStyleSolid      = 0
    DashStyleDash       = 1
    DashStyleDot        = 2
    DashStyleDashDot    = 3
    DashStyleDashDotDot = 4
    DashStyleCustom     = 5

Constant | Meaning
--- | ---
DashStyleSolid | Specifies a solid line.
DashStyleDash | Specifies a dashed line.
DashStyleDot | Specifies a dotted line.
DashStyleDashDot | Specifies an alternating dash-dot line.
DashStyleDashDotDot | Specifies an alternating dash-dot-dot line.
DashStyleCustom | Specifies a user-defined, custom dashed line.

## DriverStringOptions Enumeration

The DriverStringOptions enumeration specifies the spacing, orientation, and quality of the rendering for driver strings.

    DriverStringOptionsCmapLookup      = 1
    DriverStringOptionsVertical        = 2
    DriverStringOptionsRealizedAdvance = 4
    DriverStringOptionsLimitSubpixel   = 8

Constant | Meaning
--- | ---
DriverStringOptionsCmapLookup | Specifies that the positions of the glyphs are taken from a character map lookup table. If this flag is not set, the positions are taken from an array of coordinates.
DriverStringOptionsVertical | Specifies that the string is displayed vertically.
DriverStringOptionsRealizedAdvance | Specifies that the glyph positions are calculated from the position of the first glyph. If this flag is not set, the glyph positions are obtained from an array of coordinates.
DriverStringOptionsLimitSubpixel | Specifies that less memory should be used for cache of antialiased glyphs. This also produces lower quality. If this flag is set, more memory is used, but the quality is higher.

## EmfToWmfBitsFlags Enumeration

Specifies options for the GdipEmfToWmfBits method, which converts an Enhanced Metafile (EMF) metafile to a Microsoft Windows Metafile Format (WMF) metafile.

    EmfToWmfBitsFlagsDefault          = &H00000000
    EmfToWmfBitsFlagsEmbedEmf         = &H00000001
    EmfToWmfBitsFlagsIncludePlaceable = &H00000002
    EmfToWmfBitsFlagsNoXORClip        = &H00000004

Constant | Meaning
--- | ---
EmfToWmfBitsFlagsDefault | Specifies the default conversion.
EmfToWmfBitsFlagsEmbedEmf | Specifies that the source EMF metafile is embedded as a comment in the resulting WMF metafile.
EmfToWmfBitsFlagsIncludePlaceable | Specifies that the resulting WMF metafile is in the placeable metafile format; that is, it has the additional 22-byte header required by a placeable metafile.
EmfToWmfBitsFlagsNoXORClip | Specifies that the clipping region is stored in the metafile in the traditional way. If you do not set this flag, the GdipEmfToWmfBits function applies an optimization that stores the clipping region as a path and simulates clipping by using the XOR operator.

## EmfType Enumeration

The EmfType enumeration specifies the nature of the records that are placed in an Enhanced Metafile (EMF) file.

    EmfTypeEmfOnly = MetafileTypeEmf
    EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly
    EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual

Constant | Meaning
--- | ---
EmfTypeEmfOnly | Specifies that all of the records in the metafile are EMF records, which can be displayed by GDI or GDI+.
EmfTypeEmfPlusOnly | Specifies that all of the records in the metafile are EMF+ records, which can be displayed by GDI+ but not by GDI.
EmfTypeEmfPlusDual | Specifies that all EMF+ records in the metafile are associated with an alternate EMF record. Metafiles of type EmfTypeEmfPlusDual can be displayed by GDI or by GDI+.

## EncoderParameterValueType Enumeration

The EncoderParameterValueType enumeration specifies data types for image codec (encoder/decoder) parameters. An element of this enumeration is assigned to the Type data member of an EncoderParameter structure.

    EncoderParameterValueTypeByte = 1
    EncoderParameterValueTypeASCII = 2
    EncoderParameterValueTypeShort = 3
    EncoderParameterValueTypeLong = 4
    EncoderParameterValueTypeRational = 5
    EncoderParameterValueTypeLongRange = 6
    EncoderParameterValueTypeUndefined = 7
    EncoderParameterValueTypeRationalRange = 8
    EncoderParameterValueTypePointer = 9

Constant | Meaning
--- | ---
EncoderParameterValueTypeByte | Specifies that the parameter is an 8-bit unsigned integer.
EncoderParameterValueTypeASCII | Specifies that the parameter is a null-terminated character string.
EncoderParameterValueTypeShort | Specifies that the parameter is a 16-bit unsigned integer.
EncoderParameterValueTypeLong | Specifies that the parameter is a 32-bit unsigned integer.
EncoderParameterValueTypeRational | Specifies that the parameter is an array of two, 32-bit unsigned integers. The pair of integers represents a fraction. The first integer in the pair is the numerator, and the second integer in the pair is the denominator.
EncoderParameterValueTypeLongRange | Specifies that the parameter is an array of two, 32-bit unsigned integers. The pair of integers represents a range of numbers. The first integer is the smallest number in the range, and the second integer is the largest number in the range.
EncoderParameterValueTypeUndefined | Specifies that the parameter is an array of bytes that can hold values of any type.
EncoderParameterValueTypeRationalRange | Specifies that the parameter is an array of four, 32-bit unsigned integers. The first two integers represent one fraction, and the second two integers represent a second fraction. The two fractions represent a range of rational numbers. The first fraction is the smallest rational number in the range, and the second fraction is the largest rational number in the range.
EncoderParameterValueTypePointer | Specifies that the parameter is a pointer to a block of custom metadata.

## EncoderValue Enumeration

The EncoderValue enumeration specifies values that can be passed as arguments to image encoders.

    EncoderValueColorTypeCMYK             = 0
    EncoderValueColorTypeYCCK             = 1
    EncoderValueCompressionLZW            = 2
    EncoderValueCompressionCCITT3         = 3
    EncoderValueCompressionCCITT4         = 4
    EncoderValueCompressionRle            = 5
    EncoderValueCompressionNone           = 6
    EncoderValueScanMethodInterlaced      = 7
    EncoderValueScanMethodNonInterlaced   = 8
    EncoderValueVersionGif87              = 9
    EncoderValueVersionGif89              = 10
    EncoderValueRenderProgressive         = 11
    EncoderValueRenderNonProgressive      = 12
    EncoderValueTransformRotate90         = 13
    EncoderValueTransformRotate180        = 14
    EncoderValueTransformRotate270        = 15
    EncoderValueTransformFlipHorizontal   = 16
    EncoderValueTransformFlipVertical     = 17
    EncoderValueMultiFrame                = 18
    EncoderValueLastFrame                 = 19
    EncoderValueFlush                     = 20
    EncoderValueFrameDimensionTime        = 21
    EncoderValueFrameDimensionResolution  = 22
    EncoderValueFrameDimensionPage        = 23
    EncoderValueColorTypeGray             = 24
    EncoderValueColorTypeRGB              = 25

Constant | Meaning
--- | ---
EncoderValueColorTypeCMYK | Not used in GDI+ version 1.0.
EncoderValueColorTypeYCCK | Not used in GDI+ version 1.0.
EncoderValueCompressionLZW | For a TIFF image, specifies the LZW compression method.
EncoderValueCompressionCCITT3 | For a TIFF image, specifies the CCITT3 compression method.
EncoderValueCompressionCCITT4 | For a TIFF image, specifies the CCITT4 compression method.
EncoderValueCompressionRle | For a TIFF image, specifies the RLE compression method.
EncoderValueCompressionNone | For a TIFF image, specifies no compression.
EncoderValueScanMethodInterlaced | Not used in GDI+ version 1.0.
EncoderValueScanMethodNonInterlaced | Not used in GDI+ version 1.0.
EncoderValueVersionGif87 | Not used in GDI+ version 1.0.
EncoderValueVersionGif89 | Not used in GDI+ version 1.0.
EncoderValueRenderProgressive | Not used in GDI+ version 1.0.
EncoderValueRenderNonProgressive | Not used in GDI+ version 1.0.
EncoderValueTransformRotate90 | For a JPEG image, specifies lossless 90-degree clockwise rotation.
EncoderValueTransformRotate180 | For a JPEG image, specifies lossless 180-degree rotation.
EncoderValueTransformRotate270 | For a JPEG image, specifies lossless 270-degree clockwise rotation.
EncoderValueTransformFlipHorizontal | For a JPEG image, specifies a lossless horizontal flip.
EncoderValueTransformFlipVertical | For a JPEG image, specifies a lossless vertical flip.
EncoderValueMultiFrame | Specifies multiple-frame encoding.
EncoderValueLastFrame | Specifies the last frame of a multiple-frame image.
EncoderValueFlush | Specifies that the encoder object is to be closed.
EncoderValueFrameDimensionTime | Not used in GDI+ version 1.0.
EncoderValueFrameDimensionResolution | Not used in GDI+ version 1.0.
EncoderValueFrameDimensionPage | For a TIFF image, specifies the page frame dimension

## FillMode Enumeration

The FillMode enumeration specifies how to fill areas that are formed when a path or curve intersects itself.

    FillModeAlternate = 0
    FillModeWinding   = 1

Constant | Meaning
--- | ---
FillModeAlternate | Specifies that areas are filled according to the even-odd parity rule. According to this rule, you can determine whether a test point is inside or outside a closed curve as follows: Draw a line from the test point to a point that is distant from the curve. If that line crosses the curve an odd number of times, the test point is inside the curve; otherwise, the test point is outside the curve.
FillModeWinding | Specifies that areas are filled according to the nonzero winding rule. According to this rule, you can determine whether a test point is inside or outside a closed curve as follows: Draw a line from a test point to a point that is distant from the curve. Count the number of times the curve crosses the test line from left to right, and count the number of times the curve crosses the test line from right to left. If those two numbers are the same, the test point is outside the curve; otherwise, the test point is inside the curve.

## FlushIntention Enumeration

The FlushIntention enumeration specifies when to flush the queue of graphics operations.

    FlushIntentionFlush = 0
    FlushIntentionSync = 1

Constant | Meaning
--- | ---
FlushIntentionFlush | When passed to the GdipFlush function, specifies that pending rendering operations are executed as soon as possible. The GdipFlush function is not synchronized with the completion of the rendering operations and might return before the rendering operations are completed.
FlushIntentionSync | When passed to the GdipFlush function, specifies that pending rendering operations are executed as soon as possible. The GdipFlush function is synchronized with the completion of the rendering operations; that is, it will not return until after the rendering operations are completed.

## FontStyle Enumeration

The FontStyle enumeration specifies the style of the typeface of a font. Styles can be combined.

    FontStyleRegular = 0
    FontStyleBold = 1
    FontStyleItalic = 2
    FontStyleBoldItalic = 3
    FontStyleUnderline = 4
    FontStyleStrikeout = 8

Constant | Meaning
--- | ---
FontStyleRegular | Specifies normal weight or thickness of the typeface.
FontStyleBold | Specifies bold typeface. Bold is a heavier weight or thickness.
FontStyleItalic | Specifies italic typeface, which produces a noticeable slant to the vertical stems of the characters.
FontStyleBoldItalic | Specifies the typeface as both bold and italic.
FontStyleUnderline | Specifies underline, which displays a line underneath the baseline of the characters.
FontStyleStrikeout | Specifies strikeout, which displays a horizontal line drawn through the middle of the characters.

## GenericFontFamily Enumeration

    GenericFontFamilySerif = 0
    GenericFontFamilySansSerif = 1
    GenericFontFamilyMonospace = 2

## HatchStyle Enumeration

The HatchStyle enumeration specifies the hatch pattern used by a brush of type HatchBrush. The hatch pattern consists of a solid background color and lines drawn over the background.

    HatchStyleHorizontal                   = 0
    HatchStyleVertical                     = 1
    HatchStyleForwardDiagonal              = 2
    HatchStyleBackwardDiagonal             = 3
    HatchStyleCross                        = 4
    HatchStyleDiagonalCross                = 5
    HatchStyle05Percent                    = 6
    HatchStyle10Percent                    = 7
    HatchStyle20Percent                    = 8
    HatchStyle25Percent                    = 9
    HatchStyle30Percent                    = 10
    HatchStyle40Percent                    = 11
    HatchStyle50Percent                    = 12
    HatchStyle60Percent                    = 13
    HatchStyle70Percent                    = 14
    HatchStyle75Percent                    = 15
    HatchStyle80Percent                    = 16
    HatchStyle90Percent                    = 17
    HatchStyleLightDownwardDiagonal        = 18
    HatchStyleLightUpwardDiagonal          = 19
    HatchStyleDarkDownwardDiagonal         = 20
    HatchStyleDarkUpwardDiagonal           = 21
    HatchStyleWideDownwardDiagonal         = 22
    HatchStyleWideUpwardDiagonal           = 23
    HatchStyleLightVertical                = 24
    HatchStyleLightHorizontal              = 25
    HatchStyleNarrowVertical               = 26
    HatchStyleNarrowHorizontal             = 27
    HatchStyleDarkVertical                 = 28
    HatchStyleDarkHorizontal               = 29
    HatchStyleDashedDownwardDiagonal       = 30
    HatchStyleDashedUpwardDiagonal         = 31
    HatchStyleDashedHorizontal             = 32
    HatchStyleDashedVertical               = 33
    HatchStyleSmallConfetti                = 34
    HatchStyleLargeConfetti                = 35
    HatchStyleZigZag                       = 36
    HatchStyleWave                         = 37
    HatchStyleDiagonalBrick                = 38
    HatchStyleHorizontalBrick              = 39
    HatchStyleWeave                        = 40
    HatchStylePlaid                        = 41
    HatchStyleDivot                        = 42
    HatchStyleDottedGrid                   = 43
    HatchStyleDottedDiamond                = 44
    HatchStyleShingle                      = 45
    HatchStyleTrellis                      = 46
    HatchStyleSphere                       = 47
    HatchStyleSmallGrid                    = 48
    HatchStyleSmallCheckerBoard            = 49
    HatchStyleLargeCheckerBoard            = 50
    HatchStyleOutlinedDiamond              = 51
    HatchStyleSolidDiamond                 = 52
    HatchStyleTotal     = 53
    HatchStyleLargeGrid = HatchStyleCross
    HatchStyleMin       = HatchStyleHorizontal
    HatchStyleMax       = HatchStyleTotal - 1

Constant | Meaning
--- | ---
HatchStyleHorizontal | Specifies horizontal lines.
HatchStyleVertical | Specifies vertical lines.
HatchStyleForwardDiagonal | Specifies diagonal lines that slant to the right from top points to bottom points. The lines are antialiased.
HatchStyleBackwardDiagonal | Specifies diagonal lines that slant to the left from top points to bottom points. The lines are antialiased.
HatchStyleCross | Specifies horizontal and vertical lines that cross at 90-degree angles.
HatchStyleDiagonalCross | Specifies forward diagonal and backward diagonal lines that cross at 90-degree angles. The lines are antialiased.
HatchStyle05Percent | Specifies a 5-percent hatch. The ratio of foreground color to background color is 5:100.
HatchStyle10Percent | Specifies a 10-percent hatch. The ratio of foreground color to background color is 10:100.
HatchStyle20Percent | Specifies a 20-percent hatch. The ratio of foreground color to background color is 20:100.
HatchStyle25Percent | Specifies a 25-percent hatch. The ratio of foreground color to background color is 25:100.
HatchStyle30Percent | Specifies a 30-percent hatch. The ratio of foreground color to background color is 30:100.
HatchStyle40Percent | Specifies a 40-percent hatch. The ratio of foreground color to background color is 40:100.
HatchStyle50Percent | Specifies a 50-percent hatch. The ratio of foreground color to background color is 50:100.
HatchStyle60Percent | Specifies a 60-percent hatch. The ratio of foreground color to background color is 60:100.
HatchStyle70Percent | Specifies a 70-percent hatch. The ratio of foreground color to background color is 70:100.
HatchStyle75Percent | Specifies a 75-percent hatch. The ratio of foreground color to background color is 75:100.
HatchStyle80Percent | Specifies an 80-percent hatch. The ratio of foreground color to background color is 80:100.
HatchStyle90Percent | Specifies a 90-percent hatch. The ratio of foreground color to background color is 90:100.
HatchStyleLightDownwardDiagonal | Specifies diagonal lines that slant to the right from top points to bottom points and are spaced 50 percent closer together than HatchStyleForwardDiagonal but are not antialiased.
HatchStyleLightUpwardDiagonal | Specifies diagonal lines that slant to the left from top points to bottom points and are spaced 50 percent closer together than HatchStyleBackwardDiagonal but are not antialiased.
HatchStyleDarkDownwardDiagonal | Specifies diagonal lines that slant to the right from top points to bottom points, are spaced 50 percent closer together than HatchStyleForwardDiagonal, and are twice the width of HatchStyleForwardDiagonal but are not antialiased.
HatchStyleDarkUpwardDiagonal | Specifies diagonal lines that slant to the left from top points to bottom points, are spaced 50 percent closer together than HatchStyleBackwardDiagonal, and are twice the width of HatchStyleBackwardDiagonal but are not antialiased.
HatchStyleWideDownwardDiagonal | Specifies diagonal lines that slant to the right from top points to bottom points, have the same spacing as HatchStyleForwardDiagonal, and are triple the width of HatchStyleForwardDiagonal but are not antialiased.
HatchStyleWideUpwardDiagonal | Specifies diagonal lines that slant to the left from top points to bottom points, have the same spacing as HatchStyleBackwardDiagonal, and are triple the width of HatchStyleBackwardDiagonal but are not antialiased.
HatchStyleLightVertical | Specifies vertical lines that are spaced 50 percent closer together than HatchStyleVertical.
HatchStyleLightHorizontal | Specifies horizontal lines that are spaced 50 percent closer together than HatchStyleHorizontal.
HatchStyleNarrowVertical | Specifies vertical lines that are spaced 75 percent closer together than HatchStyleVertical (or 25 percent closer together than HatchStyleLightVertical).
HatchStyleNarrowHorizontal | Specifies horizontal lines that are spaced 75 percent closer together than HatchStyleHorizontal ( or 25 percent closer together than HatchStyleLightHorizontal).
HatchStyleDarkVertical | Specifies vertical lines that are spaced 50 percent closer together than HatchStyleVerical and are twice the width of HatchStyleVertical.
HatchStyleDarkHorizontal | Specifies horizontal lines that are spaced 50 percent closer together than HatchStyleHorizontal and are twice the width of HatchStyleHorizontal.
HatchStyleDashedDownwardDiagonal | Specifies horizontal lines that are composed of forward diagonals.
HatchStyleDashedUpwardDiagonal | Specifies horizontal lines that are composed of backward diagonals.
HatchStyleDashedHorizontal | Specifies horizontal dashed lines.
HatchStyleDashedVertical | Specifies vertical dashed lines.
HatchStyleSmallConfetti | Specifies a hatch that has the appearance of confetti.
HatchStyleLargeConfetti | Specifies a hatch that has the appearance of confetti composed of larger pieces than HatchStyleSmallConfetti.
HatchStyleZigZag | Specifies horizontal lines of zigzags.
HatchStyleWave | Specifies horizontal lines of tildes.
HatchStyleDiagonalBrick | Specifies a hatch that has the appearance of a wall of bricks laid in a backward diagonal direction.
HatchStyleHorizontalBrick | Specifies a hatch that has the appearance of a wall of bricks laid horizontally.
HatchStyleWeave | Specifies a hatch that has the appearance of a woven material.
HatchStylePlaid | Specifies a hatch that has the appearance of a plaid material.
HatchStyleDivot | Specifies a hatch that has the appearance of divots.
HatchStyleDottedGrid | Specifies horizontal and vertical dotted lines that cross at 90-degree angles.
HatchStyleDottedDiamond | Specifies forward diagonal and backward diagonal dotted lines that cross at 90-degree angles.
HatchStyleShingle | Specifies a hatch that has the appearance of shingles laid in a forward diagonal direction.
HatchStyleTrellis | Specifies a hatch that has the appearance of a trellis.
HatchStyleSphere | Specifies a hatch that has the appearance of a checkerboard of spheres.
HatchStyleSmallGrid | Specifies horizontal and vertical lines that cross at 90-degree angles and are spaced 50 percent closer together than HatchStyleCross.
HatchStyleSmallCheckerBoard | Specifies a hatch that has the appearance of a checkerboard.
HatchStyleLargeCheckerBoard | Specifies a hatch that has the appearance of a checkerboard with squares that are twice the size of HatchStyleSmallCheckerBoard.
HatchStyleOutlinedDiamond | Specifies forward diagonal and backward diagonal lines that cross at 90-degree angles but are not antialiased.
HatchStyleSolidDiamond | Specifies a hatch that has the appearance of a checkerboard placed diagonally.
HatchStyleTotal | Specifies no hatch thereby allowing the brush to be transparent.
HatchStyleLargeGrid | Specifies HatchStyleCross.
HatchStyleMin | Specifies HatchStyleHorizonal.
HatchStyleMax | Specifies HatchStyleSolidDiamond.

## HistogramFormat Enumeration

The HistogramFormat enumeration specifies the number and type of histograms that represent the color channels of a bitmap. This enumeration is used with the GdipBitmapGetHistogram function.

    HistogramFormatARGB  = 0
    HistogramFormatPARGB = 1
    HistogramFormatRGB   = 2
    HistogramFormatGray  = 3
    HistogramFormatB     = 4
    HistogramFormatG     = 5
    HistogramFormatR     = 6
    HistogramFormatA     = 7

Constant | Meaning
--- | ---
HistogramFormatARGB | Specifies that the GdipBitmapGetHistogram function returns four histograms: one each for the alpha, red, green, and blue channels. The alpha-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The red-channel histogram is written to the buffer pointed to by the channel1 parameter. The green-channel histogram is written to the buffer pointed to by the channel2 parameter. The blue-channel histogram is written to the buffer pointed to by the channel3 parameter.
HistogramFormatPARGB | Specifies that the GdipBitmapGetHistogram function returns four histograms: one each for the alpha, red, green, and blue channels. The red, green, and blue channels are each multiplied by the alpha channel before the histograms are created. The bitmap is not permanently altered when the color channels are multiplied by the alpha channel; that multiplication is only for the purpose of creating the histograms. The alpha-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The red-channel histogram is written to the buffer pointed to by the channel1 parameter. The green-channel histogram is written to the buffer pointed to by the channel2 parameter. The blue-channel histogram is written to the buffer pointed to by the channel3 parameter.
HistogramFormatRGB | Specifies that the GdipBitmapGetHistogram function returns three histograms: one each for the red, green, and blue channels. The red-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The green-channel histogram is written to the buffer pointed to by the channel1 parameter. The blue-channel histogram is written to the buffer pointed to by the channel2 parameter. The channel3 parameter must be set to NULL.
HistogramFormatGray | Specifies that each pixel is converted to a grayscale value in the range 0 through 255, and then one histogram, based on those grayscale value, is returned. The bitmap is not permanently altered by the conversion to grayscale values; those values are calculated only for the purpose of creating the histogram. The grayscale histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The channel1, channel2, and channel3 parameters must be set to NULL.
HistogramFormatB | Specifies that the GdipBitmapGetHistogram function returns a histogram for the blue channel. The blue-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The channel1, channel2, and channel3 parameters must be set to NULL.
HistogramFormatG | Specifies that the GdipBitmapGetHistogram function returns a histogram for the green channel. The green-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The channel1, channel2, and channel3 parameters must be set to NULL.
HistogramFormatR | Specifies that the GdipBitmapGetHistogram function returns a histogram for the red channel. The red-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The channel1, channel2, and channel3 parameters must be set to NULL.
HistogramFormatA | Specifies that the GdipBitmapGetHistogram function returns a histogram for the alpha channel. The alpha-channel histogram is written to the buffer pointed to by the channel0 parameter of the GdipBitmapGetHistogram function. The channel1, channel2, and channel3 parameters must be set to NULL.

## HotkeyPrefix Enumeration

The HotkeyPrefix enumeration specifies how to display hot keys. There are three options: do nothing, display hot keys underlined, and hide the hot key underlines.

    HotkeyPrefixNone = 0
    HotkeyPrefixShow = 1
    HotkeyPrefixHide = 2

Constant | Meaning
--- | ---
HotkeyPrefixNone | Specifies that no hot key processing occurs.
HotkeyPrefixShow | Specifies that Unicode text is scanned for ampersands (&), which are interpreted as hot key markers in the same way as menu and dialog resources are processed in the Windows user interface. All pairs of ampersands are replaced by a single ampersand. All single ampersands are removed and the first character that follows the first single ampersand is displayed underlined.
HotkeyPrefixHide | Specifies that Unicode text is scanned for ampersands (&), which are substituted and removed as in HotkeyPrefixShow but no underline is shown. This option can be used when accessibility hot key underlines are not required.

#### Remarks

Hot keys are keys that are programmed to provide keyboard shortcuts to functionality and are activated by pressing the ALT key. The keys are application dependent and are identified by an underscored letter, typically in a menu. An example would be the File menu with the letter F underscored. This makes the F key a hot key to launch the File menu.

## ImageFlags Enumeration

The ImageFlags enumeration specifies the attributes of the pixel data contained in an image. The GdipGetImageFlags function returns an element of this enumeration.

    ImageFlagsNone                = 0
    '// Low-word: shared with SINKFLAG_x
    ImageFlagsScalable            = &H00000001
    ImageFlagsHasAlpha            = &H00000002
    ImageFlagsHasTranslucent      = &H00000004
    ImageFlagsPartiallyScalable   = &H00000008
    '// Low-word: color space definition
    ImageFlagsColorSpaceRGB       = &H00000010
    ImageFlagsColorSpaceCMYK      = &H00000020
    ImageFlagsColorSpaceGRAY      = &H00000040
    ImageFlagsColorSpaceYCBCR     = &H00000080
    ImageFlagsColorSpaceYCCK      = &H00000100
    '// Low-word: image size info
    ImageFlagsHasRealDPI          = &H00001000
    ImageFlagsHasRealPixelSize    = &H00002000
    '// High-word
    ImageFlagsReadOnly            = &H00010000
    ImageFlagsCaching             = &H00020000

Constant | Meaning
--- | ---
ImageFlagsNone | Specifies no format information.
ImageFlagsScalable | Specifies that the image can be scaled.
ImageFlagsHasAlpha | Specifies that the pixel data contains alpha values.
ImageFlagsHasTranslucent | Specifies that the pixel data has alpha values other than 0 (transparent) and 255 (opaque).
ImageFlagsPartiallyScalable | Specifies that the pixel data is partially scalable with some limitations.
ImageFlagsColorSpaceRGB | Specifies that the image is stored using an RGB color space.
ImageFlagsColorSpaceCMYK | Specifies that the image is stored using a CMYK color space.
ImageFlagsColorSpaceGRAY | Specifies that the image is a grayscale image.
ImageFlagsColorSpaceYCBCR | Specifies that the image is stored using a YCBCR color space.
ImageFlagsColorSpaceYCCK | Specifies that the image is stored using a YCCK color space.
ImageFlagsHasRealDPI | Specifies that dots per inch information is stored in the image.
ImageFlagsHasRealPixelSize | Specifies that the pixel size is stored in the image.
ImageFlagsReadOnly | Specifies that the pixel data is read-only.
ImageFlagsCaching | Specifies that the pixel data can be cached for faster access.

## ImageLockMode Enumeration

The ImageLockMode enumeration specifies flags that are passed to the flags parameter of the GdipBitmapLockBits function. The GdipBitmapLockBits function locks a portion of an image so that you can read or write the pixel data.

    ImageLockModeRead         = &H0001
    ImageLockModeWrite        = &H0002
    ImageLockModeUserInputBuf = &H0004

Constant | Meaning
--- | ---
ImageLockModeRead | Specifies that a portion of the image is locked for reading.
ImageLockModeWrite | Specifies that a portion of the image is locked for writing.
ImageLockModeUserInputBuf | Specifies that the buffer used for reading or writing pixel data is allocated by the user. If this flag is set, then the lockedBitmapData parameter of the GdipBitmapLockBits function serves as an input parameter (and possibly as an output parameter). If this flag is cleared, then the lockedBitmapData parameter serves only as an output parameter.

## ImageType Enumeration

The ImageType enumeration indicates whether an image is a bitmap or a metafile. The GdipGetImageType function returns an element of this enumeration.

    ImageTypeUnknown   = 0
    ImageTypeBitmap    = 1
    ImageTypeMetafile  = 2

Constant | Meaning
--- | ---
ImageTypeUnknown | Indicates that the image type is not known.
ImageTypeBitmap | Indicates a bitmap image.
ImageTypeMetafile | Indicates a metafile image.

## InterpolationMode Enumeration

The InterpolationMode enumeration specifies the algorithm that is used when images are scaled or rotated. This enumeration is used by the GdipGetInterpolationMode and GdipSetInterpolationMode functions of the Graphics functions.

    InterpolationModeInvalid = QualityModeInvalid
    InterpolationModeDefault = QualityModeDefault
    InterpolationModeLowQuality = QualityModeLow
    InterpolationModeHighQuality = QualityModeHigh
    InterpolationModeBilinear = 3
    InterpolationModeBicubic = 4
    InterpolationModeNearestNeighbor = 5
    InterpolationModeHighQualityBilinear = 6
    InterpolationModeHighQualityBicubic = 7

Constant | Meaning
--- | ---
InterpolationModeInvalid | Used internally.
InterpolationModeDefault | Specifies the default interpolation mode.
InterpolationModeLowQuality | Specifies a low-quality mode.
InterpolationModeHighQuality | Specifies a high-quality mode.
InterpolationModeBilinear | Specifies bilinear interpolation. No prefiltering is done. This mode is not suitable for shrinking an image below 50 percent of its original size.
InterpolationModeBicubic | Specifies bicubic interpolation. No prefiltering is done. This mode is not suitable for shrinking an image below 25 percent of its original size.
InterpolationModeNearestNeighbor | Specifies nearest-neighbor interpolation.
InterpolationModeHighQualityBilinear | Specifies high-quality, bilinear interpolation. Prefiltering is performed to ensure high-quality shrinking.
InterpolationModeHighQualityBicubic | Specifies high-quality, bicubic interpolation. Prefiltering is performed to ensure high-quality shrinking. This mode produces the highest quality transformed images.

## ItemDataPosition Enumeration

The ItemDataPosition enumeration is used to specify the location of custom metadata in an image file.

    ItemDataPositionAfterHeader = 0
    ItemDataPositionAfterPalette = 1
    ItemDataPositionAfterBits = 2

Constant | Meaning
--- | ---
ItemDataPositionAfterHeader | Specifies that custom metadata is stored after the file header. Valid for JPEG, PNG, and GIF.
ItemDataPositionAfterPalette | Specifies that custom metadata is stored after the palette. Valid for PNG.
ItemDataPositionAfterBits | Specifies that custom metadata is stored after the pixel data. Valid for GIF and PNG.

#### Remarks

GDI+ supports custom metadata for JPEG, PNG, and GIF image files.

## LinearGradientMode Enumeration

The LinearGradientMode enumeration specifies the direction in which the change of color occurs for a linear gradient brush.

    LinearGradientModeHorizontal         = 0
    LinearGradientModeVertical           = 1
    LinearGradientModeForwardDiagonal    = 2
    LinearGradientModeBackwardDiagonal   = 3

Constant | Meaning
--- | ---
LinearGradientModeHorizontal | Specifies the color to change in a horizontal direction from the left of the display to the right of the display.
LinearGradientModeVertical | Specifies the color to change in a vertical direction from the top of the display to the bottom of the display.
LinearGradientModeForwardDiagonal | Specifies the color to change in a forward diagonal direction from the upper-left corner to the lower-right corner of the display.
LinearGradientModeBackwardDiagonal | Specifies the color to change in a backward diagonal direction from the upper-right corner to the lower-left corner of the display.

## LineCap Enumeration

The LineCap enumeration specifies the type of graphic shape to use on the end of a line drawn with a Microsoft Windows GDI+ pen. The cap can be a square, circle, triangle, arrowhead, custom, or masked (hidden). End caps can also “anchor” the line by centering the cap at the end of the line.

    LineCapFlat = 0
    LineCapSquare = 1
    LineCapRound = 2
    LineCapTriangle = 3
    LineCapNoAnchor = &H10
    LineCapSquareAnchor = &H11
    LineCapRoundAnchor = &H12
    LineCapDiamondAnchor = &H13
    LineCapArrowAnchor = &H14
    LineCapCustom = &HFF
    LineCapAnchorMask = &HF0

Constant | Meaning
--- | ---
LineCapFlat | Specifies that the line ends at the last point. The end is squared off.
LineCapSquare | Specifies a square cap. The center of the square is the last point in the line. The height and width of the square are the line width.
LineCapRound | Specifies a circular cap. The center of the circle is the last point in the line. The diameter of the circle is the line width.
LineCapTriangle | Specifies a triangular cap. The base of the triangle is the last point in the line. The base of the triangle is the line width.
LineCapNoAnchor | Specifies that the line ends are not anchored.
LineCapSquareAnchor | Specifies that the line ends are anchored with a square. The center of the square is the last point in the line. The height and width of the square are the line width.
LineCapRoundAnchor | Specifies that the line ends are anchored with a circle. The center of the circle is at the last point in the line. The circle is wider than the line.
LineCapDiamondAnchor | Specifies that the line ends are anchored with a diamond (a square turned at 45 degrees). The center of the diamond is at the last point in the line. The diamond is wider than the line.
LineCapArrowAnchor | Specifies that the line ends are anchored with arrowheads. The arrowhead point is located at the last point in the line. The arrowhead is wider than the line.
LineCapCustom | Specifies that the line ends are made from a CustomLineCap.

## LineJoin Enumeration

The LineJoin enumeration specifies how to join two lines that are drawn by the same pen and whose ends meet. At the intersection of the two line ends, a line join makes the join look more continuous.

    LineJoinMiter = 0
    LineJoinBevel = 1
    LineJoinRound = 2
    LineJoinMiterClipped = 3

Constant | Meaning
--- | ---
LineJoinMiter | Specifies a mitered join. This produces a sharp corner or a clipped corner, depending on whether the length of the miter exceeds the miter limit.
LineJoinBevel | Specifies a beveled join. This produces a diagonal corner.
LineJoinRound | Specifies a circular join. This produces a smooth, circular arc between the lines.
LineJoinMiterClipped | Specifies a mitered join. This produces a sharp corner or a beveled corner, depending on whether the length of the miter exceeds the miter limit.

#### Remarks

The miter length is the distance from the intersection of the line walls on the inside of the join to the intersection of the line walls outside of the join. The miter length can be large when the angle between two lines is small. The miter limit is the maximum allowed ratio of miter length to stroke width. The default value is 10.0f.

When using LineJoinMiter and the actual ratio exceeds the miter limit, the corner is clipped perpendicular to the miter at a distance from the inner corner that is the product of the miter limit and the pen width.

When using LineJoinMiterClipped and the miter limit is exceeded, the join is drawn as if its type were LineJoinBevel; that is, when the line walls on the inside of the join meet, then a joining line is drawn between the line walls on the outside of the join.

## MatrixOrder Enumeration

The MatrixOrder enumeration specifies the order of multiplication when a new matrix is multiplied by an existing matrix.

    MatrixOrderPrepend = 0
    MatrixOrderAppend = 1

Constant | Meaning
--- | ---
MatrixOrderPrepend | Specifies that the new matrix is on the left and the existing matrix is on the right.
MatrixOrderAppend | Specifies that the existing matrix is on the left and the new matrix is on the right.

## MetafileFrameUnit Enumeration

The MetafileFrameUnit enumeration specifies the unit of measure for a metafile frame rectangle.

    MetafileFrameUnitPixel      = UnitPixel
    MetafileFrameUnitPoint      = UnitPoint
    MetafileFrameUnitInch       = UnitInch
    MetafileFrameUnitDocument   = UnitDocument
    MetafileFrameUnitMillimeter = UnitMillimeter
    MetafileFrameUnitGdi        = 7

Constant | Meaning
--- | ---
MetafileFrameUnitPixel | Specifies that a unit is 1 pixel.
MetafileFrameUnitPoint | Specifies that a unit is 1 point.
MetafileFrameUnitInch | Specifies that a unit is 1 inch.
MetafileFrameUnitDocument | Specifies that a unit is 1/300 inch.
MetafileFrameUnitMillimeter | Specifies that a unit is 1 millimeter.
MetafileFrameUnitGdi | Specifies that a unit is 0.01 millimeter. This element is provided for compatibility with Microsoft Windows Graphics Device Interface (GDI).

## MetafileType Enumeration

The MetafileType enumeration specifies types of metafiles.

    MetafileTypeInvalid           = 0
    MetafileTypeWmf               = 1
    MetafileTypeWmfPlaceable      = 2
    MetafileTypeEmf               = 3
    MetafileTypeEmfPlusOnly       = 4
    MetafileTypeEmfPlusDual       = 5

Constant | Meaning
--- | ---
MetafileTypeInvalid | Specifies a metafile format that is not recognized in Microsoft Windows GDI+.
MetafileTypeWmf | Specifies a Windows Metafile Format (WMF) file. Such a file contains only Windows Graphics Device Interface (GDI) records.
MetafileTypeWmfPlaceable | Specifies a WMF file that has a placeable metafile header in front of it.
MetafileTypeEmf | Specifies an Enhanced Metafile (EMF) file. Such a file contains only GDI records.
MetafileTypeEmfPlusOnly | Specifies an EMF+ file. Such a file contains only GDI+ records and must be displayed by using GDI+. Displaying the records using GDI may cause unpredictable results.
MetafileTypeEmfPlusDual | Specifies an EMF+ Dual file. Such a file contains GDI+ records along with alternative GDI records and can be displayed by using either GDI or GDI+. Displaying the records using GDI may cause some quality degradation.

# ObjectType Enumeration

The ObjectType enumeration indicates the object type value of an EMF+ record.

    ObjectTypeInvalid          = 0
    ObjectTypeBrush            = 1
    ObjectTypePen              = 2
    ObjectTypePath             = 3
    ObjectTypeRegion           = 4
    ObjectTypeImage            = 5
    ObjectTypeFont             = 6
    ObjectTypeStringFormat     = 7
    ObjectTypeImageAttributes  = 8
    ObjectTypeCustomLineCap    = 9
    ObjectTypeMax = ObjectTypeCustomLineCap
    ObjectTypeMin = ObjectTypeBrush

Constant | Meaning
--- | ---
ObjectTypeInvalid | Object type is invalid.
ObjectTypeBrush | Object type is a brush.
ObjectTypePen | Object type is a pen.
ObjectTypePath | Object type is a path.
ObjectTypeRegion | Object type is a region.
ObjectTypeFont | Object type is a font.
ObjectTypeStringFormat | Object type is a string format.
ObjectTypeImageAttributes | Object type is an image attribute.
ObjectTypeCustomLineCap | Object type is a custom line cap.
ObjectTypeGraphics | Object type is graphics.
ObjectTypeMax | Maximum enumeration value. Currently, it is ObjectTypeGraphics.
ObjectTypeMin | Minimum enumeration value. Currently, it is ObjectTypeBrush.

#### Remarks

To determine whether the object type value of an EMF+ record is valid, call ObjectTypeIsValid.

## PaletteFlags Enumeration

The PaletteFlags enumeration indicates attributes of the color data in a palette.

    PaletteFlagsHasAlpha    = &H0001
    PaletteFlagsGrayScale   = &H0002
    PaletteFlagsHalftone    = &H0004

Constant | Meaning
--- | ---
PaletteFlagsHasAlpha | Indicates that one or more of the palette entries contains alpha (transparency) information.
PaletteFlagsGrayScale | Indicates that the palette contains only grayscale entries.
PaletteFlagsHalftone | Indicates that the palette is the Microsoft Windows halftone palette.

## PaletteType Enumeration

The PaletteType enumeration is used by the GdipInitializePalette and GdipBitmapConvertFormat functions. The members of the enumeration identify several standard color palette formats.

    PaletteTypeCustom = 0
    PaletteTypeOptimal = 1
    PaletteTypeFixedBW = 2
    PaletteTypeFixedHalftone8 = 3
    PaletteTypeFixedHalftone27 = 4
    PaletteTypeFixedHalftone64 = 5
    PaletteTypeFixedHalftone125 = 6
    PaletteTypeFixedHalftone216 = 7
    PaletteTypeFixedHalftone252 = 8
    PaletteTypeFixedHalftone256 = 9

Constant | Meaning
--- | ---
PaletteTypeCustom | An arbitrary custom palette provided by the caller.
PaletteTypeOptimal | An palette of colors that are optimal for a particular bitmap. To create an optimal palette, pass PaletteTypeOptimal, the number of colors you want in the palette, and the address of a Bitmap to the GdipInitializePalette function.
PaletteTypeFixedBW | A palette that has two colors. This palette type is suitable for bitmaps that store 1 bit per pixel.
PaletteTypeFixedHalftone8 | A palette based on two intensities each (off or full) for the red, green, and blue channels. Also contains the 16 colors of the system palette. Because all eight of the on/off combinations of red, green, and blue are already in the system palette, this palette is the same as the system palette. This palette type is suitable for bitmaps that store 4 bits per pixel.
PaletteTypeFixedHalftone27 | A palette based on three intensities each for the red, green, and blue channels. Also contains the 16 colors of the system palette. Eight of the 16 system palette colors are among the 27 three-intensity combinations of red, green, and blue, so the total number of colors in the palette is 35. If the palette also includes the transparent color, the total number of colors is 36.
PaletteTypeFixedHalftone64 | A palette based on four intensities each for the red, green, and blue channels. Also contains the 16 colors of the system palette. Eight of the 16 system palette colors are among the 64 four-intensity combinations of red, green, and blue, so the total number of colors in the palette is 72. If the palette also includes the transparent color, the total number of colors is 73.
PaletteTypeFixedHalftone125 | A palette based on five intensities each for the red, green, and blue channels. Also contains the 16 colors of the system palette. Eight of the 16 system palette colors are among the 125 five-intensity combinations of red, green, and blue, so the total number of colors in the palette is 133. If the palette also includes the transparent color, the total number of colors is 134.
PaletteTypeFixedHalftone216 | A palette based on six intensities each for the red, green, and blue channels. Also contains the 16 colors of the system palette. Eight of the 16 system palette colors are among the 216 six-intensity combinations of red, green, and blue, so the total number of colors in the palette is 224. If the palette also includes the transparent color, the total number of colors is 225. This palette is sometimes called the Windows halftone palette or the Web palette.
PaletteTypeFixedHalftone252 | A palette based on 6 intensities of red, 7 intensities of green, and 6 intensities of blue. The system palette is not included. The total number of colors is 252. If the palette also includes the transparent color, the total number of colors is 253.
PaletteTypeFixedHalftone256 | A palette based on 8 intensities of red, 8 intensities of green, and 4 intensities of blue. The system palette is not included. The total number of colors is 256. If the transparent color is included in this palette, it must replace one of the RGB combinations.

## PathPointType Enumeration

The PathPointType enumeration indicates point types and flags for the data points in a path. Bits 0 through 2 indicate the type of a point, and bits 3 through 7 hold a set of flags that specify attributes of a point.

    PathPointTypeStart           = 0
    PathPointTypeLine            = 1
    PathPointTypeBezier          = 3
    PathPointTypePathTypeMask    = &H07
    PathPointTypeDashMode        = &H10
    PathPointTypePathMarker      = &H20
    PathPointTypeCloseSubpath    = &H80
    PathPointTypeBezier3         = 3

Constant | Meaning
--- | ---
PathPointTypeStart | Indicates that the point is the start of a figure.
PathPointTypeLine | Indicates that the point is one of the two endpoints of a line.
PathPointTypeBezier | Indicates that the point is an endpoint or control point of a cubic Bezier spline.
PathPointTypePathTypeMask | Masks all bits except for the three low-order bits, which indicate the point type.
PathPointTypePathDashMode | Not used.
PathPointTypePathMarker | Specifies that the point is a marker.
PathPointTypeCloseSubpath | Specifies that the point is the last point in a closed subpath (figure).
PathPointTypeBezier3 | Indicates that the point is an endpoint or control point of a cubic Bezier spline.

## PenAlignment Enumeration

The PenAlignment enumeration specifies the alignment of a pen relative to the stroke that is being drawn.

    PenAlignmentCenter = 0
    PenAlignmentInset = 1

Constant | Meaning
--- | ---
PenAlignmentCenter | Specifies that the pen is aligned on the center of the line that is drawn.
PenAlignmentInset | Specifies, when drawing a polygon, that the pen is aligned on the inside of the edge of the polygon.

#### Remarks

If you set the alignment of a Pen object to PenAlignmentInset, you cannot use that pen to draw compound lines or triangular dash caps.

## PenType Enumeration

The PenType enumeration indicates the type of pattern, texture, or gradient that a pen draws.

    PenTypeSolidColor = BrushTypeSolidColor
    PenTypeHatchFill = BrushTypeHatchFill
    PenTypeTextureFill = BrushTypeTextureFill
    PenTypePathGradient = BrushTypePathGradient
    PenTypeLinearGradient = BrushTypeLinearGradient
    PenTypeUnknown = -1

Constant | Meaning
--- | ---
PenTypeSolidColor | Indicates that the pen draws with a solid color.
PenTypeHatchFill | Indicates that the pen draws with a hatch pattern
PenTypeTextureFill | Indicates that the pen draws with a texture.
PenTypePathGradient | Indicates that the pen draws with a color gradient.
PenTypeLinearGradient | Indicates that the pen draws with a color gradient.
PenTypeUnknown | Indicates that the pen type is unknown.

## PixelOffsetMode Enumeration

The PixelOffsetMode enumeration specifies the pixel offset mode. This enumeration is used by the GdipGetPixelOffsetMode and GdipSetPixelOffsetMode methods of the Graphics class.

    PixelOffsetModeInvalid = QualityModeInvalid
    PixelOffsetModeDefault = QualityModeDefault
    PixelOffsetModeHighSpeed = QualityModeLow
    PixelOffsetModeHighQuality = QualityModeHigh
    PixelOffsetModeNone = 3
    PixelOffsetModeHalf = 4

Constant | Meaning
--- | ---
PixelOffsetModeInvalid | Used internally.
PixelOffsetModeDefault | Equivalent to PixelOffsetModeNone.
PixelOffsetModeHighSpeed | Equivalent to PixelOffsetModeNone.
PixelOffsetModeHighQuality | Equivalent to PixelOffsetModeHalf.
PixelOffsetModeNone | Indicates that pixel centers have integer coordinates.
PixelOffsetModeHalf | Indicates that pixel centers have coordinates that are half way between integer values.

#### Remarks

Consider the pixel in the upper-left corner of an image with address (0, 0). With PixelOffsetModeNone, the pixel covers the area between 0.5 and 0.5 in both the x and y directions; that is, the pixel center is at (0, 0). With PixelOffsetModeHalf, the pixel covers the area between 0 and 1 in both the x and y directions; that is, the pixel center is at (0.5, 0.5).

# QualityMode Enumeration

The QualityMode enumeration specifies the quality mode.

    QualityModeInvalid = -1
    QualityModeDefault = 0
    QualityModeLow     = 1
    QualityModeHigh    = 2

Constant | Meaning
--- | ---
QualityModeInvalid | Invalid mode.
QualityModeDefault | Default quality mode.
QualityModeLow | Low quality mode. Best performance.
QualityModeHigh | High quality mode. Best rendering quality.

## RotateFlipType Enumeration

The RotateFlipType enumeration specifies the direction of an image’s rotation and the axis used to flip the image.

    RotateNoneFlipNone = 0
    Rotate90FlipNone   = 1
    Rotate180FlipNone  = 2
    Rotate270FlipNone  = 3
    RotateNoneFlipX    = 4
    Rotate90FlipX      = 5
    Rotate180FlipX     = 6
    Rotate270FlipX     = 7
    RotateNoneFlipY    = Rotate180FlipX
    Rotate90FlipY      = Rotate270FlipX
    Rotate180FlipY     = RotateNoneFlipX
    Rotate270FlipY     = Rotate90FlipX
    RotateNoneFlipXY   = Rotate180FlipNone
    Rotate90FlipXY     = Rotate270FlipNone
    Rotate180FlipXY    = RotateNoneFlipNone
    Rotate270FlipXY    = Rotate90FlipNone

Constant | Meaning
--- | ---
RotateNoneFlipNone | Specifies no rotation and no flipping.
Rotate90FlipNone | Specifies a 90-degree rotation without flipping.
Rotate180FlipNone | Specifies a 180-degree rotation without flipping.
Rotate270FlipNone | Specifies a 270-degree rotation without flipping.
RotateNoneFlipX | Specifies no rotation and a horizontal flip.
Rotate90FlipX | Specifies a 90-degree rotation followed by a horizontal flip.
Rotate180FlipX | Specifies a 180-degree rotation followed by a horizontal flip.
Rotate270FlipX | Specifies a 270-degree rotation followed by a horizontal flip.
RotateNoneFlipY | Specifies no rotation and a vertical flip.
Rotate90FlipY | Specifies a 90-degree rotation followed by a vertical flip.
Rotate180FlipY | Specifies a 180-degree rotation followed by a vertical flip.
Rotate270FlipY | Specifies a 270-degree rotation followed by a vertical flip.
RotateNoneFlipXY | Specifies no rotation, a horizontal flip, and then a vertical flip.
Rotate90FlipXY | Specifies a 90-degree rotation followed by a horizontal flip and then a vertical flip.
Rotate180FlipXY | Specifies a 180-degree rotation followed by a horizontal flip and then a vertical flip.
Rotate270FlipXY | Specifies a 270-degree rotation followed by a horizontal flip and then a vertical flip.

## SmoothingMode Enumeration

The SmoothingMode enumeration specifies the type of smoothing (antialiasing) that is applied to lines and curves. This enumeration is used by the GdipGetSmoothingMode and GdipSetSmoothingMode functions.

    SmoothingModeInvalid = QualityModeInvalid
    SmoothingModeDefault = QualityModeDefault
    SmoothingModeHighSpeed = QualityModeLow
    SmoothingModeHighQuality = QualityModeHigh
    SmoothingModeNone = 3
    SmoothingModeAntiAlias = 4

Constant | Meaning
--- | ---
SmoothingModeInvalid | Reserved.
SmoothingModeDefault | Specifies that smoothing is not applied.
SmoothingModeHighSpeed | Specifies that smoothing is not applied.
SmoothingModeHighQuality | Specifies that smoothing is applied using an 8 X 4 box filter.
SmoothingModeNone | Specifies that smoothing is not applied.
SmoothingModeAntiAlias8x4 | Specifies that smoothing is applied using an 8 X 4 box filter.
SmoothingModeAntiAlias | Specifies that smoothing is applied using an 8 X 4 box filter.
SmoothingModeAntiAlias8x8 | Specifies that smoothing is applied using an 8 X 8 box filter.

#### Remarks

Smoothing performed by an 8 X 4 box filter gives better results for nearly vertical lines than it does for nearly horizontal lines. Smoothing performed by an 8 X 8 box filter gives equally good results for nearly vertical and nearly horizontal lines. The 8x8 algorithm produces higher quality smoothing but is slower than the 8 X 4 algorithm.

## Status Enumeration

The GpStatus enumeration indicates the result of a Microsoft Windows GDI+ function call.

    Ok = 0
    GenericError = 1
    InvalidParameter = 2
    OutOfMemory = 3
    ObjectBusy = 4
    InsufficientBuffer = 5
    NotImplemented = 6
    Win32Error = 7
    WrongState = 8
    Aborted = 9
    FileNotFound = 10
    ValueOverflow = 11
    AccessDenied = 12
    UnknownImageFormat = 13
    FontFamilyNotFound = 14
    FontStyleNotFound = 15
    NotTrueTypeFont = 16
    UnsupportedGdiplusVersion = 17
    GdiplusNotInitialized = 18
    PropertyNotFound = 19
    PropertyNotSupported = 20
    ProfileNotFound = 21

Constant | Meaning
--- | ---
Ok | Indicates that the function call was successful.
GenericError | Indicates that there was an error on the function call, which is identified as something other than those defined by the other elements of this enumeration.
InvalidParameter | Indicates that one of the arguments passed to the function was not valid.
OutOfMemory | Indicates that the operating system is out of memory and could not allocate memory to process the function call.
ObjectBusy | Indicates that one of the arguments specified in the application programming interface (API) call is already in use in another thread.
InsufficientBuffer | Indicates that a buffer specified as an argument in the API call is not large enough to hold the data to be received.
NotImplemented | Indicates that the function is not implemented.
Win32Error | Indicates that the function generated a Microsoft Win32 error.
WrongState | Indicates that the object is in an invalid state to satisfy the API call.
Aborted | Indicates that the function was aborted.
FileNotFound | Indicates that the specified image file or metafile cannot be found.
ValueOverflow | Indicates that the function performed an arithmetic operation that produced a numeric overflow.
AccessDenied | Indicates that a write operation is not allowed on the specified file.
UnknownImageFormat | Indicates that the specified image file format is not known.
FontFamilyNotFound | Indicates that the specified font family cannot be found. Either the font family name is incorrect or the font family is not installed.
FontStyleNotFound | Indicates that the specified style is not available for the specified font family.
NotTrueTypeFont | Indicates that the font retrieved from an HDC or LOGFONT is not a TrueType font and cannot be used with GDI+.
UnsupportedGdiplusVersion | Indicates that the version of GDI+ that is installed on the system is incompatible with the version with which the application was compiled.
GdiplusNotInitialized | Indicates that the GDI+API is not in an initialized state. To function, all GDI+ objects require that GDI+ be in an initialized state. Initialize GDI+ by calling GdiplusStartup.
PropertyNotFound | Indicates that the specified property does not exist in the image.
PropertyNotSupported | Indicates that the specified property is not supported by the format of the image and, therefore, cannot be set.
ProfileNotFound | Indicates that the color profile required to save an image in CMYK format was not found.

## StringAlignment Enumeration

The StringAlignment enumeration specifies how a string is aligned in reference to the bounding rectangle. A bounding rectangle is used to define the area in which the text displays.

    StringAlignmentNear = 0
    StringAlignmentCenter = 1
    StringAlignmentFar = 2

Constant | Meaning
--- | ---
StringAlignmentNear | Specifies that alignment is towards the origin of the bounding rectangle. May be used for alignment of characters along the line or for alignment of lines within the rectangle. For a right to left bounding rectangle (StringFormatFlagsDirectionRightToLeft), the origin is at the upper right.
StringAlignmentCenter | Specifies that alignment is centered between origin and extent (width) of the formatting rectangle.
StringAlignmentFar | Specifies that alignment is to the far extent (right side) of the formatting rectangle.

## StringDigitSubstitute Enumeration

The StringDigitSubstitute enumeration specifies how to substitute digits in a string according to a user’s locale or language.

    StringDigitSubstituteUser = 0
    StringDigitSubstituteNone = 1
    StringDigitSubstituteNational = 2
    StringDigitSubstituteTraditional = 3

Constant | Meaning
--- | ---
StringDigitSubstituteUser | Specifies a user-defined substitution scheme.
StringDigitSubstituteNone | Specifies to disable substitutions.
StringDigitSubstituteNational | Specifies substitution digits that correspond with the official national language of the user’s locale.
StringDigitSubstituteTraditional | Specifies substitution digits that correspond with the user’s native script or language, which may be different from the official national language of the user’s locale.

## StringFormatFlags Enumeration

The StringFormatFlags enumeration specifies text layout information (such as orientation and clipping) and display manipulations (such as ellipsis insertion, digit substitution, and representation of characters that are not supported by a font).

    StringFormatFlagsDirectionRightToLeft  = &h00000001
    StringFormatFlagsDirectionVertical     = &h00000002
    StringFormatFlagsNoFitBlackBox         = &h00000004
    StringFormatFlagsDisplayFormatControl  = &h00000020
    StringFormatFlagsNoFontFallback        = &h00000400
    StringFormatFlagsMeasureTrailingSpaces = &h00000800
    StringFormatFlagsNoWrap                = &h00001000
    StringFormatFlagsLineLimit             = &h00002000
    StringFormatFlagsNoClip                = &h00004000

Constant | Meaning
--- | ---
StringFormatFlagsDirectionRightToLeft | Specifies that reading order is right to left. For horizontal text, characters are read from right to left. For vertical text, columns are read from right to left. By default, horizontal or vertical text is read from left to right.
StringFormatFlagsDirectionVertical | Specifies that individual lines of text are drawn vertically on the display device. By default, lines of text are horizontal, each new line below the previous line.
StringFormatFlagsNoFitBlackBox | Specifies that parts of characters are allowed to overhang the string’s layout rectangle. By default, characters are first aligned inside the rectangle’s boundaries, then any characters which still overhang the boundaries are repositioned to avoid any overhang and thereby avoid affecting pixels outside the layout rectangle. An italic, lowercase letter F ( f) is an example of a character that may have overhanging parts. Setting this flag ensures that the character aligns visually with the lines above and below but may cause parts of characters, which lie outside the layout rectangle, to be clipped or painted.
StringFormatFlagsDisplayFormatControl | Specifies that Unicode layout control characters are displayed with a representative character.
StringFormatFlagsNoFontFallback | Specifies that an alternate font is used for characters that are not supported in the requested font. By default, any missing characters are displayed with the “fonts missing” character, usually an open square.
StringFormatFlagsMeasureTrailingSpaces | Specifies that the space at the end of each line is included in a string measurement. By default, the boundary rectangle returned by the GdipMeasureString function excludes the space at the end of each line. Set this flag to include that space in the measurement.
StringFormatFlagsNoWrap | Specifies that the wrapping of text to the next line is disabled. NoWrap is implied when a point of origin is used instead of a layout rectangle. When drawing text within a rectangle, by default, text is broken at the last word boundary that is inside the rectangle’s boundary and wrapped to the next line.
StringFormatFlagsLineLimit | Specifies that only entire lines are laid out in the layout rectangle. By default, layout continues until the end of the text or until no more lines are visible as a result of clipping, whichever comes first. The default settings allow the last line to be partially obscured by a layout rectangle that is not a whole multiple of the line height. To ensure that only whole lines are seen, set this flag and be careful to provide a layout rectangle at least as tall as the height of one line.
StringFormatFlagsNoClip | Specifies that characters overhanging the layout rectangle and text extending outside the layout rectangle are allowed to show. By default, all overhanging characters and text that extends outside the layout rectangle are clipped. Any trailing spaces (spaces that are at the end of a line) that extend outside the layout rectangle are clipped. Therefore, the setting of this flag will have an effect on a string measurement if trailing spaces are being included in the measurement. If clipping is enabled, trailing spaces that extend outside the layout rectangle are not included in the measurement. If clipping is disabled, all trailing spaces are included in the measurement, regardless of whether they are outside the layout rectangle.

#### Remarks

Multiple flags set can produce combined effects:

When both StringFormatFlagsDirectionVertical and StringFormatFlagsDirectionRightToLeft are set, individual lines of text are drawn vertically. The first line starts at the right edge of the layout rectangle; the second line of text is to the left of the first line, and so on.

When StringFormatFlagsDirectionVertical is set and StringFormatFlagsDirectionRightToLeft is not set, individual lines of text are drawn vertically. The first line starts at the left edge of the layout rectangle; the second line of text is to the right of the first line.

When StringFormatFlagsDirectionRightToLeft is set and StringFormatFlagsDirectionVertical is not set, the individual lines of text are horizontal and the reading order is from right to left. This setting does not change the order in which characters are displayed, it simply specifies the order in which characters can be read.

The StringFormatFlagsDirectionVertical and StringFormatFlagsDirectionRightToLeft flags can affect string alignment.

The StringTrimming enumeration specifies how to trim characters from a string so that the string fits into a layout rectangle. The layout rectangle is used to position and size the display string.

## StringTrimming Enumeration

    StringTrimmingNone = 0
    StringTrimmingCharacter = 1
    StringTrimmingWord = 2
    StringTrimmingEllipsisCharacter = 3
    StringTrimmingEllipsisWord = 4
    StringTrimmingEllipsisPath = 5

Constant | Meaning
--- | ---
StringTrimmingNone | Specifies that no trimming is done.
StringTrimmingCharacter | Specifies that the string is broken at the boundary of the last character that is inside the layout rectangle. This is the default.
StringTrimmingWord | Specifies that the string is broken at the boundary of the last word that is inside the layout rectangle.
StringTrimmingEllipsisCharacter | Specifies that the string is broken at the boundary of the last character that is inside the layout rectangle and an ellipsis (…) is inserted after the character.
StringTrimmingEllipsisWord | Specifies that the string is broken at the boundary of the last word that is inside the layout rectangle and an ellipsis (…) is inserted after the word.
StringTrimmingEllipsisPath | Specifies that the center is removed from the string and replaced by an ellipsis. The algorithm keeps as much of the last portion of the string as possible.

#### Remarks

Trimming affects only the last visible or partly visible (due to clipping) line of text.

## TestControl Enumeration

    TestControlForceBilinear = 0
    TestControlNoICM = 1
    TestControlGetBuildNumber = 2

## TextRenderingHint Enumeration

The enumeration specifies the process used to render text. The process affects the quality of the text.

    TextRenderingHintSystemDefault            = 0
    TextRenderingHintSingleBitPerPixelGridFit = 1
    TextRenderingHintSingleBitPerPixel        = 2
    TextRenderingHintAntiAliasGridFit         = 3
    TextRenderingHintAntiAlias                = 4
    TextRenderingHintClearTypeGridFit         = 5

Constant | Meaning
--- | ---
TextRenderingHintSystemDefault | Specifies that a character is drawn using the currently selected system font smoothing mode (also called a rendering hint).
TextRenderingHintSingleBitPerPixelGridFit | Specifies that a character is drawn using its glyph bitmap and hinting to improve character appearance on stems and curvature.
TextRenderingHintSingleBitPerPixel | Specifies that a character is drawn using its glyph bitmap and no hinting. This results in better performance at the expense of quality.
TextRenderingHintAntiAliasGridFit | Specifies that a character is drawn using its antialiased glyph bitmap and hinting. This results in much better quality due to antialiasing at a higher performance cost.
TextRenderingHintAntiAlias | Specifies that a character is drawn using its antialiased glyph bitmap and no hinting. Stem width differences may be noticeable because hinting is turned off.
TextRenderingHintClearTypeGridFit | Specifies that a character is drawn using its glyph Microsoft ClearType bitmap and hinting. This type of text rendering cannot be used along with CompositingModeSourceCopy. Microsoft Windows XP and Windows Server 2003 only: ClearType rendering is supported only on Windows XP and Windows Server 2003. Therefore, TextRenderingHintClearTypeGridFit is ignored on other operating systems even though Windows GDI+ is supported on those operating systems.

#### Remarks

The quality associated with each process varies according to the circumstances. TextRenderingHintClearTypeGridFit provides the best quality for most LCD monitors and relatively small font sizes. TextRenderingHintAntiAlias provides the best quality for rotated text. Generally, a process that produces higher quality text is slower than a process that produces lower quality text.

## Unit Enumeration

The Unit enumeration specifies the unit of measure for a given data type.

    UnitWorld      = 0
    UnitDisplay    = 1
    UnitPixel      = 2
    UnitPoint      = 3
    UnitInch       = 4
    UnitDocument   = 5
    UnitMillimeter = 6

Constant | Meaning
--- | ---
UnitWorld | Specifies world coordinates, a nonphysical unit.
UnitDisplay | Specifies display units. For example, if the display device is a monitor, then the unit is 1 pixel.
UnitPixel | Specifies that a unit is 1 pixel.
UnitPoint | Specifies that a unit is 1 point or 1/72 inch.
UnitInch | Specifies that a unit is 1 inch.
UnitDocument | Specifies that a unit is 1/300 inch.
UnitMillimeter | Specifies that a unit is 1 millimeter.

## WarpMode Enumeration

The WarpMode enumeration specifies warp modes that can be used to transform images.

    WarpModePerspective = 0
    WarpModeBilinear    = 1

Constant | Meaning
--- | ---
WarpModePerspective | Specifies the perspective warp mode.
WarpModeBilinear | Specifies the bilinear warp mode.

## WrapMode Enumeration

The WrapMode enumeration specifies how repeated copies of an image are used to tile an area.

    WrapModeTile         = 0
    WrapModeTileFlipX    = 1
    WrapModeTileFlipY    = 2
    WrapModeTileFlipXY   = 3
    WrapModeClamp        = 4

Constant | Meaning
--- | ---
WrapModeTile | Specifies tiling without flipping.
WrapModeTileFlipX | Species that tiles are flipped horizontally as you move from one tile to the next in a row.
WrapModeTileFlipY | Specifies that tiles are flipped vertically as you move from one tile to the next in a column.
WrapModeTileFlipXY | Specifies that tiles are flipped horizontally as you move along a row and flipped vertically as you move along a column.
WrapModeClamp | Specifies that no tiling takes place.

## Image Encoder Cnstants

The GdipSaveImageToFile, GdipSaveImageToStream, GdipSaveAdd and GdipSaveAddImage functions receive an EncoderParameters structure that contains an array of EncoderParameter objects. Each EncoderParameter object has a globally unique identifier (GUID) data member that specifies the parameter category. The following constants represent GUIDs that specify the various parameter categories.

    EncoderCompression      = "{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}"
    EncoderColorDepth       = "{66087055-AD66-4C7C-9A18-38A2310B8337}"
    EncoderScanMethod       = "{3A4E2661-3109-4E56-8536-42C156E7DCFA}"
    EncoderVersion          = "{24D18C76-814A-41A4-BF53-1C219CCCF797}"
    EncoderRenderMethod     = "{6D42C53A-229A-4825-8BB7-5C99E2B9A8B8}"
    EncoderQuality          = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"
    EncoderTransformation   = "{8D0EB2D1-A58E-4EA8-AA14-108074B7B6F9}"
    EncoderLuminanceTable   = "{EDB33BCE-0266-4A77-B904-27216099E717}"
    EncoderChrominanceTable = "{F2E455DC-09B3-4316-8260-676ADA32481C}"
    EncoderSaveFlag         = "{292266FC-AC40-47BF-8CFC-A85B89A655DE}"

## Image File Format Constants

The GdipGetImageRawFormat function returns a globally unique identifier (GUID) that indicates the file format of an image. The following constants represent the GUIDs that identify those file formats.

    ImageFormatUndefined = "{B96B3CA9-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatMemoryBMP = "{B96B3CAA-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatBMP       = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatEMF       = "{B96B3CAC-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatWMF       = "{B96B3CAD-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatJPEG      = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatPNG       = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatGIF       = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatTIFF      = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatEXIF      = "{B96B3CB2-0728-11D3-9D7B-0000F81EF32E}"
    ImageFormatIcon      = "{B96B3CB5-0728-11D3-9D7B-0000F81EF32E}"

## Image Frame Dimension Constants

The Graphics Interchange Format (GIF) and Tagged Image File Format (TIFF) image file formats enable you to store multiple frames in a single image file. Multiple frames in a GIF file are used for animation, so the frames are said to be in the time dimension. Multiple frames in a TIFF file are typically used as separate pages, so the frames are said to be in the page dimension.

The following constants represent globally unique identifiers (GUIDs) that identify the page and time dimensions.

    FrameDimensionTime       = "{6AEDBD6D-3FB5-418A-83A6-7F45229DC872}"
    FrameDimensionResolution = "{84236F7B-3BD3-428F-8DAB-4EA1439CA315}"
    FrameDimensionPage       = "{7462DC86-6180-4C7E-8E3F-EE7333A7A483}"

## Image Pixel Format Constants

The following constants specify various pixel formats used in bitmaps.

    PixelFormat1bppIndexed    = 196865
    PixelFormat4bppIndexed    = 197634
    PixelFormat8bppIndexed    = 198659
    PixelFormat16bppGrayScale = 1052676
    PixelFormat16bppRGB555    = 135173
    PixelFormat16bppRGB565    = 135174
    PixelFormat16bppARGB1555  = 397319
    PixelFormat24bppRGB       = 137224
    PixelFormat32bppRGB       = 139273
    PixelFormat32bppARGB      = 2498570
    PixelFormat32bppPARGB     = 925707
    PixelFormat48bppRGB       = 1060876
    PixelFormat64bppARGB      = 3424269
    PixelFormat64bppPARGB     = 29622286
    PixelFormatMax            = 15

Constant | Meaning
--- | ---
PixelFormat1bppIndexed | Specifies that the format is 1 bit per pixel, indexed.
PixelFormat4bppIndexed | Specifies that the format is 4 bits per pixel, indexed.
PixelFormat8bppIndexed | Specifies that the format is 8 bits per pixel, indexed.
PixelFormat16bppARGB1555 | Specifies that the format is 16 bits per pixel; 1 bit is used for the alpha component, and 5 bits each are used for the red, green, and blue components.
PixelFormat16bppGrayScale | Specifies that the format is 16 bits per pixel, grayscale.
PixelFormat16bppRGB555 | Specifies that the format is 16 bits per pixel; 5 bits each are used for the red, green, and blue components. The remaining bit is not used.
PixelFormat16bppRGB565 | Specifies that the format is 16 bits per pixel; 5 bits are used for the red component, 6 bits are used for the green component, and 5 bits are used for the blue component.
PixelFormat24bppRGB | Specifies that the format is 24 bits per pixel; 8 bits each are used for the red, green, and blue components.
PixelFormat32bppARGB | Specifies that the format is 32 bits per pixel; 8 bits each are used for the alpha, red, green, and blue components.
PixelFormat32bppPARGB | Specifies that the format is 32 bits per pixel; 8 bits each are used for the alpha, red, green, and blue components. The red, green, and blue components are premultiplied according to the alpha component.
PixelFormat32bppRGB | Specifies that the format is 32 bits per pixel; 8 bits each are used for the red, green, and blue components. The remaining 8 bits are not used.
PixelFormat48bppRGB | Specifies that the format is 48 bits per pixel; 16 bits each are used for the red, green, and blue components.
PixelFormat64bppARGB | Specifies that the format is 64 bits per pixel; 16 bits each are used for the alpha, red, green, and blue components.
PixelFormat64bppPARGB | Specifies that the format is 64 bits per pixel; 16 bits each are used for the alpha, red, green, and blue components. The red, green, and blue components are premultiplied according to the alpha component.

#### Remarks

PixelFormat48bppRGB, PixelFormat64bppARGB, and PixelFormat64bppPARGB use 16 bits per color component (channel). Microsoft Windows GDI+ version 1.0 can read 16-bits-per-channel images, but such images are converted to an 8-bits-per-channel format for processing, displaying, and saving.

## Image Property Tag Type Constants

You can store and retrieve image metadata with the help of a PropertyItem structure. The type data member of a PropertyItem structure specifies the data type of the values stored in the value data member of that same PropertyItem structure.

The following constants can be assigned to the type data member of a PropertyItem structure.

    PropertyTagTypeByte       = 1
    PropertyTagTypeASCII      = 2
    PropertyTagTypeShort      = 3
    PropertyTagTypeLong       = 4
    PropertyTagTypeRational   = 5
    PropertyTagTypeUndefined  = 7
    PropertyTagTypeSLONG      = 9
    PropertyTagTypeSRational  = 10

Constant | Meaning
--- | ---
PixelFormat4bppIndexed | Specifies that the format is 4 bits per pixel, indexed.
PropertyTagTypeASCII | Specifies that the value data member is a null-terminated ASCII string. If you set the type data member of a PropertyItem object to PropertyTagTypeASCII, you should set the length data member to the length of the string including the NULL terminator. For example, the string HELLO would have a length of 6.
PropertyTagTypeByte | Specifies that the value data member is an array of bytes.
PropertyTagTypeLong | Specifies that the value data member is an array of unsigned long (32-bit) integers.
PropertyTagTypeRational | Specifies that the value data member is an array of pairs of unsigned long integers. Each pair represents a fraction; the first integer is the numerator and the second integer is the denominator.
PropertyTagTypeShort | Specifies that the value data member is an array of unsigned short (16-bit) integers.
PropertyTagTypeSLONG | Specifies that the value data member is an array of signed long (32-bit) integers.
PropertyTagTypeSRational | Specifies that the value data member is an array of pairs of signed long integers. Each pair represents a fraction; the first integer is the numerator and the second integer is the denominator.
PropertyTagTypeUndefined | Specifies that the value data member is an array of bytes that can hold values of any data type.

## Image Property Tag Constants

Several image file formats enable you to store metadata along with an image. Metadata is information about an image, for example, title, width, camera model, and artist. Microsoft Windows GDI+ provides a uniform way of storing and retrieving metadata from image files in the Tagged Image File Format (TIFF), JPEG, Portable Network Graphics (PNG), and Exchangeable Image File (EXIF) formats.

In GDI+, a piece of metadata is called a property item, and an individual property item is identified by a numerical constant called a property tag. You can store and retrieve metadata by calling the GdipSetPropertyItem and GdipGetPropertyItem functions, and you don’t have to be concerned with the details of how a particular file format stores that metadata.

The following table lists the Microsoft Windows GDI+ image property tags in numerical order.

Property tag | Value
--- | ---
PropertyTagGpsVer | &h0000
PropertyTagGpsLatitudeRef | &h0001
PropertyTagGpsLatitude | &h0002
PropertyTagGpsLongitudeRef | &h0003
PropertyTagGpsLongitude | &h0004
PropertyTagGpsAltitudeRef | &h0005
PropertyTagGpsAltitude | &h0006
PropertyTagGpsGpsTime | &h0007
PropertyTagGpsGpsSatellites | &h0008
PropertyTagGpsGpsStatus | &h0009
PropertyTagGpsGpsMeasureMode | &h000A
PropertyTagGpsGpsDop | &h000B
PropertyTagGpsSpeedRef | &h000C
PropertyTagGpsSpeed | &h000D
PropertyTagGpsTrackRef | &h000E
PropertyTagGpsTrack | &h000F
PropertyTagGpsImgDirRef | &h0010
PropertyTagGpsImgDir | &h0011
PropertyTagGpsMapDatum | &h0012
PropertyTagGpsDestLatRef | &h0013
PropertyTagGpsDestLat | &h0014
PropertyTagGpsDestLongRef | &h0015
PropertyTagGpsDestLong | &h0016
PropertyTagGpsDestBearRef | &h0017
PropertyTagGpsDestBear | &h0018
PropertyTagGpsDestDistRef | &h0019
PropertyTagGpsDestDist | &h001A
PropertyTagNewSubfileType | &h00FE
PropertyTagSubfileType | &h00FF
PropertyTagImageWidth | &h0100
PropertyTagImageHeight | &h0101
PropertyTagBitsPerSample | &h0102
PropertyTagCompression | &h0103
PropertyTagPhotometricInterp | &h0106
PropertyTagThreshHolding | &h0107
PropertyTagCellWidth | &h0108
PropertyTagCellHeight | &h0109
PropertyTagFillOrder | &h010A
PropertyTagDocumentName | &h010D
PropertyTagImageDescription | &h010E
PropertyTagEquipMake | &h010F
PropertyTagEquipModel | &h0110
PropertyTagStripOffsets | &h0111
PropertyTagOrientation | &h0112
PropertyTagSamplesPerPixel | &h0115
PropertyTagRowsPerStrip | &h0116
PropertyTagStripBytesCount | &h0117
PropertyTagMinSampleValue | &h0118
PropertyTagMaxSampleValue | &h0119
PropertyTagXResolution | &h011A
PropertyTagYResolution | &h011B
PropertyTagPlanarConfig | &h011C
PropertyTagPageName | &h011D
PropertyTagXPosition | &h011E
PropertyTagYPosition | &h011F
PropertyTagFreeOffset | &h0120
PropertyTagFreeByteCounts | &h0121
PropertyTagGrayResponseUnit | &h0122
PropertyTagGrayResponseCurve | &h0123
PropertyTagT4Option | &h0124
PropertyTagT6Option | &h0125
PropertyTagResolutionUnit | &h0128
PropertyTagPageNumber | &h0129
PropertyTagTransferFunction | &h012D
PropertyTagSoftwareUsed | &h0131
PropertyTagDateTime | &h0132
PropertyTagArtist | &h013B
PropertyTagHostComputer | &h013C
PropertyTagPredictor | &h013D
PropertyTagWhitePoint | &h013E
PropertyTagPrimaryChromaticities | &h013F
PropertyTagColorMap | &h0140
PropertyTagHalftoneHints | &h0141
PropertyTagTileWidth | &h0142
PropertyTagTileLength | &h0143
PropertyTagTileOffset | &h0144
PropertyTagTileByteCounts | &h0145
PropertyTagInkSet | &h014C
PropertyTagInkNames | &h014D
PropertyTagNumberOfInks | &h014E
PropertyTagDotRange | &h0150
PropertyTagTargetPrinter | &h0151
PropertyTagExtraSamples | &h0152
PropertyTagSampleFormat | &h0153
PropertyTagSMinSampleValue | &h0154
PropertyTagSMaxSampleValue | &h0155
PropertyTagTransferRange | &h0156
PropertyTagJPEGProc | &h0200
PropertyTagJPEGInterFormat | &h0201
PropertyTagJPEGInterLength | &h0202
PropertyTagJPEGRestartInterval | &h0203
PropertyTagJPEGLosslessPredictors | &h0205
PropertyTagJPEGPointTransforms | &h0206
PropertyTagJPEGQTables | &h0207
PropertyTagJPEGDCTables | &h0208
PropertyTagJPEGACTables | &h0209
PropertyTagYCbCrCoefficients | &h0211
PropertyTagYCbCrSubsampling | &h0212
PropertyTagYCbCrPositioning | &h0213
PropertyTagREFBlackWhite | &h0214
PropertyTagGamma | &h0301
PropertyTagICCProfileDescriptor | &h0302
PropertyTagSRGBRenderingIntent | &h0303
PropertyTagImageTitle | &h0320
PropertyTagResolutionXUnit | &h5001
PropertyTagResolutionYUnit | &h5002
PropertyTagResolutionXLengthUnit | &h5003
PropertyTagResolutionYLengthUnit | &h5004
PropertyTagPrintFlags | &h5005
PropertyTagPrintFlagsVersion | &h5006
PropertyTagPrintFlagsCrop | &h5007
PropertyTagPrintFlagsBleedWidth | &h5008
PropertyTagPrintFlagsBleedWidthScale | &h5009
PropertyTagHalftoneLPI | &h500A
PropertyTagHalftoneLPIUnit | &h500B
PropertyTagHalftoneDegree | &h500C
PropertyTagHalftoneShape | &h500D
PropertyTagHalftoneMisc | &h500E
PropertyTagHalftoneScreen | &h500F
PropertyTagJPEGQuality | &h5010
PropertyTagGridSize | &h5011
PropertyTagThumbnailFormat | &h5012
PropertyTagThumbnailWidth | &h5013
PropertyTagThumbnailHeight | &h5014
PropertyTagThumbnailColorDepth | &h5015
PropertyTagThumbnailPlanes | &h5016
PropertyTagThumbnailRawBytes | &h5017
PropertyTagThumbnailSize | &h5018
PropertyTagThumbnailCompressedSize | &h5019
PropertyTagColorTransferFunction | &h501A
PropertyTagThumbnailData | &h501B
PropertyTagThumbnailImageWidth | &h5020
PropertyTagThumbnailImageHeight | &h5021
PropertyTagThumbnailBitsPerSample | &h5022
PropertyTagThumbnailCompression | &h5023
PropertyTagThumbnailPhotometricInterp | &h5024
PropertyTagThumbnailImageDescription | &h5025
PropertyTagThumbnailEquipMake | &h5026
PropertyTagThumbnailEquipModel | &h5027
PropertyTagThumbnailStripOffsets | &h5028
PropertyTagThumbnailOrientation | &h5029
PropertyTagThumbnailSamplesPerPixel | &h502A
PropertyTagThumbnailRowsPerStrip | &h502B
PropertyTagThumbnailStripBytesCount | &h502C
PropertyTagThumbnailResolutionX | &h502D
PropertyTagThumbnailResolutionY | &h502E
PropertyTagThumbnailPlanarConfig | &h502F
PropertyTagThumbnailResolutionUnit | &h5030
PropertyTagThumbnailTransferFunction | &h5031
PropertyTagThumbnailSoftwareUsed | &h5032
PropertyTagThumbnailDateTime | &h5033
PropertyTagThumbnailArtist | &h5034
PropertyTagThumbnailWhitePoint | &h5035
PropertyTagThumbnailPrimaryChromaticities | &h5036
PropertyTagThumbnailYCbCrCoefficients | &h5037
PropertyTagThumbnailYCbCrSubsampling | &h5038
PropertyTagThumbnailYCbCrPositioning | &h5039
PropertyTagThumbnailRefBlackWhite | &h503A
PropertyTagThumbnailCopyRight | &h503B
PropertyTagLuminanceTable | &h5090
PropertyTagChrominanceTable | &h5091
PropertyTagFrameDelay | &h5100
PropertyTagLoopCount | &h5101
PropertyTagGlobalPalette | &h5102
PropertyTagIndexBackground | &h5103
PropertyTagIndexTransparent | &h5104
PropertyTagPixelUnit | &h5110
PropertyTagPixelPerUnitX | &h5111
PropertyTagPixelPerUnitY | &h5112
PropertyTagPaletteHistogram | &h5113
PropertyTagCopyright | &h8298
PropertyTagExifExposureTime | &h829A
PropertyTagExifFNumber | &h829D
PropertyTagExifIFD | &h8769
PropertyTagICCProfile | &h8773
PropertyTagExifExposureProg | &h8822
PropertyTagExifSpectralSense | &h8824
PropertyTagGpsIFD | &h8825
PropertyTagExifISOSpeed | &h8827
PropertyTagExifOECF | &h8828
PropertyTagExifVer | &h9000
PropertyTagExifDTOrig | &h9003
PropertyTagExifDTDigitized | &h9004
PropertyTagExifCompConfig | &h9101
PropertyTagExifCompBPP | &h9102
PropertyTagExifShutterSpeed | &h9201
PropertyTagExifAperture | &h9202
PropertyTagExifBrightness | &h9203
PropertyTagExifExposureBias | &h9204
PropertyTagExifMaxAperture | &h9205
PropertyTagExifSubjectDist | &h9206
PropertyTagExifMeteringMode | &h9207
PropertyTagExifLightSource | &h9208
PropertyTagExifFlash | &h9209
PropertyTagExifFocalLength | &h920A
PropertyTagExifMakerNote | &h927C
PropertyTagExifUserComment | &h9286
PropertyTagExifDTSubsec | &h9290
PropertyTagExifDTOrigSS | &h9291
PropertyTagExifDTDigSS | &h9292
PropertyTagExifFPXVer | &hA000
PropertyTagExifColorSpace | &hA001
PropertyTagExifPixXDim | &hA002
PropertyTagExifPixYDim | &hA003
PropertyTagExifRelatedWav | &hA004
PropertyTagExifInterop | &hA005
PropertyTagExifFlashEnergy | &hA20B
PropertyTagExifSpatialFR | &hA20C
PropertyTagExifFocalXRes | &hA20E
PropertyTagExifFocalYRes | &hA20F
PropertyTagExifFocalResUnit | &hA210
PropertyTagExifSubjectLoc | &hA214
PropertyTagExifExposureIndex | &hA215
PropertyTagExifSensingMethod | &hA217
PropertyTagExifFileSource | &hA300
PropertyTagExifSceneType | &hA301
PropertyTagExifCfaPattern | &hA302

See also:

Property Tags in Alphabetical Order

Property Item Descriptions

Image File Format Specification