GpPropertyItem type

One property of an image file: an identifier, a type, and a value.

Image files hold properties such as the camera model, the date a photograph was taken or the delay of a GIF frame. Image.PropertyItem sets one, and GetAllPropertyItems returns all of them. The PropertyTag... constants of the package name the identifiers of the common properties, and the type of the value is a GpPropertyTagType. The type mirrors the GDI+ PropertyItem class.

Fields

Field Type Meaning
Id Long The identifier of the property.

The length of the value in bytes, the type and the address of the value are kept in fields that begin with an underscore (_length, _type, _address), which a program sets to describe a value it supplies. They are read through the properties below.

Type tests

Syntax: t = item.Type

Syntax: b = item.IsASCII

Type returns the GpPropertyTagType of the value. IsASCII, IsByte, IsShort, IsLong, IsRational, IsSByte, IsSShort, IsSLong, IsSRational, IsSingle and IsDouble are True when Type is the type the name gives, and IsUndefined is True for the undefined type and for a type number out of range.

Reading the value

Syntax: v = item.TheLong

Property Reads
TheASCII A String, from the ASCII text.
TheByte An unsigned byte, as an Integer.
TheSByte A signed byte, as a Byte.
TheShort An unsigned 16-bit number, as a Long.
TheSShort A signed 16-bit number, as an Integer.
TheLong An unsigned 32-bit number, as a LongLong.
TheSLong A signed 32-bit number, as a Long.
TheRational A pair of unsigned 32-bit numbers, as their quotient, a Double.
TheSRational A pair of signed 32-bit numbers, as their quotient, a Double.
TheSingle A 32-bit floating-point number.
TheDouble A 64-bit floating-point number.
AsDouble Any of the byte, short, long and floating-point types, as a Double.

A property returns 0 when the type of the value is not the one it reads.

GetRational, GetSRational

Syntax: item.GetRational( num, denom )

Syntax: item.GetSRational( num, denom )

Read a rational value as its numerator and denominator without dividing: GetRational as unsigned numbers (LongLong), GetSRational as signed ones (Long).

Dim user As GdiPlusUser = GdiPlusUser()

Dim ratio(0 To 1) As Long
ratio(0) = 7
ratio(1) = 2

Dim item As GpPropertyItem
item.Id = PropertyTagXResolution
item._type = PropertyTagTypeRational
item._length = 8
item._address = VarPtr(ratio(0))

Debug.Print Hex$(item.Id) & " " & item.IsRational & " " & item.IsLong
Debug.Print item.TheRational
Dim num As LongLong, denom As LongLong
item.GetRational num, denom
Debug.Print num & "/" & denom
Debug.Print item.AsDouble                          ' a rational is not covered by AsDouble
' Output:
' 11A True False
' 3.5
' 7/2
' 0

See Also