Introduction

The LEADTOOLS DICOM Class Library provides C++ classes to let you incorporate DICOM support into your Windows applications.

The DICOM Class Library comes in a WIN32 edition and supports development of software applications for any of the following environments:

Windows 3.x NT
Windows 4.x NT
Windows 95
Windows 98
Windows 2000
Windows XP
Windows Me

Please note that due to the large size of the PDF files that contain the LEADTOOLS manuals, these files are no longer included in the setup. Instead, these PDF files can be downloaded from our website at http://support.leadtools.com/SupportPortal/DesktopDefault.aspx?tabindex=3&tabid=27.


DICOM Definitions

C-STORE | This service allows an invoking service-user to request the storage of Composite SOP Instance information by a peer service-user.
C-FIND | This service allows an invoking service-user to match a series of Attribute strings against the Attributes of the set of SOP Instances being handled by a peer service-user. This service will return a list of requested Attributes and their values for each match.
C-GET | This service allows an invoking service-user to fetch information for one or more Composite SOP Instances from a peer service-user. The information returned by the performing service-user is based on the Attributes supplied by the invoking DIMSE-service-user.
C-MOVE | This service allows an invoking service-user to move information for one or more Composite SOP Instances from a peer service-user, to a third party service-user. The information moved is based on the Attributes supplied by the invoking service-user
C-ECHO | This service allows an invoking service-user to verify end-to-end communications with a peer service-user.
N-GET | This service allows an invoking service-user to retrieve information from a peer service-user.
N-SET | This service allows an invoking service-user to modify information being handled by a peer service-user.
N-ACTION | This service allows an invoking service-user to request that a peer service-user perform a specified action.
N-CREATE | This service allows an invoking service-user to request that a peer service-user create an instance of a SOP Class.
N-DELETE | This service allows an invoking service-user to delete an instance of a SOP Class that is being handled by a peer service-user.
SCP | Service Class Provider.
SCU | Service Class User.


An Overview of the DICOM File Format

The following topics provide general information about the DICOM File Format. It is designed to help familiarize you with DICOM. For more detailed information on the DICOM File Format, you should refer to the DICOM Standard, published by the

National Electrical Manufacturers Association

1300 N. 17th Street

Rosslyn, Virginia 22209 USA

For more information on programming using this toolkit, refer to Programming With LEADTOOLS.

Basic DICOM File Structure

Data Element Fields

Value Representations

Value Multiplicity (VM) and Delimitation

Data Element Structure

Group Length

Big-Endian versus Little Endian Byte Ordering

Data Element Type

Nesting of Data Sets

Item Encoding Rules

Delimitation of the Sequence of Items

Repeating Groups

Retired Data Elements

Private Data Elements

Private Data Element Tags

Encoding of Pixel Data

Pixel Data Encoding of Related Data Elements

Native or Encapsulated Format Encoding

Compression

Unique Identifiers

Information Object Definitions


Overview: Basic DICOM File Structure

The DICOM File Format is described by the American College of Radiology (ACR) and National Electrical Manufacturers Association (NEMA) in PS3.10 specification "Media Storage and File Format for Media Interchange", of the DICOM Standard. An illustration of the basic file structure can be seen below.

File Header

The header consists of a 128 byte File Preamble, followed by a 4 byte DICOM prefix. The header may or may not be included in the file (although one should be included in order to comply with the DICOM Standard).

Preamble | Prefix
128 bytes = ??? ??? | 4 bytes = ‘D’, ‘I’, ‘C’, ‘M’

The DICOM Standard does not require any structure for the fixed size Preamble. It is not required to be structured as a DICOM Data Element with a Tag and a Length. It is intended to facilitate access to the images and other data in the DICOM file by providing compatibility with a number of commonly used computer image file formats.

a) If the File Preamble is not used by an Application Profile or a specific implementation, all 128 bytes shall be set to 00H. This is intended to facilitate the recognition that the Preamble is used when all 128 bytes are not set as specified above.

b) The File Preamble may for example contain information enabling a multi-media application to randomly access images stored in a DICOM Data Set. The same file can be accessed in two ways: by a multi-media application using the preamble and by a DICOM Application which ignores the preamble.

The four byte DICOM Prefix shall contain the character string "DICM" encoded as uppercase characters of the ISO 8859 G0 Character Repertoire. This four byte prefix is not structured as a DICOM Data Element with a Tag and a Length.

Data Set

Each File shall contain a single Data Set representing a single SOP Instance related to a single SOP Class (and corresponding IOD).

Note: A file may contain more than a single 2D image frame as specific IODs may be defined to include multiple frames.

The Transfer Syntax used to encode the Data Set shall be the one identified by the Transfer Syntax UID of the DICOM File Meta Information.

Note: A DICOM Data Set does not include its total length. The end of the file indication provided by the DICOM File Service (see Section 8.4 of the DICOM Standard) is the only indication of the end of the Data Set.

The last Data Element of a Data Set may be Data Element (FFFC,FFFC) if padding of a Data Set is desired when a file is written. The Value of this Data Set Trailing Padding Data Element (FFFC,FFFC) has no significance and shall be ignored by all DICOM implementations reading this Data Set. File-set Readers or Updaters shall be able to process this Data Set Trailing Padding (FFFC,FFFC) either in the Data Set following the Meta Information or in Data Sets nested in a Sequence (See PS 3.5 of the DICOM Standard of the DICOM Standard).

A Data Set represents an instance of a real world Information Object. A Data Set is constructed of Data Elements. Data Elements contain the encoded Values of Attributes of that object. The specific content and semantics of these Attributes are specified in Information Object Definitions (see PS 3.3 of the DICOM Standard). The construction, characteristics, and encoding of a Data Set and its Data Elements are discussed in PS 3.5 of the DICOM Standard. Pixel Data, Overlays, and Curves are Data Elements whose interpretation depends on other related elements.

Data Elements

A Data Element is uniquely identified by a Data Element Tag. The Data Elements in a Data Set shall be ordered by increasing Data Element Tag Number and shall occur at most once in a Data Set.

Note: A Data Element Tag may occur again within Nested Data Sets (see Section 7.5 – PS 3.5 of the DICOM Standard).

Two types of Data Elements are defined:

Standard Data Elements have an even Group Number that is not (0000,eeee), (0002,eeee), (0004,eeee), or (0006,eeee).

Note: Usage of these groups is reserved for DIMSE Commands (see PS 3.7 of the DICOM Standard) and DICOM File Formats.

Private Data Elements have an odd Group Number that is not (0001,eeee), (0003,eeee), (0005,eeee), (0007,eeee), or (FFFF,eeee). Private Data Elements are discussed further in Section 7.8 (PS 3.5 of the DICOM Standard).

Note: Although similar or related Data Elements often have the same Group Number; a Data Group does not convey any semantic meaning beginning with DICOM Version 3.0.

A Data Element shall have one of three structures. Two of these structures contain the VR of the Data Element (Explicit VR) but differ in the way their lengths are expressed, while the other structure does not contain the VR (Implicit VR). All three structures contain the Data Element Tag, Value Length and Value for the Data Element. For more information, refer to Data Element Structure.

Implicit and Explicit VR Data Elements shall not coexist in a Data Set and Data Sets nested within it (see Section 7.5 – PS 3.5 of the DICOM Standard). Whether a Data Set uses Explicit or Implicit VR, among other characteristics, is determined by the negotiated Transfer Syntax (see Section 10 and Annex A – PS 3.5).

Note: VRs are not contained in Data Elements when using DICOM Default Transfer Syntax (DICOM Implicit VR Little Endian Transfer Syntax).


Overview: Data Element Fields

A Data Element is made up of fields. Three fields are common to all three Data Element structures; these are the Data Element Tag, Value Length, and Value Field. A fourth field, Value Representation, is only present in the two Explicit VR Data Element structures. The Data Element structures are defined in Sections 7.1.2. and 7.1.3. The definitions of the fields are:

Data Element Tag | An ordered pair of 16-bit unsigned integers representing the Group Number followed by Element Number.
Value Representation | A two-byte character string containing the VR of the Data Element. The VR for a given Data Element Tag shall be as defined by the Data Dictionary as specified in PS 3.6 of the DICOM Standard. The two character VR shall be encoded using characters from the DICOM default character set.
Value Length | Either:
 | a 16 or 32-bit (dependent on VR and whether VR is explicit or implicit) unsigned integer containing the Explicit Length of the Value Field as the number of bytes (even) that make up the Value. It does not include the length of the Data Element Tag, Value Representation, and Value Length Fields.
 | or
 | a 32-bit Length Field set to Undefined Length (FFFFFFFFH). Undefined Lengths may be used for Data Elements having the Value Representation (VR) Sequence of Items (SQ). For Data Elements with Value Representation OW or OB Undefined Length may be used depending on the negotiated Transfer Syntax (see Section 10 and Annex A of the DICOM Standard).
Value Field: | An even number of bytes containing the Value(s) of the Data Element.
 | The data type of Value(s) stored in this field is specified by the Data Element's VR. The VR for a given Data Element Tag can be determined using the Data Dictionary in PS 3.6 of the DICOM Standard, or using the VR Field if it is contained explicitly within the Data Element. The VR of Standard Data Elements shall agree with those specified in the Data Dictionary.
 | The Value Multiplicity specifies how many Values with this VR can be placed in the Value Field. If the VM is greater than one, multiple values shall be delimited within the Value Field as defined previously in Section 6.4 of the DICOM Standard. The VMs of Standard Data Elements are specified in the Data Dictionary in PS 3.6 of the DICOM Standard.
 | Value Fields with Undefined Length are delimited through the use of Sequence Delimitation Items and Item Delimitation Data Elements which are described further in Section 7.5 of the DICOM Standard.


Overview: Value Representations

The Value Representation of a Data Element describes the data type and format of that Data Element's Value(s). PS 3.6 of the DICOM Standard lists the VR of each Data Element by Data Element Tag.

Values with VRs constructed of character strings, except in the case of the VR UI, shall be padded with SPACE characters (20H, in the Default Character Repertoire) when necessary to achieve even length. Values with a VR of UI shall be padded with a single trailing NULL (00H) character when necessary to achieve even length. Values with a VR of OB shall be padded with a single trailing NULL byte value (00H) when necessary to achieve even length.

All new VRs defined in future versions of DICOM shall be of the same Data Element Structure as defined in Section 7.1.2 of the DICOM Standard (i.e. following the format for VRs such as OB, OW, SQ and UN).

Note: Since all new VRs will be defined as specified in section 7.1.2, an implementation may choose to ignore VRs not recognized by applying the rules stated in Section 7.1.2 of the DICOM Standard.

An individual Value, including padding, shall not exceed the Length of Value. For multi-valued fields see Section 6.4 – PS 3.5 of the DICOM Standard.

Note: The length of Value Representations for which the Character Repertoire can be extended or replaced are expressly specified in characters rather than bytes in Table 6.2-1 of the DICOM Standard. This is because the mapping from a character to the number of bytes used for that character’s encoding may be dependent on the character set used.

Escape Sequences used for Code Extension shall not be included in the count of characters.

Note: For a listing of default information about Values Representations, refer to the Default Value Representation Table.


Overview: Value Multiplicity (VM) and Delimitation

The Value Multiplicity of a Data Element specifies the number of Values that can be encoded in the Value Field of that Data Element. The VM of each Data Element is specified explicitly in PS 3.6 of the DICOM Standard. If the number of Values that may be encoded in an element is variable, it shall be represented by two numbers separated by a dash; e.g., "1-10" means that there may be 1 to 10 Values in the element.

Note: Elements having a multiplicity of "S", which represented "single", in versions of this standard preceding V3.0, will have a multiplicity of "1" in this version of this standard.

When a Data Element has multiple Values, those Values shall be delimited as follows:

For character strings, the character 5CH (BACKSLASH "\" in the case of the repertoire ISO IR-6) shall be used as a delimiter between Values.

Note: BACKSLASH ("\") is used as a delimiter between character string Values that are of fixed length as well as variable length.

Multiple binary Values of fixed length shall be a series of concatenated Values without any delimiter.

Each string Value in a multiple valued character string may be of even or odd length, but the length of the entire Value Field (including "\" delimiters) shall be of even length. If padding is required to make the Value Field of even length, a single padding character shall be applied to the end of the Value Field (to the last Value).

Note: A padding character may need to be appended to a fixed length character string value in the above case.

Only the last UID Value in a multiple valued Data Element with a VR of UI shall be padded with a single trailing NULL (00H) character when necessary to ensure that the entire Value Field (including "\" delimiters) is of even length.

Data Elements with a VR of SQ, OW, OB or UN shall always have a Value Multiplicity of one. For a listing of default information about supported VRs, refer to the Default Value Representation Table.


Overview: Data Element Structure

Note: This section makes numerous references to VRs such as OB, OW, SQ, etc. For a listing of default information about these Values Representations, refer to the Default Value Representation Table.

Data Element Structure with Explicit VR

When using the Explicit VR structures, the Data Element shall be constructed of four consecutive fields: Data Element Tag, VR, Value Length, and Value. Depending on the VR of the Data Element, the Data Element will be structured as follows:

For VRs of OB, OW, SQ and UN, the 16 bits following the two character VR Field are reserved for use by later versions of the DICOM Standard. These reserved bytes shall be set to 0000H and shall not be used or decoded. The Value Length Field is a 32-bit unsigned integer. If the Value Field has an Explicit Length, then the Value Length Field shall contain a value equal to the length (in bytes) of the Value Field. Otherwise, the Value Field has an Undefined Length and a Sequence Delimitation Item marks the end of the Value Field.

For VRs of UT the 16 bits following the two character VR Field are reserved for use by later versions of the DICOM Standard. These reserved bytes shall be set to 0000H and shall not be used or decoded. The Value Length Field is a 32-bit unsigned integer. The Value Field is required to have an Explicit Length, that is the Value Length Field shall contain a value equal to the length (in bytes) of the Value Field.

Note: VRs of UT may not have an Undefined Length, ie. a Value Length of FFFFFFFFH.

For all other VRs the Value Length Field is the 16-bit unsigned integer following the two character VR Field. The value of the Value Length Field shall equal the length of the Value Field.

An example of a Data Element with an Explicit VR, such as would be the case for data type OB, OW, SQ, or UN is shown below:

An example of a Data Element with an Explicit VR, such as would be the case for data types other than OB, OW, SQ, or UN is shown below:

Data Element Structure with Implicit VR

When using the Implicit VR structure the Data Element shall be constructed of three consecutive fields: Data Element Tag, Value Length, and Value. If the Value Field has an Explicit Length then the Value Length Field shall contain a value equal to the length (in bytes) of the Value Field. Otherwise, the Value Field has an Undefined Length and a Sequence Delimitation Item marks the end of the Value Field.

An example of a Data Element with an Implicit VR is shown below:


Overview: Group Length

The Group Length (gggg,0000) Standard Data Element shall be an optional (Type 3 Data Element Type) Data Element in DICOM V3.0 (see Section 7.4 of the DICOM Standard for a description of Data Element Types). It provides an optional optimization scheme in partial parsing of Data Sets by allowing the skipping of entire groups of Data Elements. Implementations may or may not choose to encode explicit Group Length in a Data Set. All implementations shall be able to accept or ignore such elements.


Overview: Big Endian versus Little Endian Byte Ordering

Another component of the encoding of a Data Set that shall be agreed upon by communicating Application Entities is the Byte Ordering.

Little Endian byte ordering is defined as follows:

In a binary number consisting of multiple bytes (e.g. a 32-bit unsigned integer value, the Group Number, the Element Number, etc.), the least significant byte shall be encoded first; with the remaining bytes encoded in increasing order of significance.

In a character string consisting of multiple 8-bit single byte codes, the characters will be encoded in the order of occurrence in the string (left to right).

Big Endian byte ordering is defined as follows:

In a binary number consisting of multiple bytes, the most significant byte shall be encoded first; with the remaining bytes encoded in decreasing order of significance.

In a character string consisting of multiple 8-bit single byte codes, the characters will be encoded in the order of occurrence in the string (left to right).

Byte ordering is a component of an agreed upon Transfer Syntax (see Section 10 of the DICOM Standard). The default DICOM Transfer Syntax, which shall be supported by all AEs, uses Little Endian encoding and is specified in Annex A.1 (PS 3.5 of the DICOM Standard). Alternate Transfer Syntaxes, some of which use Big Endian encoding, are also specified in Annex A (PS 3.5 of the DICOM Standard).

Note: The Command Set structure as specified in PS 3.7 of the DICOM Standard is encoded using the Little Endian Implicit VR

Transfer Syntax.

In the default case of Little Endian encoding, Big Endian Machines interpreting Data Sets shall do 'byte swapping' before interpreting or operating on certain Data Elements. The Data Elements affected are all those having VRs that are multiple byte Values and that are not a character string of 8-bit single byte codes. VRs constructed of a string of characters of 8-bit single byte codes are really constructed of a string of individual bytes, and are therefore not affected by byte ordering. The VRs that are not a string of characters and consist of multiple bytes are:

2-byte US, SS, OW and each component of AT

4-byte UL, SL, and FL

8 byte FD

Note: For the above VRs, the multiple bytes are presented in increasing order of significance when in Little Endian format. For example, an 8-byte Data Element with VR of FD, might be written in hexadecimal as 68AF4B2CH, but encoded in Little Endian would be 2C4BAF68H.


Overview: Data Element Type

An attribute, encoded as a Data Element, may or may not be required in a Data Set, depending on that Attribute's Data Element Type.

The Data Element Type of an Attribute of an Information Object Definition or an Attribute of a SOP Class Definition is used to specify whether that Attribute is mandatory or optional. The Data Element Type also indicates if an Attribute is conditional (only mandatory under certain conditions). The Data Element Types of Attributes of Composite IODs are specified in PS 3.3 of the DICOM Standard. The Data Element Types of Attributes of Normalized IODs are specified as Attributes of SOP Classes in PS 3.4 of the DICOM Standard.

Type 1 Required Data Elements

IODs and SOP Classes define Type 1 Data Elements that shall be included and are mandatory elements.

The Value Field shall contain valid data as defined by the elements VR and VM as specified in PS 3.6 of the DICOM Standard.

The Length of the Value Field shall not be zero. Absence of a valid Value in a Type 1 Data Element is a protocol violation.

Type 1C Conditional Data Elements

IODs and SOP Classes define Data Elements that shall be included under certain specified conditions. Type 1C elements have the same requirements as Type 1 elements under these conditions. It is a protocol violation if the specified conditions are met and the Data Element is not included. When the specified conditions are not met, Type 1C elements shall not be included in the Data Set.

Type 2 Required Data Elements

IODs and SOP Classes define Type 2 Data Elements that shall be included and are mandatory Data Elements. However, it is permissible that if a Value for a Type 2 element is unknown it can be encoded with zero Value Length and no Value. If the Value is known the Value Field shall contain that value as defined by the elements VR and VM as specified in PS 3.6 of the DICOM Standard. These Data Elements shall be included in the Data Set and their absence is a protocol violation.

Type 2C Conditional Data Elements

IODs and SOP Classes define Type 2C elements that have the same requirements as Type 2 elements under certain specified conditions. It is a protocol violation if the specified conditions are met and the Data Element is not included.

When the specified conditions are not met, Type 2C elements shall not be included in the Data Set.

Note: An example of a Type 2C Data Element is Inversion Time (0018,0082). For several SOP Class Definitions, this Data Element is required only if the Scanning Sequence (0018,0020) has the Value "IR." It is not required otherwise. See PS 3.3 of the DICOM Standard.

Type 3 Optional Data Elements

IODs and SOP Classes define Type 3 Data Elements that are optional Data Elements. Absence of a Type 3 element from a Data Set does not convey any significance and is not a protocol violation. Type 3 elements may also be encoded with zero length and no Value. The meaning of a zero length Type 3 Data Element shall be precisely the same as that element being absent from the Data Set.


Overview: Nesting of Data Sets

The VR identified "SQ" shall be used for Data Elements with a Value consisting of a Sequence of zero or more Items, where each Item contains a set of Data Elements. SQ provides a flexible encoding scheme that may be used for simple structures of repeating sets of Data Elements, or the encoding of more complex Information Object Definitions often called folders. SQ Data Elements can also be used recursively to contain multi-level nested structures.

The definition of the Data Elements encapsulated in each Item is provided by the specification of the Data Element (or associated Attribute) of Value Representation SQ. Items in a sequence of Items may or may not contain the same set of Data Elements. Data Elements with a VR of SQ may contain multiple Items but shall always have a Value Multiplicity of one (ie. a single Sequence).

There are three special SQ related Data Elements that are not ruled by the VR encoding rules conveyed by the Transfer Syntax. They shall be encoded as Implicit VR. These special Data Elements are Item (FFFE,E000), Item Delimitation Item (FFFE,E00D), and Sequence Delimitation Item (FFFE,E0DD). However, the Data Set within the Value Field of the Data Element Item (FFFE,E000) shall be encoded according to the rules conveyed by the Transfer Syntax.

For more information about the SQ VR, refer to the Default Value Representation Table.


Overview: Item Encoding Rules

Each Item of a Data Element of Value Representation SQ shall be encoded as a DICOM Standard Data Element with a specific Data Element Tag of Value (FFFE,E000). The Item Tag is followed by a 4 byte Item Length field encoded in one of the following two ways:

Explicit Length: The number of bytes (even) contained in the Sequence Item Value (following but not including the Item Length Field) is encoded as a 32-bit unsigned integer value (see Section 7.1 of the DICOM Standard). This length shall include the total length of all Data Elements conveyed by this Item. This Item Length shall be equal to 00000000H if the Item contains no Data Set.

Undefined Length: The Item Length Field shall contain the value FFFFFFFFH to indicate an undefined Item length. It shall be used in conjunction with an Item Delimitation Data Element. This Item Delimitation Data Element has a Data Element Tag of (FFFE,E00D) and shall follow the Data Elements encapsulated in the Item. No Value shall be present in the Item Delimitation Data Element and its Length shall be 00000000H.

The encoder of a Data Set may choose either one of the two ways of encoding. Both ways of encoding shall be supported by decoders of Data Sets. Data Element Tags (FFFF,eeee) are reserved by this standard and shall not be used.

Each Item Value shall contain a DICOM Data Set composed of Data Elements. Within the context of each Item, these Data Elements shall be ordered by increasing Data Element Tag value and appear only once (as Data Set is defined in Section 7.1 of the DICOM Standard). There is no relationship between the ordering of the Data Elements contained within an Item and the ordering of the Data Element Tag of SQ Value Representation that contains that Item. One or more Data Elements in an Item may be of Value Representation SQ, thus allowing for recursion.

Section 7.8 of the DICOM Standard specifies rules for incorporating Private Data Elements into Sequence Items.


Overview: Delimitation of the Sequence of Items

Delimitation of the last Item of a Sequence of Items, encapsulated in a Data Element of Value Representation SQ, shall be in one of the two following ways:

Explicit Length: The number of bytes (even) contained in the Data Element Value (following but not including the Data Element Length Field) is encoded as a 32-bit unsigned integer value (see Section 7.1 of the DICOM Standard). This length shall include the total length resulting from the sequence of zero or more items conveyed by this Data Element. This Data Element Length shall be equal to 00000000H if the sequence of Items contains zero Items.

Undefined Length: The Data Element Length Field shall contain a Value FFFFFFFFH to indicate an Undefined Sequence length. It shall be used in conjunction with a Sequence Delimitation Item. A Sequence Delimitation Item shall be included after the last Item in the sequence. Its Item Tag shall be (FFFE,E0DD) with an Item Length of 00000000H. No Value shall be present.

The encoder of a Sequence of Items may choose either one of the two ways of encoding. Both ways of encoding shall be supported by decoders of the Sequence of Items.

Note: The Sequence Delimitation Item Tag (FFFE,E0DD) is different from the Item Delimitation Tag (FFFE,E00D) introduced above in that it indicates the end of a Sequence of Items whose Length was left undefined. If an undefined length Item is the last Item of a Sequence of Items of undefined length, then an Item Delimitation Tag will be followed by a Sequence Delimitation Tag.

Note: An encapsulated Data Set does not include the Specific Character Set data element unless the Specific Character Set Attribute is defined as part of the IOD for that sequence.

If an encapsulated Data Set includes the Specific Character Set Attribute, it shall apply only to the encapsulated Data Set. If the Attribute Specific Character Set is not explicitly included in an encapsulated Data Set, then the Specific Character Set value of the encapsulating Data Set applies.

DE | Data Element
DE-SQ | Sequence of Items
DE-SQD | Sequence Delimitation Item
DE-I | Item
DE-ID | Item Delimitation Data Element

Please note the DE-SQD and DE-ID items are added internally. You do not have to explicitly add these items.


Overview: Repeating Groups

Multiple Overlay Planes and Curves are often associated with a single Image (see PS 3.3 of the DICOM Standard). Standard Data Elements with even Group Numbers (5000-501E,eeee) represent Curves, while elements with even Group Numbers (6000-601E,eeee) represent Overlay Planes. Both of these ranges of Group numbers are known as Repeating Groups. This use of group numbers is a remnant of versions of this standard prior to V3.0 that associated a semantic meaning with particular Groups.

In each of these ranges of Group Numbers, Standard Data Elements that have identical Element Numbers have the same meaning within each Group (and the same VR, VM, and Data Element Type). The notation (50xx,eeee) and (60xx,eeee) are used for the Group Number in Data Element Tags when referring to a common Data Element across these groups (see PS 3.6). Groups (50xx,eeee) and (60xx,eeee) are called Repeating Groups because of these characteristics. Repeating Groups shall only be allowed in the even Groups (6000-601E,eeee) and even Groups (5000-501E,eeee) cases. In the future, Data Elements with VRs of SQ shall be used to serve a similar purpose.

Note: Private Groups in the odd Groups (5001-501F,eeee) and (6001-601F,eeee) may still be used, but there is no implication of repeating semantics, nor any implied shadowing of the standard repeating groups.


Overview: Retired Data Elements

Certain Data Elements are no longer supported beginning with Version 3.0 of this standard. These Data Elements are retired and are denoted as such (RET) in the VR column in PS 3.6 of the DICOM Standard. Implementations may continue to support these Data Elements for the purpose of backward compatibility with versions of this standard prior to V3.0, but this is not a requirement of this standard. If a retired Data Element is used it must contain valid data as specified in versions of this standard prior to V3.0. Any other use of a retired Data Element, and its associated Data Element Tag, is reserved by this standard. Retired Data Element Tags shall not be redefined in later versions of this standard.


Overview: Private Data Elements

Implementations may require communication of information that cannot be contained in Standard Data Elements. Private Data Elements are intended to be used to contain such information.

Private Data Elements have the same structure as Standard Data Elements specified earlier in Section 7.1 of the DICOM Standard (i.e., Data Element Tag field, optional VR field, length field, and value field). The Group Number used in the Element Tag of Private Data Elements shall be an odd number. Private Data Elements shall be contained in the Data Set in increasing numeric order of Data Element Tag. The Value Field of a Private data element shall have one of the VRs specified by this standard in Section 6.2 of the DICOM Standard.

For each Information Object Definition or SOP Class Definition, certain Data Elements are required (Data Element Type 1, 1C, 2, or 2C) as specified in PS 3.3 and PS 3.4 of the DICOM Standard. Private Data Elements shall not be used in place of required Standard Data Elements.


Overview: Private Data Element Tags

It is possible that multiple implementors may define Private Elements with the same (odd) group number. To avoid conflicts, Private Elements shall be assigned Private Data Element Tags according to the following rules.

Private Creator Data Elements numbered (gggg,0010-00FF) (gggg is odd) shall be used to reserve a block of Elements with Group Number gggg for use by an individual implementor. The implementor shall insert an identification code in the first unused (unassigned) Element in this series to reserve a block of Private Elements. The VR of the private identification code shall be LO (Long String) and the VM shall be equal to 1.

Private Creator Data Element (gggg,0010), is a Type 1 Data Element that identifies the implementor reserving element (gggg,1000-10FF), Private Creator Data Element (gggg,0011) identifies the implementor reserving elements (gggg,1100-11FF), and so on, until Private Creator Data Element (gggg,00FF) identifies the implementor reserving elements (gggg,FF00-FFFF).

Encoders of Private Data Elements shall be able to dynamically assign private data to any available (unreserved) block(s) within the Private group, and specify this assignment through the blocks corresponding Private Creator Data Element(s). Decoders of Private Data shall be able to accept reserved blocks with a given Private Creator identification code at any position within the Private group specified by the blocks corresponding Private Creator Data Element.

Note:

a) The versions of this standard prior to V3.0 described shadow groups. These were groups with a group number one greater than the standard groups. Elimination of conflicts in Private Data Element Tags have made this distinction obsolete and this terminology has been retired.

b) The versions of this standard prior to V3.0 specified private group element numbers (gggg,10FF-7FFF) reserved for manufacturers and private group element numbers (gggg, 8100-FFFF) reserved for users. Elimination of conflicts in Private Data Element Tags has made this distinction obsolete and this specification has been retired.

Since each Item within a sequence is a self contained Data Set (see Section 7.5 of the DICOM Standard on the nesting of Data Sets via Sequences of Items), any Item which contains Private Data Elements shall also have Private Creator Data Elements reserving blocks of Elements for those Private Data Elements. The scope of the reservation is just within the Item. Items do not inherit the Private Data Element reservations made by Private Creator Data Elements in the Data Set in which the Item is nested.


Overview: Encoding of Pixel Data

The Pixel Data Element (7FE0,0010) shall be used for the exchange of encoded graphical image data. This element along with additional Data Elements, specified as Attributes of the Image Information Entities defined in PS 3.3 of the DICOM Standard, shall be used to describe the way in which the Pixel Data is encoded and shall be interpreted. Finally, depending on the negotiated Transfer Syntax (see Section 10 and Annex A of the DICOM Standard), Pixel Data may be compressed.

The Pixel Data Element (7FE0,0010) has a VR of OW or OB, depending on the negotiated Transfer Syntax (see Annex A of the DICOM Standard). The only difference between OW and OB being that OB, a string of bytes, shall be unaffected by Byte Ordering (see Section 7.3 of the DICOM Standard).


Overview: Pixel Data Encoding of Related Data Elements

Encoded Pixel Data of various bit depths shall be accommodated. The following three Data Elements shall define the Pixel structure:

Bits Allocated (0028,0100)

Bits Stored (0028,0101)

High Bit (0028,0102)

Each Pixel Cell shall contain a single Pixel Sample Value. The size of the Pixel Cell shall be specified by Bits Allocated (0028,0100). Bits Stored (0028,0101) defines the total number of these allocated bits that will be used to represent a Pixel Sample Value. Bits Stored (0028,0101) shall never be larger than Bits Allocated (0028,0100). High Bit (0028,0102) specifies where the high order bit of the Bits Stored (0028,0101) is to be placed with respect to the Bits Allocated (0028,0100) specification. Bits not used for Pixel Sample Values can be used for overlay planes described further in PS3.3 of the DICOM Standard.

Note: For example, in Pixel Data with 16 bits (2 bytes) allocated, 12 bits stored, and bit 15 specified as the high bit, one pixel sample is encoded in each 16-bit word, with the 4 least significant bits of each word not containing Pixel Data. See Annex D of the DICOM Standard for other examples of the basic encoding schemes.

Starting with DICOM Version 3.0, restrictions are placed on acceptable Values for Bits Allocated (0028,0100), Bits Stored (0028,0101), and High Bit (0028,0102) and are specified in the Information Object Definitions in PS3.3. Also, the Value Field containing Pixel Data, like all other Value Fields in DICOM, shall be an even number of bytes in length. This means that the Value Field may need to be padded with data that is not part of the image and shall not be considered significant. If needed, the padding bits shall be appended to the end of the Value Field.

The field of bits representing the value of a Pixel Sample shall be a binary 2's complement integer or an unsigned integer, as specified by the Data Element Pixel Representation (0028,0103). The sign bit shall be the High Bit in a Pixel Sample Value that is a 2's complement integer. The minimum actual Pixel Sample Value encountered in the Pixel Data is specified by Smallest Image Pixel Value (0028,0106) while the maximum value is specified by Largest Image Pixel Value (0028,0107).


Overview: Native or Encapsulated Format Encoding

Pixel data conveyed in the Pixel Data Element (7FE0,0010) may be sent either in a Native (uncompressed) Format or in an Encapsulated Format (e.g. compressed) defined outside the DICOM standard.

If Pixel Data is sent in a Native Format, the Value Representation OW is most often required. The Value Representation OB may also be used for Pixel Data in cases where Bits Allocated has a value less than or equal to 8, but only with Transfer Syntaxes where the Value Representation is explicitly conveyed (see Annex A of the DICOM Standard).

Note: The DICOM default Transfer Syntax (Implicit VR Little Endian) does not explicitly convey Value Representation and therefore the VR of OB may not be used for Pixel Data when using the default Transfer Syntax.

Native format Pixel Cells are encoded as the direct concatenation of the bits of each Pixel Cell, where the most significant bit of a Pixel Cell is immediately followed by the least significant bit of the next Pixel Cell. The number of bits of each Pixel Cell is defined by the Bits Allocated (0028,0100) Data Element Value. When a Pixel Cell crosses a word boundary in the OW case, or a byte boundary in the OB case, it shall continue to be encoded, least significant bit to most significant bit, in the next word, or byte, respectively (see Annex D of the DICOM Standard). For Pixel Data encoded with the Value Representation OW, the byte ordering of the resulting 2-byte words is defined by the Little Endian or Big Endian Transfer Syntaxes negotiated at the Association Establishment (see Annex A of the DICOM Standard).

Note:

a) For Pixel Data encoded with the Value Representation OB, the Pixel Data encoding is unaffected by Little Endian or Big Endian byte ordering.

b) If encoding Pixel Data with a Value for Bits Allocated (0028,0100) not equal to 16 be sure to read and understand Annex D of the DICOM Standard.

If sent in an Encapsulated Format (i.e. other than the Native Format) the Value Representation OB is used. The Pixel Cells are encoded according to the encoding process defined by one of the negotiated Transfer Syntaxes (see Annex A of the DICOM Standard). The encapsulated pixel stream of encoded pixel data is segmented in one or more Fragments which convey their explicit length. The sequence of Fragments of the encapsulated pixel stream is terminated by a delimiter, thus allowing the support of encoding processes where the resulting length of the entire pixel stream is not known until it is entirely encoded. This Encapsulated Format supports both Single-Frame and Multi-Frame images (as defined in PS 3.3 of the DICOM Standard).


Overview: Compression

JPEG Compression

DICOM provides a mechanism for supporting the use of JPEG Image Compression through the Encapsulated Format (see PS 3.3 of the DICOM Standard). Annex A defines a number of Transfer Syntaxes which reference the JPEG Standard and provide a number of lossless (bit preserving) and lossy compression schemes.

Note: The context where the usage of lossy compression of medical images is clinically acceptable is beyond the scope of the DICOM Standard. The policies associated with the selection of appropriate compression parameters (e.g. compression ratio) for JPEG lossy compression is also beyond the scope of this standard.

In order to facilitate interoperability of implementations conforming to the DICOM Standard which elect to use one or more of the Transfer Syntaxes for JPEG Image Compression, the following policy is specified:

Any implementation which conforms to the DICOM Standard and has elected to support any one of the Transfer Syntaxes for lossless JPEG Image Compression, shall support the following lossless compression: The subset (first-order horizontal prediction [Selection Value 1) of JPEG Process 14 (DPCM, non-hierarchical with Huffman coding) (see Annex F of the DICOM Standard).

Any implementation which conforms to the DICOM Standard and has elected to support any one of the Transfer Syntaxes for 8-bit lossy JPEG Image Compression, shall support the JPEG Baseline Compression (coding Process 1).

Any implementation which conforms to the DICOM Standard and has elected to support any one of the Transfer Syntaxes for 12-bit lossy JPEG Image Compression, shall support the JPEG Compression Process 4.

Note: The DICOM conformance statement shall differentiate between implementations that can simply receive JPEG encoded images and those that can receive and process JPEG encoded images (see PS 3.2 of the DICOM Standard).

The use of the DICOM Encapsulated Format to support JPEG Compressed Pixel Data implies that the Data Elements which are related to the Native Format Pixel Data encoding (e.g. Bits Allocated, Bits Stored, High Bit, Pixel Representation, Rows, Columns, etc.) shall contain values which are consistent with the characteristics of the uncompressed pixel data from which the compressed Data Stream was derived. The Pixel Data characteristics included in the JPEG Interchange Format shall be used to decode the compressed data stream.

Run Length Encoding Compression

DICOM provides a mechanism for supporting the use of Run Length Encoding (RLE) Compression which is a byte oriented lossless compression scheme through the encapsulated Format (see PS 3.3 of this Standard). Annex G of the DICOM Standard defines RLE Compression and its Transfer Syntax.

Note: The RLE Compression algorithm described in Annex G of the DICOM Standard is the compression used in the TIFF 6.0 specification known as the "PackBits" scheme.

The use of the DICOM Encapsulated Format to support RLE Compressed Pixel Data implies that the Data Elements which are related to the Native Format Pixel Data encoding (e.g. Bits Allocated, Bits Stored, High Bit, Pixel Representation, Rows, Columns, etc.) shall contain values which are consistent with the characteristics of the uncompressed pixel data from which the compressed data was derived.


Overview: Unique Identifiers

Unique Identifiers (UIDs) provide the capability to uniquely identify a wide variety of items. They guarantee uniqueness across multiple countries, sites, vendors and equipment. This scheme is used in DICOM to uniquely identify items such as SOP Classes, image instances, network negotiation parameters, etc.

The UID identification scheme is based on the OSI Object Identification (numeric form) as defined by the ISO 8824 standard. All Unique Identifiers, used within the context of the DICOM Standard, are registered values as defined by ISO 9834-3 to ensure global uniqueness. The uses of such UIDs are defined in the various Parts of the DICOM Standard.

Each UID is composed of two parts, an <org root> and a <suffix>:

UID = <org root>.<suffix>

The <org root> portion of the UID uniquely identifies an organization, (i.e., manufacturer, research organization, NEMA, etc.), and is composed of a number of numeric components as defined by ISO 8824. The <suffix> portion of the UID is also composed of a number of numeric components, and shall be unique within the scope of the <org root>. This implies that the organization identified in the <org root> is responsible for guaranteeing <suffix> uniqueness by providing registration policies. These policies shall guarantee <suffix> uniqueness for all UID's created by that organization. Unlike the <org root>, which may be common for UID's in an organization, the <suffix> shall take different unique values between different UID's that identify different objects.

The <org root> "1.2.840.10008" is reserved for DICOM defined items (such as DICOM Transfer Syntaxes) and shall not be used for privately defined items (such as an Image Instance).

Although a specific implementation may choose some particular structure for its generated UIDs, it should never assume that a UID carries any semantics. Thus, a UID shall not be "parsed" to find a particular value or component. Component definition (for the suffix) is implementation specific and may change as long as uniqueness is maintained. Parsing UID's may jeopardize the ability to inter-operate as implementations evolve.

Note: For a listing of UIDs supported by DICOM, refer to the Default UID Table.


Overview: Information Object Definitions

The Part PS 3.3 of the DICOM Standard specifies the set of Information Object Definitions (IODs) which provide an abstract definition of real-world objects applicable to communication of digital medical information. This standard was developed by American College of Radiology (ACR) and National Electrical Manufacturers Association (NEMA).

An Information Object Definition (IOD) is an object-oriented abstract data model used to specify information about Real-World Objects. An IOD provides communicating Application Entities with a common view of the information to be exchanged.

An IOD does not represent a specific instance of a Real-World Object, but rather a class of Real-World Objects which share the same properties. An IOD used to generally represent a single class of Real-World Objects is called a Normalized Information Object. An IOD which includes information about related Real-World Objects is called a Composite Information Object.

The illustration below shows the structure of an Information Object Definition. Each class consists of one or more modules, where each module consists of one or more elements. For details concerning Information Object Definitions, refer to the DICOM Standard.

For an example of a Class, refer to Class Example.

For examples of Modules, refer to Module Examples.

The following topics also pertain to Information Object Definitions:

Composite IOD

Normalized IOD

Attributes

Normalized and Composite SOP Classes

Modules

Definitions


Overview: Composite IOD

A Composite IOD is an Information Object Definition which represents parts of several entities included in the DICOM Model of the Real-World. This Model is introduced in Section 7. Such an IOD includes Attributes which are not inherent in the Real-World Object that the IOD represents but rather are inherent in related Real-World Objects.

These related Real-World Objects provide a complete context for the exchanged information. When an instance of a Composite IOD is communicated, this entire context is exchanged between Application Entities. Relationships between Composite IOD Instances shall be conveyed in this contextual information.


Overview: Normalized IOD

A Normalized IOD is an Information Object Definition which generally represents a single entity in the DICOM Model of the Real-World.

In this Standard, strict definition of Normalized Object Definitions has not been applied. Application of strict definitions would often result in unnecessary complexity and reduced performance of implementations for several applications.


Overview: Attributes

The Attributes of an IOD describe the properties of a Real-World Object Instance. Related Attributes are grouped into Modules which represent a higher level of semantics documented in the Module Specifications found in Annex C of the DICOM Standard.

Attributes are encoded as Data Elements using the rules, the Value Representation and the Value Multiplicity concepts specified in PS 3.5 of the DICOM Standard. For specific Data Elements, the Value Representation and Value Multiplicity are specified in the Data Dictionary in PS 3.6 of the DICOM Standard.

When multiple modules containing the same Attributes(s) are included in an IOD, the Attribute shall be encoded only once into a Data Element. If one of the modules is a specialization of the other (e.g., General Image and CT Image) the Attribute definition contained in the more specialized module shall be used.


Overview: Normalized and Composite SOP Classes

DICOM defines two types of SOP Classes, Normalized and Composite. Normalized SOP Classes are defined as the union of a Normalized IOD and a set of DIMSE-N Services. Composite SOP Classes are defined as the union of a Composite IOD and a set of DIMSE-C Services.


Overview: Modules

Mandatory Modules

For each IOD, Mandatory Modules shall be supported per the definitions, semantics and requirements defined in Annex C.

Conditional Modules

Conditional Modules are Mandatory Modules if specific conditions are met. If the specified conditions are not met, this Module shall not be supported; that is, no information defined in that Module shall be sent.

User Option Modules

User Option Modules may or may not be supported. If an optional Module is supported, the Attribute Types specified in the Modules in Annex C shall be supported.


Overview: Definitions

The following definitions pertain to Information Object Definitions and are commonly used in the DICOM Standard.

Attribute tag: | A unique identifier for an Attribute of an Information Object composed of an ordered pair of numbers (a Group Number followed by an Element number).
Composite IOD: | an Information Object Definition which represents parts of several entities in the DICOM Application Model. Such an IOD includes Attributes which are not inherent in the Real-World Object that the IOD represents but rather are inherent in related Real-World Objects.
Derived image: | an image in which the pixel data was constructed from pixel data of one or more other images (source images).
DICOM information model: | an Entity-Relationship diagram which is used to model the relationships between the Information Object Definitions representing classes of Real-World Objects defined by the DICOM Application Model.
DICOM application model: | an Entity-Relationship diagram used to model the relationships between Real-World Objects which are within the area of interest of the DICOM Standard.
Information entity: | that portion of information defined by a Composite IOD which is related to one specific class of Real-World Object. There is a one-to-one correspondence between Information Entities and entities in the DICOM Application Model.
Information object definition (IOD): | a data abstraction of a class of similar Real-World Objects which defines the nature and Attributes relevant to the class of Real-World Objects represented.
Module: | A set of Attributes within an Information Entity or Normalized IOD which are logically related to each other.
Multi-frame image: | Image that contains multiple two-dimensional pixel planes.
Normalized IOD: | an Information Object Definition which represents a single entity in the DICOM Application Model. Such an IOD includes Attributes which are only inherent in the Real-World Object that the IOD represents.
Cine run: | A set of temporally related frames acquired at constant or variable frame rates. This term incorporates the general class of serialography.


Class Example

The following is an example of the contents of the Computed Radiography Image Class IOD:

Example Class: Computed Radiography Image (CR Image)

Module: Patient

Element: Patient's Name

Element: Patient ID

Element: Patient's Birth Date

Element: Patient's Sex

Element: Referenced Patient Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Element: Patient's Birth Time

Element: Other Patient ID

Element: Other Patient Names

Element: Ethnic Group

Element: Patient Comments

Module: General Study

Element: Study Instance UID

Element: Study Date

Element: Study Time

Element: Referring Physician's Name

Element: Study ID

Element: Accession Number

Element: Study Description

Element: Physician(s) of Record

Element: Name of Physician(s) Reading Study

Element: Referenced Study Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Module: Patient Study

Element: Admitting Diagnoses Description

Element: Patient's Age

Element: Patient's Size

Element: Patient's Weight

Element: Occupation

Element: Additional Patient's History

Module: General Series

Element: Modality

Element: Series Instance UID

Element: Series Number

Element: Laterality

Element: Series Date

Element: Series Time

Element: Performing Physicians' Name

Element: Protocol Name

Element: Series Description

Element: Operators' Name

Element: Referenced Study Component Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Element: Body Part Examined

Element: Patient Position

Element: Smallest Pixel Value in Series

Element: Largest Pixel Value in Series

Element: Request Attributes Sequence

Element: Requested Procedure ID
Element: Scheduled Procedure Step ID
Element: Scheduled Procedure Step Description
Element: Scheduled Action Item Code Sequence
 | Element: Code Value
 | Element: Coding Scheme Designator
 | Element: Code Meaning

Element: Performed Procedure Step ID

Element: Performed Procedure Step Start Date

Element: Performed Procedure Step Start Time

Element: Performed Procedure Step Description

Module: CR Series

Element: Body Part Examined

Element: View Position

Element: Filter Type

Element: Collimator/grid name

Element: Focal Spot

Element: Plate Type

Element: Phosphor Type

Module: General Equipment

Element: Manufacturer

Element: Institution Name

Element: Institution Address

Element: Station Name

Element: Institutional Department Name

Element: Manufacturer's Model Name

Element: Device Serial Number

Element: Software Versions

Element: Spatial Resolution

Element: Date of Last Calibration

Element: Time of Last Calibration

Element: Pixel Padding Value

Module: General Image

Element: Image Number

Element: Patient Orientation

Element: Image Date

Element: Image Time

Element: Image Type

Element: Acquisition Number

Element: Acquisition Date

Element: Acquisition Time

Element: Referenced Image Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Element: Derivation Description

Element: Source Image Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Element: Images in Acquisition

Element: Image Comments

Element: Lossy Image Compression

Module: Image Pixel

Element: Samples per Pixel

Element: Photometric Interpretation

Element: Rows

Element: Columns

Element: Bits Allocated

Element: Bits Stored

Element: High Bit

Element: Pixel Representation

Element: Pixel Data

Element: Planar Configuration

Element: Pixel Aspect Ratio

Element: Smallest Image Pixel Value

Element: Largest Image Pixel Value

Element: Red Palette Color Lookup Table Descriptor

Element: Green Palette Color Lookup Table Descriptor

Element: Blue Palette Color Lookup Table Descriptor

Element: Red Palette Color Lookup Table Data

Element: Green Palette Color Lookup Table Data

Element: Blue Palette Color Lookup Table Data

Module: Contrast/bolus

Element: Contrast/Bolus Agent

Element: Contrast/Bolus Agent Sequence

Element: Code Value

Element: Coding Scheme Designator

Element: Code Meaning

Element: Contrast/Bolus Route

Element: Contrast/Bolus Administration Route Sequence

Element: Code Value
Element: Coding Scheme Designator
Element: Code Meaning
Element: Additional Drug Sequence
 | Element: Code Value
 | Element: Coding Scheme Designator
 | Element: Code Meaning

Element: Contrast/Bolus Volume

Element: Contrast/Bolus Start Time

Element: Contrast/Bolus Stop Time

Element: Contrast/Bolus Total Dose

Element: Contrast Flow Rate(s)

Element: Contrast Flow Duration(s)

Element: Contrast/Bolus Ingredient

Element: Contrast/Bolus Ingredient Concentration

Module: CR Image

Element: KVP

Element: Plate ID

Element: Distance Source to Detector

Element: Distance Source to Patient

Element: Exposure Time

Element: X-ray Tube Current

Element: Exposure

Element: Exposure in mAs

Element: Imager Pixel Spacing

Element: Generator Power

Element: Acquisition Device Processing Description

Element: Acquisition Device Processing Code

Element: Cassette Orientation

Element: Cassette Size

Element: Exposures on Plate

Element: Relative X-ray Exposure

Element: Sensitivity

Module: Overlay Plane

Element: Overlay Rows

Element: Overlay Columns

Element: Overlay Type

Element: Overlay Origin

Element: Overlay Bits Allocated

Element: Overlay Bit Position

Element: Overlay Data

Element: Overlay Description

Element: Overlay Subtype

Element: Overlay Label

Element: ROI Area

Element: ROI Mean

Element: ROI Standard Deviation

Module: Curve

Element: Curve Dimensions

Element: Number of Points

Element: Type of Data

Element: Data Value Representation

Element: Curve Data

Element: Curve Description

Element: Axis Units

Element: Axis Labels

Element: Minimum Coordinate Value

Element: Maximum Coordinate Value

Element: Curve Range

Element: Curve Data Descriptor

Element: Coordinate Start Value

Element: Coordinate Step Value

Element: Curve Label

Element: Referenced Overlay Sequence

Element: Referenced SOP Class UID

Element: Referenced SOP Instance UID

Element: Referenced Overlay Group

Module: Modality LUT

Element: Modality LUT Sequence

Element: LUT Descriptor

Element: LUT Explanation

Element: Modality LUT Type

Element: LUT Data

Element: Rescale Intercept

Element: Rescale Slope

Element: Rescale Type

Module: VOI LUT

Element: VOI LUT Sequence

Element: LUT Descriptor

Element: LUT Explanation

Element: LUT Data

Element: Window Center

Element: Window Width

Element: Window Center & Width Explanation

Module: SOP Common

Element: SOP Class UID

Element: SOP Instance UID

Element: Specific Character Set

Element: Instance Creation Date

Element: Instance Creation Time

Element: Instance Creator UID


Module Example

Below are graphical representations of a General Study Module and a Patient Module. For an example of a Class, refer to Class Example.


LEADTOOLS DICOM Network Communication Support for Message Exchange

For a general overview of the communication support and message exchange capabilities supported by LEADTOOLS, refer to the following. For more information on the basic DICOM File format and DICOM Communication Protocol, refer to the DICOM Standard.

Network Communication Support Environment

Message Exchange

Network Support


Message Exchange

DICOM Messages are used to communicate information across the DICOM network. A DICOM Message is a DICOM Command Set, and can be followed by a conditional DICOM Data Set. The Command Set indicates the operations and/or notifications that the requesting Application Entity (AE) wishes to have the accepting AE perform on or with the conditional Data Set.

Command Sets are made up of Command Elements, which contain encoded values for each field of the Command Set. The semantics for the Command Set are specified in the DIMSE protocol. Each element in a Command Set is made up of an explicit Tag, a Value Length, and a Value Field.

Within the Command Set, Elements are ordered by increasing Tag number. The Tag uniquely identifies an Element, and occurs only once in a Command Set. The requirements for Command Sets and Command Elements are defined in the DIMSE protocol.

An Element in a Command Set is made up of three fields; a Tag, a Value Length, and a Value Field.

Command Element Tag: | Is an ordered pair of 16-bit unsigned integers that represents the Group Number followed by Element Number.
Value Length: | Is a 32-bit unsigned integer that represents the explicit Length of the value. This is an even number of bytes. This does not include the length of the Command Element Tag or Value Length fields.
Value Field: | Is an even number of bytes that contains the Value or Values(s) of the Command Element. The Command Element's Value Representation (VR) determines the command type of Value(s) stored in this field.
 | The Value Multiplicity (VM) specifies the number of Values that can be placed in the Value Field. When the VM is > 1, multiple Values can be stored within the Value Field.

DICOM Application Entities use services that are provided by the DICOM Message Service Element (DIMSE). DIMSE specifies two sets of services:

DIMSE-C These operations are associated with composite SOP Classes and provide effective compatibility with previous versions of the DICOM Standard.

In LEADTOOLS, the following are DIMSE-C commands:

COMMAND_C_STORE

COMMAND_C_FIND

COMMAND_C_GET

COMMAND_C_MOVE

COMMAND_C_CANCEL

COMMAND_C_ECHO

DIMSE-N These operations are associated with normalized SOP Classes and provide an extended set of operations and notifications.

In LEADTOOLS, the following are DIMSE-N commands:

COMMAND_N_REPORT

COMMAND_N_GET

COMMAND_N_SET

COMMAND_N_ACTION

COMMAND_N_CREATE

COMMAND_N_DELETE

When using DICOM Messages, AEs can serve in one of two roles:

1. invoking DIMSE-service-user

2. performing DIMSE-service-user

The invoking service-user sends command requests to the performing service-user. The performing service users performs the requested operation, and reports progress/status by sending command responses back to the to the invoking service-user.

The following is a list of DIMSE Services, which are supported in LEADTOOLS by the DIMSE-C and DIMSE-N commands:

C Store Request

C Store Response

C Find Request

C Find Response

C Get Request

C Get Response

C Move Request

C Move Response

C Cancel Request

C Echo Request

C Echo Response

N Event Report Request

N Event Report Response

N Get Request

N Get Response

N Set Request

N Set Response

N Action Request

N Action Response

N Create Request

N Create Response

N Delete Request

N Delete Response

C-STORE | This service allows an invoking service-user to request the storage of Composite SOP Instance information by a peer service-user.
C-FIND | This service allows an invoking service-user to match a series of Attribute strings against the Attributes of the set of SOP Instances being handled by a peer service-user. This service will return a list of requested Attributes and their values for each match.
C-GET | This service allows an invoking service-user to fetch information for one or more Composite SOP Instances from a peer service-user. The information returned by the performing service-user is based on the Attributes supplied by the invoking DIMSE-service-user.
C-MOVE | This service allows an invoking service-user to move information for one or more Composite SOP Instances from a peer service-user, to a third party service-user. The information moved is based on the Attributes supplied by the invoking service-user
C-ECHO | This service allows an invoking service-user to verify end-to-end communications with a peer service-user.
N-GET | This service allows an invoking service-user to retrieve information from a peer service-user.
N-SET | This service allows an invoking service-user to modify information being handled by a peer service-user.
N-ACTION | This service allows an invoking service-user to request that a peer service-user perform a specified action.
N-CREATE | This service allows an invoking service-user to request that a peer service-user create an instance of a SOP Class.
N-DELETE | This service allows an invoking service-user to delete an instance of a SOP Class that is being handled by a peer service-user.


Network Support

The LEADTOOLS DICOM Network Class Library functions allow programmers to create either client or server application for DICOM communications. The following illustrations show the various roles that your DICOM Application Entity can serve.


Network Communication Support Environment

The LEADTOOLS DICOM and LEADTOOLS DICOM Network Class Library together provide functionality for communication of DICOM Application Entities. These functions provide an interface to the services offered by the OSI Presentation Service (ISO 8822) and the OSI Association Control Service Element (ACSE) (ISO 8649), which are referred to as the Upper Layer Service or UL Service.

This UL Service allows a broad range of existing networking environments to be used for DICOM based medical imaging communication.

LEADTOOLS provides functionality for connecting two Application Entities over a network.

After two Application Entities (AEs) are connected over a network, they can establish a DICOM Association. The establishment of an Association is the first step in setting up communication between two AEs. Only after the connection is "Associated" can DICOM command messages be exchanged between the AEs. Application Entities use the Association to negotiate which SOP classes can be exchanged and the encoding format for the data. Two AEs establish an association as follows:

AE#1 sends an Associate Request message to AE#2. AE#1 is known as the requester.

AE#2 responds by sending an Associate Accept response message to AE#1. AE#2 is known as the acceptor.

Alternatively, and AE can reject an Associate Request by sending an Associate Reject message to the requesting AE.

An association is gracefully terminated as follows:

AE#1 sends an Associate Release request message to AE#2.

AE#2 responds by sending an Associate Release response message to AE#1.

An association can be abnormally terminated by either AE sending an Associate Abort request message. This message is a non-confirmed service, and does not have an associated response.

After an association has been established, AEs can exchange DICOM messages. Messages are formatted as Associate Data messages.

The following illustrate the physical arrangement of the data structures for the various Associate messages. LEADTOOLS handles creating the outline of the various data structures, and in some cases also fills in values for certain data structure members.

Associate Request PDU

Associate Accept PDU

Associate Reject PDU

Data Transfer PDU

Release Request PDU

Release Response PDU

Abort PDU

The following images illustrate the logical arrangement of the data strucutures for the various Associate messages. LEADTOOLS handles crating the outline of the various data structures, and in some cases also fills in values for certain data structure members.


Associate Request PDU


Associate Accept PDU


Associate Reject PDU


Data Transfer PDU


Release Request PDU


Release Response PDU


Abort PDU


Example Programs

The following example programs are in separate EXAMPLES\CLASSLIB\ subdirectories (such as C:\LEAD Technologies, Inc\LEADTOOLS\EXAMPLES\CLASSLIB\DEMO). The executable files for these examples were compiled with Medical capabilities of the toolkit. To get Medical capabilities, you must buy the LEADTOOLS Medical toolkit. Otherwise, if you recompile the examples, the resulting executable files will not have the Medical capabilities.

Note:

You can run the example programs on your system by clicking the appropriate buttons in online help. If you try to run an example program that is not on your system, an error message will appear.

DICOM | DICOM is the Dicom example program. It uses pull-down menus to demonstrate most of the LEADTOOLS DICOM features in one application. This program was compiled using a Microsoft compiler.
DICOMCLT | DICOMCLT is the DICOM Network Client example program. It uses pull-down menus to demonstrate most of the LEADTOOLS DICOM Network Client features in one application.
DICOMSRV | DICOMSRV is the DICOM Network Server example program. It uses pull-down menus to demonstrate most of the LEADTOOLS DICOM Network Server features in one application.


Version History

Current version: | 14.5
Last update: | October 20, 2005

Changes from Version 14 to Version 14.5

Changes from Version 13 to Version 14

Changes from Version 12.1 to Version 13

Changes from Version 12 to Version 12.1

Changes from Version 11.5 to Version 12

Changes from Version 11 to Version 11.5

Version 11


Changes from Version 14 to Version 14.5

Version 14.5 of the LEADTOOLS DICOM CLIB has changed from Version 14 as follows:

LEADTOOLS DICOM CLIB has added new function loads a DICOM Data Set from memory.

The rest of this topic lists the new functions in version 14.5.

LDicomDS::LoadDSMemory


Changes from Version 13 to Version 14

Version 14 of the LEADTOOLS DICOM CLIB has changed from Version 13 as follows:

LEADTOOLS DICOM CLIB now supports Overlays Overview.

LEADTOOLS DICOM CLIB now supports LUT Encoding Overview.

LEADTOOLS DICOM CLIB now provides more extensive support for annotations.

LEADTOOLS DICOM CLIB now provides more extensive support for security, including the ability to change the default security settings.

The following functions have been changed since version 13

LDicomDS::GetImage takes 2 new parameters.

LDicomDS::SetImage takes 1 new parameter.

LDicomDS::GetImageList takes 1 new parameter.

LDicomDS::SetImageList takes 1 new parameter.

LDicomDS::InsertImage takes 1 new parameter.

LDicomDS::InsertImageList takes 1 new parameter.

LDicomNet::LDicomNet has a second constructor.

The following are new structures:

DICOMANNPOINT

DICOMCODEDCONCEPT

DICOMCODESEQUENCEITEM

DICOMCONTEXTGROUP

DICOMGRAPHICLAYER

DICOMGRAPHICOBJECT

DICOMPRESSTATEINFO

DICOMTEXTOBJECT

DICOMWAVEFORMANNOTATION

L_SSL_CTX_CREATE

The rest of this topic lists the new functions in version 14.

Security Settings

LDicomNet::LDicomNet

LDicomNet::Initialize

LDicomNet::OnPrivateKeyPassword

Annotation

LDicomDS::AddLayerImageRef

LDicomDS::AddPresStateImageRefByDS

LDicomDS::AddPresStateImageRefByFileName

LDicomDS::ConvertDicomAnnObjToLEADAnnObj

LDicomDS::ConvertLEADAnnObjToDicomAnnObjs

LDicomDS::CreateGraphicAnnSQItem

LDicomDS::CreateGraphicObject

LDicomDS::CreateLayer

LDicomDS::CreateTextObject

LDicomDS::FindFirstGraphicAnnSQItem

LDicomDS::FindFirstPresStateRefSeriesItem

LDicomDS::FindNextGraphicAnnSQItem

LDicomDS::FindNextPresStateRefSeriesItem

LDicomDS::GetGraphicObjectCount

LDicomDS::GetGraphicObjectInfo

LDicomDS::GetGraphicObjElement

LDicomDS::GetGraphicObjPointCount

LDicomDS::GetLayerCount

LDicomDS::GetLayerElementByIndex

LDicomDS::GetLayerElementByName

LDicomDS::GetLayerGraphicObjectCount

LDicomDS::GetLayerImageRefCount

LDicomDS::GetLayerImageRefElement

LDicomDS::GetLayerImageRefSOPInstance

LDicomDS::GetLayerIndex

LDicomDS::GetLayerInfo

LDicomDS::GetLayerName

LDicomDS::GetLayerTextObjectCount

LDicomDS::GetPresStateImageRefBySOPInstance

LDicomDS::GetPresStateImageRefCount

LDicomDS::GetPresStateImageRefSOPInstance

LDicomDS::GetPresStateInfo

LDicomDS::GetTextObjectCount

LDicomDS::GetTextObjectInfo

LDicomDS::GetTextObjElement

LDicomDS::OnConvertLEADAnnObjToDicomAnnObj

LDicomDS::RemoveAllGraphicObjects

LDicomDS::RemoveAllImageRefFromAllLayers

LDicomDS::RemoveAllImageRefsFromLayer

LDicomDS::RemoveAllLayers

LDicomDS::RemoveAllPresStateImageRefs

LDicomDS::RemoveAllTextObjects

LDicomDS::RemoveGraphicObject

LDicomDS::RemoveImageRefFromLayer

LDicomDS::RemoveLayerByIndex

LDicomDS::RemoveLayerByName

LDicomDS::RemoveLayerGraphicObjects

LDicomDS::RemoveLayerTextObjects

LDicomDS::RemovePresStateImageRefBySOPInstance

LDicomDS::RemoveTextObject

LDicomDS::SetGraphicObjectInfo

LDicomDS::SetLayerInfo

LDicomDS::SetLayerName

LDicomDS::SetPresStateInfo

LDicomDS::SetTextObjectInfo

Overlay Overview

LDicomDS::GetOverlayAttributes

LDicomDS::GetOverlayActivationLayer

LDicomDS::GetOverlayBitmap

LDicomDS::GetOverlayBitmapList

LDicomDS::GetOverlayCount

LDicomDS::SetOverlayAttributes

LDicomDS::SetOverlayBitmap

LDicomDS::SetOverlayBitmapList

LDicomDS::DeleteOverlay

LUT Encoding Overview

LDicomDS::GetModalityLUTAttributes

LDicomDS::GetModalityLUTData

LDicomDS::DeleteModalityLUT

LDicomDS::SetModalityLUT

LDicomDS::GetPaletteColorLUTAttributes

LDicomDS::SetPaletteColorLUTAttributes

LDicomDS::GetPaletteColorLUTData

LDicomDS::SetPaletteColorLUTData

LDicomDS::DeletePaletteColorLUT

LDicomDS::GetWindowCount

LDicomDS::GetVOILUTCount

LDicomDS::GetWindow

LDicomDS::SetWindow

LDicomDS::DeleteWindow

LDicomDS::GetVOILUT

LDicomDS::SetVOILUT

LDicomDS::GetVOILUTData

LDicomDS::DeleteVOILUT

LDicomPrintSCU

LDicomPrintSCU::LDicomPrintSCU

LDicomPrintSCU::~LDicomPrintSCU

LDicomPrintSCU::Associate

LDicomPrintSCU::CreateFilmBox

LDicomPrintSCU::CreateFilmSession

LDicomPrintSCU::CreateOverlayBox

LDicomPrintSCU::CreatePresentationLUT

LDicomPrintSCU::CreatePullPrintRequest

LDicomPrintSCU::DeleteFilmBox

LDicomPrintSCU::DeleteFilmSession

LDicomPrintSCU::DeleteOverlayBox

LDicomPrintSCU::DeletePresentationLUT

LDicomPrintSCU::DeletePullPrintRequest

LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

LDicomPrintSCU::FreeImageBoxesInstanceUIDs

LDicomPrintSCU::GetAbortInfo

LDicomPrintSCU::GetAnnotationBoxesCount

LDicomPrintSCU::GetAnnotationBoxInstanceUID

LDicomPrintSCU::GetAssociateRejectInfo

LDicomPrintSCU::GetDefaultFilmBoxParameters

LDicomPrintSCU::GetDefaultFilmSessionParameters

LDicomPrintSCU::GetDefaultImageBoxParameters

LDicomPrintSCU::GetDefaultOverlayBoxParameters

LDicomPrintSCU::GetDefaultPullPrintRequestParameters

LDicomPrintSCU::GetFilmBoxInstanceUID

LDicomPrintSCU::GetFilmSessionInstanceUID

LDicomPrintSCU::GetImageBoxesCount

LDicomPrintSCU::GetImageBoxInstanceUID

LDicomPrintSCU::GetLastOperationStatus

LDicomPrintSCU::GetOverlayBoxInstanceUID

LDicomPrintSCU::GetPresentationLUTInstanceUID

LDicomPrintSCU::GetPrinterConfiguration

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrintJobInfo

LDicomPrintSCU::GetPrintJobInstanceUID

LDicomPrintSCU::GetPullPrintRequestInstanceUID

LDicomPrintSCU::IsClassSupported

LDicomPrintSCU::OnPrinterReport

LDicomPrintSCU::OnPrintJobReport

LDicomPrintSCU::OnStatus

LDicomPrintSCU::PrintFilmBox

LDicomPrintSCU::PrintFilmSession

LDicomPrintSCU::PrintPullPrintRequestSession

LDicomPrintSCU::Release

LDicomPrintSCU::SetTimeout

LDicomPrintSCU::UpdateAnnotationBox

LDicomPrintSCU::UpdateFilmBox

LDicomPrintSCU::UpdateFilmSession

LDicomPrintSCU::UpdateImageBox

LDicomPrintSCU::UpdateOverlayBox

Digital Signatures

LDicomDS::CreateSignature

LDicomDS::DeleteSignature

LDicomDS::FindSignature

LDicomDS::GetMacAlgorithm

LDicomDS::GetMacTransferSyntax

LDicomDS::GetSignature

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignaturesCount

LDicomDS::GetSignatureUID

LDicomDS::GetSignedElement

LDicomDS::GetSignedElementsCount

LDicomDS::SaveCertificate

LDicomDS::VerifySignature

DICOM Waveform Channels

LDicomWaveformChannel::LDicomWaveformChannel

LDicomWaveformChannel::~LDicomWaveformChannel

LDicomWaveformChannel::GetChannelSamples

LDicomWaveformChannel::SetChannelSamples16

LDicomWaveformChannel::SetChannelSamples32

LDicomWaveformChannel::SetChannelSamples8

LDicomWaveformChannel::GetChannelSource

LDicomWaveformChannel::SetChannelSource

LDicomWaveformChannel::GetChannelSensitivity

LDicomWaveformChannel::SetChannelSensitivity

LDicomWaveformChannel::GetChannelLabel

LDicomWaveformChannel::GetChannelMaximumValue

LDicomWaveformChannel::GetChannelMinimumValue

LDicomWaveformChannel::GetChannelOffset

LDicomWaveformChannel::GetChannelSampleSkew

LDicomWaveformChannel::GetChannelStatus

LDicomWaveformChannel::GetChannelTimeSkew

LDicomWaveformChannel::GetFilterHighFrequency

LDicomWaveformChannel::GetFilterLowFrequency

LDicomWaveformChannel::GetNotchFilterBandwidth

LDicomWaveformChannel::GetNotchFilterFrequency

LDicomWaveformChannel::GetWaveformChannelNumber

LDicomWaveformChannel::SetChannelLabel

LDicomWaveformChannel::SetChannelMaximumValue

LDicomWaveformChannel::SetChannelMinimumValue

LDicomWaveformChannel::SetChannelOffset

LDicomWaveformChannel::SetChannelSampleSkew

LDicomWaveformChannel::SetChannelStatus

LDicomWaveformChannel::SetChannelTimeSkew

LDicomWaveformChannel::SetFilterHighFrequency

LDicomWaveformChannel::SetFilterLowFrequency

LDicomWaveformChannel::SetNotchFilterBandwidth

LDicomWaveformChannel::SetNotchFilterFrequency

LDicomWaveformChannel::SetWaveformChannelNumber

LDicomWaveformChannel::AddAnnotation

LDicomWaveformChannel::DeleteAnnotation

LDicomWaveformChannel::GetAnnotationCount

LDicomWaveformChannel::GetAnnotation

LDicomWaveformChannel::GetIndex

LDicomWaveformChannel::GetWaveformGroup

DICOM Waveform Groups

LDicomWaveformGroup::LDicomWaveformGroup

LDicomWaveformGroup::~LdicomWaveformGroup

LDicomWaveformGroup::Reset

LDicomDS::AddWaveformGroup

LDicomDS::DeleteWaveformGroup

LDicomDS::GetWaveformGroupCount

LDicomDS::GetWaveformGroup

LDicomWaveformGroup::AddChannel

LDicomWaveformGroup::DeleteChannel

LDicomWaveformGroup::GetChannel

LDicomWaveformGroup::GetNumberOfChannels

LDicomWaveformGroup::GetNumberOfSamplesPerChannel

LDicomWaveformGroup::SetNumberOfSamplesPerChannel

LDicomWaveformGroup::GetMultiplexGroupLabel

LDicomWaveformGroup::GetMultiplexGroupTimeOffset

LDicomWaveformGroup::GetSampleInterpretation

LDicomWaveformGroup::GetSamplingFrequency

LDicomWaveformGroup::GetTriggerSamplePosition

LDicomWaveformGroup::GetTriggerTimeOffset

LDicomWaveformGroup::GetWaveformOriginality

LDicomWaveformGroup::GetWaveformPaddingValue

LDicomWaveformGroup::SetMultiplexGroupLabel

LDicomWaveformGroup::SetMultiplexGroupTimeOffset

LDicomWaveformGroup::SetSampleInterpretation

LDicomWaveformGroup::SetSamplingFrequency

LDicomWaveformGroup::SetTriggerSamplePosition

LDicomWaveformGroup::SetTriggerTimeOffset

LDicomWaveformGroup::SetWaveformOriginality

LDicomWaveformGroup::SetWaveformPaddingValue

LDicomWaveformGroup::LoadAudio

LDicomWaveformGroup::SaveAudio

DICOM Context Groups

DICOM Context Groups: Loading/Inserting and Deleting Context Groups

DICOM Context Groups: Maneuvering Through the Context Group Table

DICOM Context Groups: Searching the Context Group Table

DICOM Context Groups: Inserting and Deleting Coded Concepts

DICOM Context Groups: Modifying Coded Concepts

DICOM Context Groups: Restoring Context Groups

DICOM Context Groups: Miscellaneous

LDicomContextGroup::Load

LDicomContextGroup::Insert

LDicomContextGroup::Delete

LDicomContextGroup::Reset

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

LDicomContextGroup::GetCount

LDicomContextGroup::FindIndex

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

LDicomContextGroup::GetContextGroup

LDicomContextGroup::Find

LDicomContextGroup::FindCodedConcept

LDicomContextGroup::InsertCodedConcept

LDicomContextGroup::DeleteCodedConcept

LDicomContextGroup::SetCodeMeaning

LDicomContextGroup::Default

LDicomContextGroup::Exists

LDicomContextGroup::ExistsCodedConcept


Changes from Version 12.1 to Version 13

Version 13 of the LEADTOOLS DICOM Class Library has changed from Version 12.1 as follows:

LEADTOOLS DICOM Class Library now supports JPEG 2000 compression of Pixel Data Elements.

LEADTOOLS DICOM Class Library now supports creating DICOM Directories for DICOM File-sets

LEADTOOLS DICOM Class Library now supports annotation files stored in DICOM data sets.

Changed functions:

The following function has been changed since version 12.1

The LDicomNet::LDicomNet function takes an extra parameter.

The rest of this topic lists the new functions:

DICOM Data Sets

LDicomDS::ChangeTransferSyntax

LDicomDS::GetDefaultJ2KOptions

LDicomDS::GetJ2KOptions

LDicomDS::GetKeepPixelDataIntactFlag

LDicomDS::SetJ2KOptions

LDicomDS::SetKeepPixelDataIntactFlag

DICOM Directory

LDicomDir::LDicomDir

LDicomDir::~LDicomDir

LDicomDir::ResetDicomDir

LDicomDir::SaveDicomDir

LDicomDir::SetOptions

LDicomDir::GetOptions

LDicomDir::SetFileSetID

LDicomDir::SetDescriptorFile

LDicomDir::InsertDicomFile

LDicomDir::InsertDicomDS

LDicomDir::OnInsertDicomFile

DICOM Annotation Files

LDicomDS::AnnCount

LDicomDS::AnnDelete

LDicomDS::AnnLoad

LDicomDS::AnnSave

ISCL Security

LDicomNet::CloseForced

LDicomNet::ExternalAuthenticateISCL

LDicomNet::GetChallengeISCL

LDicomNet::GetCommBlockLengthISCL

LDicomNet::GetErrorSecure

LDicomNet::GetIndexForEncryptISCL

LDicomNet::GetIndexForMutualAuthISCL

LDicomNet::GetPeerAuthDataISCL

LDicomNet::GetPeerEncryptionISCL

LDicomNet::GetPeerMACISCL

LDicomNet::GetPeerRequestedMessageLengthISCL

LDicomNet::GetStatusISCL

LDicomNet::InternalAuthenticateISCL

LDicomNet::IsISCLQueueEmpty

LDicomNet::OnNonSecureReceivedISCL

LDicomNet::OnNonSecureSendISCL

LDicomNet::SendNonSecureISCL

LDicomNet::SetAuthDataISCL

LDicomNet::SetDefaultEncryptionISCL

LDicomNet::SetDefaultSigningISCL

LDicomNet::SetEncryptKeyISCL

LDicomNet::SetIndexForEncryptISCL

LDicomNet::SetIndexForMutualAuthISCL

LDicomNet::SetMaxCommBlockLengthISCL

LDicomNet::SetMaxMessageLengthISCL

LDicomNet::SetMutualAuthAlgISCL

LDicomNet::SetMutualAuthKeyISCL

TLS Security

LDicomNet::GetAuthenticationAlgorithmTLS

LDicomNet::GetCipherFromIndexTLS

LDicomNet::GetCiphersuiteTLS

LDicomNet::GetEncryptionAlgorithmTLS

LDicomNet::GetEncryptKeyLengthTLS

LDicomNet::GetIntegrityAlgorithmTLS

LDicomNet::GetKeyExchangeAlgorithmTLS

LDicomNet::GetMutualAuthKeyLengthTLS

LDicomNet::OnSecureLinkReady

LDicomNet::SetCipherToIndexTLS

LDicomNet::SetClientCertificateTLS

LDicomNet::SetServerCertificateTLS


Changes from Version 12 to Version 12.1

Version 12.1 of the LEADTOOLS DICOM Class Library has changed from Version 12 as follows:

LEADTOOLS DICOM Class Library now supports several new classes, including:

Grayscale Softcopy Presentation State

Basic Voice Audio

12-Lead ECG

General ECG

Ambulatory ECG

Hemodynamic

Basic Cardiac EP

LEADTOOLS DICOM Class Library now supports several new UIDs, including:

JPEG-LS Lossless Image Compression Transfer Syntax

JPEG-LS Lossy (Near-Lossless) Image Compression Transfer Syntax

Ambulatory ECG Waveform Storage

Hemodynamic Waveform Storage

Cardiac Electrophysiology Waveform Storage

Basic Voice Audio Waveform Storage

Grayscale Softcopy Presentation State Storage

LEADTOOLS DICOM Class Library now supports several new Modules, including:

Presentation series

Presentation state

Bitmap display shutter

Overlay curve activation

Displayed area

Graphic annotation

Spatial transformation

Graphic layer

Softcopy VOI LUT

Softcopy presentation LUT

Synchronization

Waveform identification

Waveform

Waveform annotation

DICOM now supports Structured IODs.


Changes from Version 11.5 to Version 12

Version 12 of the LEADTOOLS DICOM Class Library has changed from version 11.5 as follows:

LEADTOOLS DICOM Class Library now supports several new classes, including:

Radiotherapy Beams Treatment Record Class

Radiotherapy Brachy Treatment Record Class

Visible Light Endoscopic Image Class

Visible Light Microscopic Image Class

Visible Light Photographic Image Class

DICOM Server Demo is now available.

Support for the December 1999 DICOM 3.0 Specification is provided.

Optimized memory management, increasing the speed of all DICOM functions.

Optimized DICOM image processing while loading DICOM images. (Faster LUT, faster palette, faster color space conversion)

Added a caching mechanism between disk and memory for optimal speed.

Redesigned the communication process between the DICOM module and the compression filters (JPEG, RLE).

Changed Structures, Constants and Functions

The following structure has been changed since version 11.5

The nCentury member of the VALUEDATETIME structure has been removed. In addition, the nOffset member has been changed from type L_UINT32 to L_INT32.

The LDicomUID::Insert function takes an extra parameter.

DICOMIOD; (New members added)

Several of the TAG constants, UID constants, IOD Class constants, IOD Module constants and IOD Usage constants have been modified. For a list of available constants, refer to the following:

Abstract Syntax Values

Data Element Tag Constants

IOD Class Constants

IOD Module Constants

IOD Usage Constants

Transfer Syntax Values

UID Table


Changes from Version 11 to Version 11.5

Version 11.5 of the LEADTOOLS DICOM Class Library has changed from version 11 as follows:

DICOM Network Communication for Message Exchange is now supported. (Medical Express Suite only)

Changed or removed functions by class

LDicomDS

The following functions now take an extra parameter:

LDicomDS::GetChildElement

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

The rest of this topic lists the new functions in version 11 or 11.5, by class.

LDicomAssociate

LDicomAssociate::LDicomAssociate

LDicomAssociate::~LDicomAssociate

LDicomAssociate::AddPresentation

LDicomAssociate::AddTransfer

LDicomAssociate::AddUserInfo

LDicomAssociate::Default

LDicomAssociate::DelPresentation

LDicomAssociate::DelTransfer

LDicomAssociate::DelUserInfo

LDicomAssociate::FindAbstract

LDicomAssociate::GetAbstract

LDicomAssociate::GetApplication

LDicomAssociate::GetCalled

LDicomAssociate::GetCalling

LDicomAssociate::GetDataUserInfo

LDicomAssociate::GetExtended

LDicomAssociate::GetImplementClass

LDicomAssociate::GetImplementVersion

LDicomAssociate::GetInvokedOperations

LDicomAssociate::GetLengthExtended

LDicomAssociate::GetLengthUserInfo

LDicomAssociate::GetMaxLength

LDicomAssociate::GetPerformedOperations

LDicomAssociate::GetPresentation

LDicomAssociate::GetPresentationCount

LDicomAssociate::GetProviderRole

LDicomAssociate::GetResult

LDicomAssociate::GetTransfer

LDicomAssociate::GetTransferCount

LDicomAssociate::GetTypeUserInfo

LDicomAssociate::GetUserInfoCount

LDicomAssociate::GetUserRole

LDicomAssociate::GetVersion

LDicomAssociate::IsAsyncOperations

LDicomAssociate::IsImplementClass

LDicomAssociate::IsImplementVersion

LDicomAssociate::IsMaxLength

LDicomAssociate::IsRequest

LDicomAssociate::IsRoleSelect

LDicomAssociate::Reset

LDicomAssociate::SetAbstract

LDicomAssociate::SetApplication

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetExtended

LDicomAssociate::SetImplementClass

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetMaxLength

LDicomAssociate::SetPresentation

LDicomAssociate::SetRequest

LDicomAssociate::SetResult

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetTransfer

LDicomAssociate::SetUserInfo

LDicomAssociate::SetVersion

LDicomDS

LDicomDS::DeleteKey

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindNextKey

LDicomDS::FindPrevKey

LDicomDS::GetChildKey

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetNextKey

LDicomDS::GetParentKey

LDicomDS::GetPrevKey

LDicomDS::GetRootKey

LDicomDS::GetValueKey

LDicomDS::InsertKey

LDicomDS::CopyDS

LDicomDS::GetInfoCS

LDicomDS::InitCS

LDicomDS::SetDebugDS

LDicomDS::IsVolatileElement

LDicomNet

LDicomNet::LDicomNet

LDicomNet::~LDicomNet

LDicomNet::Accept

LDicomNet::Close

LDicomNet::Connect

LDicomNet::GetAssociate

LDicomNet::GetClient

LDicomNet::GetClientCount

LDicomNet::GetHostInfo

LDicomNet::GetPeerInfo

LDicomNet::GetQueueSend

LDicomNet::GetServer

LDicomNet::IsActivated

LDicomNet::IsAssociated

LDicomNet::IsConnected

LDicomNet::Listen

LDicomNet::OnAccept (Medical Express Suite only)

LDicomNet::OnClose (Medical Express Suite only)

LDicomNet::OnConnect (Medical Express Suite only)

LDicomNet::OnReceive (Medical Express Suite only)

LDicomNet::OnReceiveAbort (Medical Express Suite only)

LDicomNet::OnReceiveAssociateAccept (Medical Express Suite only)

LDicomNet::OnReceiveAssociateReject (Medical Express Suite only)

LDicomNet::OnReceiveAssociateRequest (Medical Express Suite only)

LDicomNet::OnReceiveCCancelRequest (Medical Express Suite only)

LDicomNet::OnReceiveCEchoRequest (Medical Express Suite only)

LDicomNet::OnReceiveCEchoResponse (Medical Express Suite only)

LDicomNet::OnReceiveCFindRequest (Medical Express Suite only)

LDicomNet::OnReceiveCFindResponse (Medical Express Suite only)

LDicomNet::OnReceiveCGetRequest (Medical Express Suite only)

LDicomNet::OnReceiveCGetResponse (Medical Express Suite only)

LDicomNet::OnReceiveCMoveRequest (Medical Express Suite only)

LDicomNet::OnReceiveCMoveResponse (Medical Express Suite only)

LDicomNet::OnReceiveCStoreRequest (Medical Express Suite only)

LDicomNet::OnReceiveCStoreResponse (Medical Express Suite only)

LDicomNet::OnReceiveData (Medical Express Suite only)

LDicomNet::OnReceiveNActionRequest (Medical Express Suite only)

LDicomNet::OnReceiveNActionResponse (Medical Express Suite only)

LDicomNet::OnReceiveNCreateRequest (Medical Express Suite only)

LDicomNet::OnReceiveNCreateResponse (Medical Express Suite only)

LDicomNet::OnReceiveNDeleteRequest (Medical Express Suite only)

LDicomNet::OnReceiveNDeleteResponse (Medical Express Suite only)

LDicomNet::OnReceiveNGetRequest (Medical Express Suite only)

LDicomNet::OnReceiveNGetResponse (Medical Express Suite only)

LDicomNet::OnReceiveNReportRequest (Medical Express Suite only)

LDicomNet::OnReceiveNReportResponse (Medical Express Suite only)

LDicomNet::OnReceiveNSetRequest (Medical Express Suite only)

LDicomNet::OnReceiveNSetResponse (Medical Express Suite only)

LDicomNet::OnReceiveReleaseRequest (Medical Express Suite only)

LDicomNet::OnReceiveReleaseResponse (Medical Express Suite only)

LDicomNet::OnReceiveUnknown (Medical Express Suite only)

LDicomNet::OnSend (Medical Express Suite only)

LDicomNet::SendAbort

LDicomNet::SendAssociateAccept

LDicomNet::SendAssociateReject

LDicomNet::SendAssociateRequest

LDicomNet::SendCCancelRequest

LDicomNet::SendCEchoRequest

LDicomNet::SendCEchoResponse

LDicomNet::SendCFindRequest

LDicomNet::SendCFindResponse

LDicomNet::SendCGetRequest

LDicomNet::SendCGetResponse

LDicomNet::SendCMoveRequest

LDicomNet::SendCMoveResponse

LDicomNet::SendCStoreRequest

LDicomNet::SendCStoreResponse

LDicomNet::SendData

LDicomNet::SendNActionRequest

LDicomNet::SendNActionResponse

LDicomNet::SendNCreateRequest

LDicomNet::SendNCreateResponse

LDicomNet::SendNDeleteRequest

LDicomNet::SendNDeleteResponse

LDicomNet::SendNGetRequest

LDicomNet::SendNGetResponse

LDicomNet::SendNReportRequest

LDicomNet::SendNReportResponse

LDicomNet::SendNSetRequest

LDicomNet::SendNSetResponse

LDicomNet::SendReleaseRequest

LDicomNet::SendReleaseResponse

LDicomNet::ShutDown

LDicomNet::StartUp


Version 11

Version 11 is the first version of LEADTOOLS DICOM Class Library.

The rest of this topic lists the new functions by class :

LDicomDS

LDicomDS::ConformanceDS

LDicomDS::DeleteElement

LDicomDS::DeleteImage

LDicomDS::DeleteModule

LDicomDS::ExistsElement

LDicomDS::LDicomDS

LDicomDS::~LDicomDS

LDicomDS::FindFirstElement

LDicomDS::FindIndexModule

LDicomDS::FindLastElement

LDicomDS::FindModule

LDicomDS::FindNextElement

LDicomDS::FindPrevElement

LDicomDS::FreeValue

LDicomDS::GetAgeValue

LDicomDS::GetBinaryValue

LDicomDS::GetCharValue

LDicomDS::GetChildElement

LDicomDS::GetConvertValue

LDicomDS::GetCountImage

LDicomDS::GetCountModule

LDicomDS::GetCountValue

LDicomDS::GetDateTimeValue

LDicomDS::GetDateValue

LDicomDS::GetDoubleValue

LDicomDS::GetFirstElement

LDicomDS::GetFloatValue

LDicomDS::GetInfoImage

LDicomDS::GetImage

LDicomDS::GetImageList

LDicomDS::GetInfoDS

LDicomDS::GetLastElement

LDicomDS::GetLevelElement

LDicomDS::GetLongValue

LDicomDS::GetNextElement

LDicomDS::GetParentElement

LDicomDS::GetPreamble

LDicomDS::GetPrevElement

LDicomDS::GetRootElement

LDicomDS::GetShortValue

LDicomDS::GetStringValue

LDicomDS::GetTimeValue

LDicomDS::InitDS

LDicomDS::InsertElement

LDicomDS::InsertImage

LDicomDS::InsertImageList

LDicomDS::InsertModule

LDicomDS::LoadDS

LDicomDS::ResetDS

LDicomDS::SaveDS

LDicomDS::SetAgeValue

LDicomDS::SetBinaryValue

LDicomDS::SetCharValue

LDicomDS::SetConvertValue

LDicomDS::SetDateTimeValue

LDicomDS::SetDateValue

LDicomDS::SetDoubleValue

LDicomDS::SetFloatValue

LDicomDS::SetImage

LDicomDS::SetImageList

LDicomDS::SetLongValue

LDicomDS::SetPreamble

LDicomDS::SetShortValue

LDicomDS::SetStringValue

LDicomDS::SetTimeValue

LDicomIOD

LDicomIOD::Default

LDicomIOD::Delete

LDicomIOD::Exists

LDicomIOD::Find

LDicomIOD::FindClass

LDicomIOD::FindIndexModule

LDicomIOD::FindModule

LDicomIOD::GetChild

LDicomIOD::GetCountModule

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetParent

LDicomIOD::GetPrev

LDicomIOD::GetRoot

LDicomIOD::Insert

LDicomIOD::Reset

LDicomIOD::SetDescription

LDicomIOD::SetName

LDicomTag

LDicomTag::Default

LDicomTag::Delete

LDicomTag::Exists

LDicomTag::Find

LDicomTag::FindIndex

LDicomTag::GetCount

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetNext

LDicomTag::GetPrev

LDicomTag::Insert

LDicomTag::Reset

LDicomTag::SetName

LDicomUID

LDicomUID::Default

LDicomUID::Delete

LDicomUID::Exists

LDicomUID::Find

LDicomUID::FindIndex

LDicomUID::GetCount

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetNext

LDicomUID::GetPrev

LDicomUID::Insert

LDicomUID::Reset

LDicomUID::SetName

LDicomVR

LDicomVR::Default

LDicomVR::Delete

LDicomVR::Exists

LDicomVR::Find

LDicomVR::FindIndex

LDicomVR::GetCount

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetNext

LDicomVR::GetPrev

LDicomVR::Insert

LDicomVR::Reset

LDicomVR::SetName


Copyright notice

Copyright Notices

©Copyright LEAD Technologies, Inc. 1991-2005. ALL RIGHTS RESERVED

Portions of the PCDLIB32.DLL, PCDLIB.DLL, LFFPX7.DLL, LFKODAK.DLL, EKFPIXJPEG140.DLL, PDC_SDK.DLL, PROFIRE.DLL, DC120V154_32.DLL, LFDCR14N.DLL, DCSPROBACK.DLL, DCSPRO3SLR.DLL, LFDCS14N.DLL, and LFKDC14N.DLL files contain material that is ©Copyright Eastman Kodak Company, 1996-2001. This software is based in part on the work of the Independent JPEG Group.

Portions of the LFCRW14N.DLL, LTCMP14.DLL, CDSDK.reg, CDSDK.dll, CDRAPCLS.dll, czs_ui.dll, deimg.dll, deImg010.dll, deImg110.dll, deImg153.dll, deimg301.dll, deimg401.dll, deImg404.dll, deimg602.dll, Deimg603.dll, DeImgd60.dll, pscAdimg.dll, pscCllct.dll, pscCStUI.dll, pscDcd.dll, pscDevUI.dll, pscDvlp.dll, Pscl2STI.dll, pscll.dll, pscParse.dll, pscSetup.dll, psdkdll.dll, psdkReg.dll, psParse.dll. file contain material that is © Canon, Inc. 2002

Portions of the LFFPX7.DLL and LFKODAK.DLL files contain material that is ©Copyright Hewlett Packard, 1996.

Portions of the OCR/ICR/OMR Features and the help file for the OCR/ICR/OMR Features are ©Copyright Scansoft, Inc. 1995-2003. ALL RIGHTS RESERVED

Portions of the Barcode Modules contain material that is ©Copyright Axtel Inc., 1999.

Portions of the LEADTOOLS PDF Plug in and the LEADTOOLS Vector Imaging Pro are ©Copyright 1996, 2000 Artifex Software Inc. All rights reserved.

File filters for decoding MrSID ® and DjVu ® formats are provided under a license from Lizardtech, Inc.

The "FlashPix" format uses Microsoft's OLE structured storage.

Portions of the DICOM help files in Medical Imaging product line are reprinted with permission from the National Electrical Manufacturers Association ©Copyright 1998 by the National Electrical Manufacturers Association. All rights including translation into other languages, reserved under the Universal Copyright Convention, the Berne Convention or the Protection of Literacy and Artistic Works, and the International and Pan American Copyright Conventions.

Portions of LEADTOOLS Data Security Add On contain software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/), including cryptographic software written by Eric Young (eay@cryptsoft.com) and by Tim Hudson (tjh@cryptsoft.com). Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. Copyright Tim Hudson 1995-1998 (tjh@cryptsoft.com) All rights reserved.

Portions of LEADTOOLS Data Security Add On contain software based on the MD5 Message Digest Algorithm developed by RSA Data Security, Inc.. Copyright (c) 1991-92 RSA Data Security, Inc. All Rights Reserved.

Portions hereof licensed under US patent 5,327,254 and foreign counterparts.

Portions of the LEADTOOLS ICC Profiles material is © Copyright 2004, International Color Consortium.

Trademarks

LEAD® and LEADTOOLS® are registered trademarks of LEAD Technologies, Inc.
Microsoft, Windows, Windows NT, Visual Basic, Visual FoxPro, and Microsoft Access are either trademarks or registered trademarks of the Microsoft Corporation.
OS/2® is a registered trademark of International Business Machines Corporation.

TextBridge®OCR is a registered trademark of Scansoft, Inc.

ISIS® is a registered trademark of Pixel Translations, Inc.

ScanAhead™ is a trademark of Pixel Translations, Inc.

FlashPix™ is a trademark of Eastman Kodak Company.

All other brand or product names used in this online help are trademarks of their respective holders.

Address and Contact Information

LEAD Technologies, Inc.
Suite 400
1201 Greenwood Cliff
Charlotte, NC 28204

(704) 332-5532
FAX: (704) 372-8161
E-mail: support@leadtools.com
Technical support: (704) 372-9681 or support@leadtools.com
Home page: http://www.leadtools.com


Programming with LEADTOOLS

The following topics provide a systematic approach to understanding how to program with the LEADTOOLS DICOM API.

Getting Started

Considering Development Systems

Using LEADTOOLS with Your C/C++ Compiler

Working with DICOM

Working with Data Sets

Working with Information Object Definitions

Working with Tags

Working with Unique Identifiers

Working with Value Representations

Working with Basic Directory Key Elements

Creating and Loading a Data Set

Working with DICOM Annotations

Creating DICOM Directories

Implementing JPEG 2000 Plug in Features

Overlays Overview

LUT Encoding Overview

Print Management SCU

Working with DICOM Connections and Message Transfer

Working with DICOM Network Connections

Working with DICOM Associate Connections

Working with Command Sets

Creating a DICOM Network Connection

Creating a DICOM Associate Connection

Creating an SCU

Creating an SCP

Sending Messages

Receiving Messages

Moving Composite Data

Diagram of an SCU-SCP Set-Up

Closing a DICOM Associate Connection

Security Profiles

Security Profiles

Working with Digital Signatures

ISCL Security

General Integrated Secure Communication Layer (ISCL) Information

Protocols

Establishing an ISCL Line Connection

Adding Security to a DICOM Connection

Sending and Receiving Messages

Closing an ISCL Connection

TLS Security

General Transport Layer Secure (TLS) Information

Adding TLS Security to a DICOM Connection

Negotiating a Ciphersuite


Considering Development Systems

The LEADTOOLS DICOM Class Library is designed as a set of standard C++ objects. These objects make use of the LEADTOOLS DICOM API, which are standard Windows Dynamic Link Libraries. You should be able to use the LEADTOOLS DICOM Class Library with any compiler that supports C++ class objects and Windows DLLs.

The LEADTOOLS Class Library objects can be used as base classes for classes that you wish to derive.


Using LEADTOOLS with Your C/C++ Compiler

Using LEADTOOLS with Your C++ Compiler

For Microsoft C, you need to include the library (.LIB) files that LEADTOOLS supplies in order to call LEADTOOLS API functions. For a summary of the library files, refer to Files To Be Included With Your Application. For the library files required by a particular function, refer to the function description.

For other compilers, you may need to generate a .LIB file from a DLL. For example, use the IMPLIB.EXE program with Borland C, versions 3.x and 4.x. For other compilers, on WIN32 systems, you should also specify alignment on a 1-byte boundary.

The make files for the example programs are different for different editions of LEADTOOLS, as follows:

For WIN32 editions, all of the example programs have separate make files for Microsoft C and for Borland C. Before using a Borland make file, you must update its variable assignments to reflect the correct path name on your system for the library and include files.


Unlocking DICOM Support

Extensive DICOM file format support is unlocked in a number of ways using LSettings::UnlockSupport . LSettings::UnlockSupport must be called with the key found on the toolkit certificate, which will be e-mailed to you.

DICOM file format support can be unlocked by calling LSettings::UnlockSupport (L_SUPPORT_DICOM, "key"), or, LSettings::UnlockSupport (L_SUPPORT_MEDICAL, "key"), depending on the toolkit the user has purchased.

To unlock DICOM communication support (available only in the select LEAD products), LSettings::UnlockSupport must be called with the key found on the toolkit certificate. LSettings::UnlockSupport (L_SUPPORT_MEDICAL_NET, "key") tells the package to unlock DICOM file format support, all Medical features, and the unsecure DICOM Communication support. The key is passed for verification. For more information about required files, refer to Files To Be Included With Your Application .


Unlocking Special LEAD Features

LEAD offers a variety of features, such as Document support, Medical support, Vector support, etc., which are only available in certain toolkits and are locked. To use these features you must:

purchase a toolkit that supports the desired feature(s).

print the applicable runtime agreement from the help file. For information on the runtime agreements, go to Topic Selection and click on the LEAD Licensing button.

complete the Transmittal document and fax it and the runtime agreement to LEAD's Licensing Department at 704 – 372 – 3789. (To get a copy of the Transmittal document, you must contact LEAD.)

if prepaid licenses are desired, include the order form with payment information. You can fax this along with the Transmittal form and the runtime agreement. (To get a copy of the order form, you must contact LEAD.)

once we have received the signed agreement, we will send instructions for eliminating the license dialogs and the key(s) necessary for unlocking the appropriate features.

when you have received the instructions and the key(s) call the LSettings::UnlockSupport function with the appropriate key.

For example, if you have purchased the LEADTOOLS Document Imaging toolkit:

print the Document Imaging Agreement (or the Document Imaging with OCR Agreement if you have also purchased the LEADTOOLS OCR Module).

complete the Transmittal document and fax it and the Document Imaging Agreement (or the Document Imaging with OCR Agreement) to LEAD's Licensing Department.

if you want prepaid licenses, print a copy of the order form, fill it out and send the order form and payment information to LEAD.

once we have received the signed Document Imaging Agreement (or Document Imaging with OCR Agreement), we will send the instructions for eliminating the license dialogs and any necessary keys.

when you receive the instructions and the key(s), call LSettings::UnlockSupport (L_SUPPORT_DOCUMENT, "Document Key") to unlock the Document features. Please note that "Document Key" represents the actual key you will receive from LEAD. Also note that if you also purchased the LEADTOOLS OCR Module, the OCR features will have to be unlocked separately, using the appropriate key.

For information on products and the features available in each product, or for information on licensing, refer to Topic Selection.

To determine if a certain feature is locked, call the LSettings::IsSupportLocked .


Working with Data Sets

A Data Set is a collection of Data Elements stored in a DICOM file. Each DICOM file may or may not include a header consisting of a Preamble and a Prefix. For more information about the DICOM File Format, refer to the An Overview of the DICOM File Format or the DICOM Standard, published by the

National Electrical Manufacturers Association

1300 N. 17th Street

Rosslyn, Virginia 22209 USA

hereafter referred to as the DICOM Standard.

Each DICOM file represents a separate class of information. For example, one DICOM file may represent the Computed Tomography Image class, and another DICOM file may represent the Radiotherapy Structure Set class. However, both classes would not be contained in the same DICOM file. For a list of the standard classes supported by DICOM, refer to the IOD Class Constants. In addition to the standard classes supported by DICOM, user-defined classes may also be added.

For each class supported by DICOM there are certain modules contained in each class. Each module consists of a number of Data Elements, each Data Element having its own tag. These Data Elements can be mandatory or optional, depending on the module and the class. For a list of the default modules supported by DICOM, refer to IOD Module Constants. For a list of default Data Elements (tag values) supported by DICOM, refer to Data Element Tag Constants. For more details concerning the DICOM File Format, refer to An Overview of the DICOM File Format and the DICOM Standard. In addition to the standard modules and data elements supported by DICOM, user-defined modules and data elements may also be added.

LEADTOOLS maintains the Data Set internally as a tree structure. In this documentation the tree will be referred to as the Data Set, and individual members of the Data Set will be referred to as Data Elements or items. Some of the functions provided by LEADTOOLS allow you to evaluate the Data Set as a tree or as a list. All functions pertaining to the Data Sets are in the class LDicomDS.

LEADTOOLS provides a number of functions for maneuvering through the Data Set, getting and setting Data Set information, getting and setting Data Element values, searching the Data Set, and creating, loading and saving Data Sets.

For creating, initializing, loading and saving Data Sets, LEADTOOLS provides the following functions:

LDicomDS::LDicomDS

LDicomDS::InitDS

LDicomDS::LoadDS

LDicomDS::LoadDSMemory

LDicomDS::SaveDS

For maneuvering through the Data Set use the following functions:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

LEADTOOLS provides several functions for searching the Data Set. To
 find specific modules, use LDicomDS::FindModule
 and LDicomDS::FindIndexModule.
 You can find specific Data Elements using LDicomDS::FindFirstElement,
 LDicomDS::FindLastElement,
 LDicomDS::FindPrevElement,
 and LDicomDS::FindNextElement.

To insert new items in the Data Set, call LDicomDS::InsertElement or LDicomDS::InsertModule. To insert one or more images in a Data Element of type TAG_PIXEL_DATA, use LDicomDS::InsertImage or LDicomDS::InsertImageList.

You can delete individual items from the Data Set using LDicomDS::DeleteElement. You can delete entire modules from the Data Set, using LDicomDS::DeleteModule. To delete all items in the Data Set, call LDicomDS::ResetDS. To delete one or more images in a Data Element of type TAG_PIXEL_DATA, use LDicomDS::DeleteImage.

To retrieve values stored in the Value Field of the Data Element LEADTOOLS provides the following:

LDicomDS::FreeValue

LDicomDS::GetAgeValue

LDicomDS::GetBinaryValue

LDicomDS::GetCharValue

LDicomDS::GetCountValue

LDicomDS::GetDateTimeValue

LDicomDS::GetDateValue

LDicomDS::GetDoubleValue

LDicomDS::GetFloatValue

LDicomDS::GetImage

LDicomDS::GetImageList

LDicomDS::GetLongValue

LDicomDS::GetShortValue

LDicomDS::GetStringValue

LDicomDS::GetTimeValue

To set values stored in the Value Field of the Data Element use the following:

LDicomDS::SetAgeValue

LDicomDS::SetBinaryValue

LDicomDS::SetCharValue

LDicomDS::SetDateTimeValue

LDicomDS::SetDateValue

LDicomDS::SetDoubleValue

LDicomDS::SetFloatValue

LDicomDS::SetImage

LDicomDS::SetImageList

LDicomDS::SetLongValue

LDicomDS::SetShortValue

LDicomDS::SetStringValue

LDicomDS::SetTimeValue

To convert a value to or from a string, use LDicomDS::GetConvertValue or LDicomDS::SetConvertValue.

To determine whether you have a valid pointer to a data element, call LDicomDS::ExistsElement.

When a function that gets a bitmap from a data set is called, such as LDicomDS::GetImage or LDicomDS::GetImageList, LEADTOOLS, by default will pre-process the data in the bitmap handle for optimum display and image processing. To change this behavior, call the LDicomDS::SetKeepPixelDataIntactFlag function with bSet set to TRUE. This will keep LEADTOOLS from pre-processing the image data. To determine whether pre-processing is currently enabled or disabled, call LDicomDS::GetKeepPixelDataIntactFlag.

LEADTOOLS provides several functions for retrieving information about the Data Set or the DICOM file. LDicomDS::ConformanceDS determines whether the Data Set conforms to the standard. To determine the number of images in a specified Data Element or in the entire Data Set use LDicomDS::GetCountImage. To determine the number of modules present in the entire Data Set use LDicomDS::GetCountModule. You can determine which level a specific element is on by calling LDicomDS::GetLevelElement.

Transferring data between a server and a client requires that both entities use the same transfer syntax. The transfer syntax for a data set can be changed using the LDicomDS::ChangeTransferSyntax function.

To determine whether an element is volatile, call LDicomDS::IsVolatileElement.

The DICOM toolkit offers extensive debugging and status information by optionally notifying the user of each internal error that occurs. To enable this feature call the function LDicomDS::SetDebugDS to specify the callback function which will be called each time the user needs to be notified. This feature is disabled by default.

To retrieve information about the specified image, call the LDicomDS::GetInfoImage function.

To retrieve information about the file, call the LDicomDS::GetInfoDS function.

Finally, for getting and setting the contents of the Preamble, LEADTOOLS provides LDicomDS::GetPreamble and LDicomDS::SetPreamble.

For a list of macros available for use, refer to DICOM Macros.

For more information on the DICOM File Fomat, refer to An Overview of the DICOM File Format and the DICOM Standard.


Working with Information Object Definitions

An Information Object Definition (IOD) is an abstract data model that specifies information about Real-World objects. It provides a means of standardizing information exchanged between applications. There are a tremendous number of IODs that are standard for the DICOM file format. In addition to the standard IODs, user-defined IODs may also be added.

LEADTOOLS maintains a tree internally of all available Information Object Definitions (IODs), standard and user defined. In this documentation the tree of available IODs will be referred to as the IOD Structure, since some functions allow you to evaluate the internal IOD Structure as a tree or as a list. Unfortunately, the collection of default IODs is too large to include a table of default values in this documentation. For more information on IOD defaults, refer to the DICOM Standard.

LEADTOOLS provides a number of functions for maneuvering through and modifying the IOD Structure. All functions pertaining to the IOD Structure are in the class LDicomIOD.

For maneuvering through the IOD Structure, LEADTOOLS provides the following functions:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetPrev

LDicomIOD::GetNext

LDicomIOD::GetCountModule

LEADTOOLS provides several functions for searching the IOD Structure. To find the IOD for a specific class or module, use LDicomIOD::FindClass and LDicomIOD::FindModule. You can find the IOD for elements, modules or classes using LDicomIOD::Find. If you want to find the IOD for the module at a specific position in a specific class, use LDicomIOD::FindIndexModule.

To insert new items in the IOD Structure, call LDicomIOD::Insert.

You can delete individual items from the IOD Structure using LDicomIOD::Delete, or you can delete all items from the IOD Structure, using LDicomIOD::Reset.

To change the name or the description of an IOD already in the IOD Structure, call LDicomIOD::SetName and LDicomIOD::SetDescription.

To determine whether you have a valid pointer to an IOD item, call LDicomIOD::Exists.

Finally, to reset the IOD Structure to the default values, use LDicomIOD::Default.

For more information on IODs, refer to An Overview of the DICOM File Format or the DICOM Standard.


Working with Tags

The tag of a data element consists of an ordered pair of 16-bit values that represent a Group number and an Element number. The tag indicates the type of information stored in the value field of the data element. There are a number of tags that are standard for the DICOM file format. In addition to the standard tags, user-defined tags may also be added.

LEADTOOLS maintains a table (or list) internally of all available tags, standard and user defined. In this documentation the table of available value representations will be referred to as the Data Element Tag Table. Also provided in this documentation is a table of the default values for the standard tags. To see these default values, refer to the Default Data Element Tag Table.

LEADTOOLS provides a number of functions for maneuvering through and modifying the Data Element Tag Table. All functions pertaining to the Data Element Tag Table are in the class LDicomTag.

For maneuvering through the Data Element Tag Table, LEADTOOLS provides the following functions:

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetPrev

LDicomTag::GetNext

LDicomTag::GetCount

To find specific items, based on either the tag or an index into the table, use LDicomTag::Find and LDicomTag::FindIndex.

To insert new items in the Data Element Tag Table, call LDicomTag::Insert.

You can delete individual items from the table using LDicomTag::Delete, or you can delete all items from the table, using LDicomTag::Reset.

To change the name of an item already in the table, call LDicomTag::SetName.

To determine whether you have a valid pointer to an Data Element Tag item, call LDicomTag::Exists.

Finally, to reset the Data Element Tag Table to the default values, use LDicomTag::Default.

For a list of macros available for use, refer to DICOM Macros.

For more information on tags, refer to An Overview of the DICOM File Format or the DICOM Standard.


Working with Unique Identifiers (UIDs)

A unique identifier identifies items such as Service-Object Pair Classes and images. There are a number of unique identifiers that are standard for the DICOM file format. In addition to the standard unique identifiers, user-defined unique identifiers may also be added. Please note that while user-defined unique identifiers will work within LEADTOOLS, in order for new unique identifiers to work across countries, sites, equipment, etc., you must contact the National Electrical Manufacturers Association.

LEADTOOLS maintains a table (or list) internally of all available unique identifiers, standard and user defined. In this documentation the table of available unique identifiers will be referred to as the UID Table. Also provided in this documentation is a table of the default values for the standard UIDs. To see these default values, refer to the Default UID Table.

LEADTOOLS provides a number of functions for maneuvering through and modifying the UID Table. All functions pertaining to the UID Table are in the class LDicomUID.

For maneuvering through the UID Table, LEADTOOLS provides the following functions:

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetPrev

LDicomUID::GetNext

LDicomUID::GetCount

To find specific items, based on either the unique identifier or an index into the table, use LDicomUID::Find and LDicomUID::FindIndex.

To insert new items in the UID Table, call LDicomUID::Insert.

You can delete individual items from the table using LDicomUID::Delete, or you can delete all items from the table, using LDicomUID::Reset.

To change the name of an item already in the table, call LDicomUID::SetName.

To determine whether you have a valid pointer to a UID item, call LDicomUID::Exists.

Finally, to reset the UID Table to the default values, use LDicomUID::Default.

For more information on UIDs, refer to An Overview of the DICOM File Format or the DICOM Standard.


Working with Value Representations

The value representation of a data element indicates the type of data that can be stored in the value field of the data element. There are a number of value representations that are standard for the DICOM file format. In addition to the standard value representations, user-defined value representations may also be added.

LEADTOOLS maintains a table (or list) internally of all available value representations, standard and user defined. In this documentation the table of available value representations will be referred to as the Value Representation Table. Also provided in this documentation is a table of the default values for the standard value representations. To see these default values, refer to the Default Value Representation Table.

LEADTOOLS provides a number of functions for maneuvering through and modifying the Value Representation Table. All functions pertaining to the Value Representation Table are in the class LDicomVR.

For maneuvering through the Value Representation Table, LEADTOOLS provides the following functions:

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetPrev

LDicomVR::GetNext

LDicomVR::GetCount

To find specific items, based on either the value representation or an index into the table, use LDicomVR::Find and LDicomVR::FindIndex.

To insert new items in the Value Representation Table, call LDicomVR::Insert.

You can delete individual items from the table using LDicomVR::Delete, or you can delete all items from the table, using LDicomVR::Reset.

To change the name of an item already in the table, call LDicomVR::SetName.

To determine whether you have a valid pointer to a Value Representation item, call LDicomVR::Exists.

Finally, to reset the Value Representation Table to the default values, use LDicomVR::Default.

For more information on value representations, refer to An Overview of the DICOM File Format or the DICOM Standard.


Working with Basic Directory Key Elements

DICOM Dir data sets may contain special data element called key elements. A Key element is a data element that also contains special information about other key elements in the data set and their relative location within the data set.

Key elements all have the TAG_ITEM tag and they must be one of the following types:

"PATIENT" | Patient key element
"STUDY" | Study key element
"SERIES" | Series key element
"IMAGE" | Image key element
"OVERLAY" | Overlay key element
"MODALITY LUT" | Modality-LUT key element
"VOI LUT" | VOI-LUT key element
"CURVE" | Curve key element
"TOPIC" | Topic key element
"VISIT" | Visit key element
"RESULTS" | Results key element
"INTERPRETATION" | Interpretation key element
"STUDY COMPONENT" | Study Component key element
"PRINT QUEUE" | Print Queue key element
"FILM SESSION" | Film session key element
"FILM BOX" | Film box key element
"IMAGE BOX" | Image box key element
"PRIVATE" | Private key element

LEADTOOLS maintains the DICOM Dir data set as a tree, however, all key elements are stored at the same level of the tree. The specialized information included in a key element maintains information on key element children, non-key element children, parent key elements, and the logical relationships between the elements.

LEADTOOLS provides special functions for searching the DICOM Dir data set, maneuvering through the data set, inserting and deleting key elements, and manipulating key elements. To work with key elements, you should create a Data Set as type CLASS_BASIC_DIRECTORY.

For maneuvering through the DICOM Dir data set, use the following:

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetPrevKey

LDicomDS::GetNextKey

LEADTOOLS provides the following functions for searching the Data Set.

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindPrevKey

LDicomDS::FindNextKey

To insert new key elements, use:

LDicomDS::InsertKey

To delete key elements, use:

LDicomDS::DeleteKey

To determine the type of a specific key element, use

LDicomDS::GetValueKey

These functions work the same way as the corresponding LDicomDS::XXXElement functions. Please note however, that it is most important that you use LDicomDS::DeleteKey when deleting a key element. Trying to delete a key element using LDicomDS::DeleteElement will remove the specified key element and any information about any related key elements, but it will not remove the child key elements.


Creating and Loading a Data Set

To create and load a Data Set from an existing DICOM file, you must begin by allocating the memory required for the Data Set. This is accomplished by calling LDicomDS::LDicomDS. This function returns a DICOM handle to the Data Set, which is required for most of the functions included in this toolkit.

With the memory allocated, you can now load a Data Set of a DICOM file by calling LDicomDS::LoadDS. For example code showing these first two calls, refer to the example under LDicomDS::LoadDS.

At this point, you are ready to get information about the Data Set, traverse the Data Set, search for specific modules or elements, get/set data values, add modules or elements or delete modules or elements.

Once you have finished with the Data Set, you must free the memory that was allocated for the Data Set. This can be done by calling the delete function.

As a short example, the code shown below does the following:

1. Creates a Data Set.

2. Loads a Data Set from a DICOM file.

3. Finds the first module on Level 0 of the Data Set tree structure.

4. Finds the first element of the module.

5. Prints information about the number of modules present, the number of the first module, and information about the first element in the module.

6.Frees the memory.

By comparing the printed values for the module number, data element tag, and value representation to their respective default tables, you can determine which module, element and value representation are present.

LDicomDS *pDS;
L_UINT32 nCount;
pDICOMMODULE pModule;
pDICOMELEMENT pElement;
L_CHAR cs[256];

/* Create the data set */
pDS = new LDicomDS(NULL);

/* Load the data set from a DICOM file */
pDS->LoadDS("D:\\LTWIN13x\\images\\test2.dic", 0);
/* determine the number of modules in the data set. */
nCount = pDS->GetCountModule();

/* Find the first module on Level 0 of the Data Set tree. */
pModule = pDS->FindIndexModule(0);
if (pModule != NULL)
{
pElement = pModule->pElement[0];

// print the information
wsprintf(cs, "This data set has %d modules.\nThe first module has number %Xh.\n"
"The first module has %d elements.\nThe first element of the first module has:\n"
"Tag number: %Xh\nVR: %Xh\nLength: %d\n", nCount, pModule->nModule,
pModule->nCount, pElement->nTag, pElement->nVR, pElement->nLength);
MessageBox(NULL, cs, "Notice", MB_OK);
}
else
MessageBox(NULL, "pModule is NULL", "Notice", MB_OK);
/* Free the memory. */
delete pDS;


Creating DICOM Directories

In order to identify a DICOM file-set, and to facilitate accessing the information stored in the DICOM files of the file-set, the DICOM standard has defined the Basic Directory IOD. A DICOM file-set contains one or more DICOM files. One of the files contained in the file-set is the DICOMDIR file. The DICOMDIR file contains Dicom Directory information, which makes it easier to access the information contained in the other DICOM files in the file set. The DICOM files in the file-set are assigned File IDs, so that they can be referenced by the DICOMDIR File, which itself, is identified by a File ID of DICOMDIR.

LEADTOOLS provides the LDicomDir class, which is derived from LDicomDS, to simplify the process of creating DICOM Directories for file-sets.

As a demonstration of a typical usage of the LDicomDir class, let’s suppose that we need to build the DICOM Directory of the file-set defined by the files contained in the folder "C:\DICOM Images\" and in any subfolders. This folder is then the destination folder of the DICOMDIR File.

At the beginning of the application, the destination folder should be specified. This can be done either at construction time or later by using the function LDicomDir::ResetDicomDir.

Only the DICOM files within the destination folder (e.g., "C:\DICOM Images\Brain") or in a subfolder of this folder (e.g., "C:\DICOM Images\Patient1\Series1\Knee") can be added to the Dicom Directory. The File ID, which is used by the Dicom Directory to reference an added file, will be the relative path of the file. For instance, the File IDs of the two previous files would be "Brain" and "Patient1\Series1\Knee", respectively.

A DICOM file can be added to the Dicom Directory in one of two ways:

Directly, using the function LDicomDir::InsertDicomFile. The DICOM files contained in the destination folder can also be added individually or all at once using this function. Adding the files individually requires multiple calls to the LDicomDir::InsertDicomFile function, with the name of the file to add passed in the pszFileName parameter. All files in the destination folder can be added at once by calling the LDicomDir::InsertDicomFile function with the pszFileName parameter set to NULL. In this case, the LDicomDir::OnInsertDicomFile callback function is called for each file that is added so that the progress of adding the files can be monitored. The DICOM files in the subfolders of the destination folder can also be added by setting the bIncludeSubfolders member of a DICOMDIROPTIONS structure to TRUE, setting the new option using the LDicomDir::SetOptions function and then calling this function with pszFileName set to NULL.

Indirectly, using the function LDicomDir::InsertDicomDS. In this way, the Data Set contained by the DICOM file to be added is first loaded using the function LDicomDS::LoadDS. The data set is then added by calling LDicomDir::InsertDicomDS.

The function LDicomDir::SetFileSetID can be used to identify the file-set by providing a simple humanly readable identifier. Also, the function LDicomDir::SetDescriptorFile can be used to specify a descriptor file (a "readme" file) for the file-set.

The functions LDicomDir::SetOptions and LDicomDir::GetOptions let you get or set certain options that affect the behavior of the other functions of the class.

Once the DICOM Directory is ready, the function LDicomDir::SaveDicomDir can be called to create the DICOMDIR File and store the directory information. The DICOMDIR File is named "DICOMDIR" and is saved in the destination folder ("C:\DICOM Images\DICOMDIR").

The function LDicomDir::LoadDS, which overrides the function LDicomDS::LoadDS, can be used to load the Dicom Directory Data Set stored in an existing DICOMDIR file. The loaded Dicom Directory can then be manipulated using the various functions. For instance, additional DICOM files can be added to the Dicom Directory.

The sample below demonstrates how easy it is to create a DICOMDIR file using the LEADTOOLS LDicomDir class. This example shows how to create a DICOM Directory for all the files in the folder "C:\Medical".

LDicomDir DicomDir("C:\\Medical");

// Add all the DICOM files to the Directory
DicomDir.InsertDicomFile(NULL);

// Save the DICOMDIR File
DicomDir.SaveDicomDir();

This topic provides information about high-level "Basic Directory" support. For information on low-level Basic Directory Key Element support, refer to Working with Basic Directory Key Elements.


Implementing JPEG 2000 Plug in Features

JPEG 2000 is a wavelet-based compression stored in a hierarchical format, which contains several stored resolutions of the image in the same bit-stream without duplication. For that reason, a JPEG 2000 compressed image can then be sent to a device in the resolution that best fits, without additional storage overhead.

The LEADTOOLS JPEG 2000 Plug in provides support for encoding and decoding a JPEG 2000 bit-stream. The JPEG 2000 compression provides greater flexibility and better image quality, especially at higher compression ratios, than standard JPEG. The greater flexibility includes the ability to control:

whether or not to transform RGB images to YUV prior to compression

the type of quantization to use when determining the quantization step size

the amount of compression

the size and location of tiles

the number of resolution levels in the bit-stream

the progression order

the code block height and width

whether to use markers to help detect corruption during transmission

etc.

LEADTOOLS provides a FILEJ2KOPTIONS structure for controlling the JPEG 2000 features listed above. To determine the current settings for the JPEG 2000 features, use the LDicomDS::GetJ2KOptions function. To change the JPEG 2000 features, use the LDicomDS::SetJ2KOptions function.

To get the default settings for the JPEG2000 features, use the LDicomDS::GetDefaultJ2KOptions function.

This support is available only in the LEADTOOLS JPEG 2000 Plug in, and must be unlocked. For more information on unlocking this support, refer to JPEG 2000 Plug In Support Instructions.


Overlays Overview

An "Overlay Plane" describes graphics or bit-mapped text that is associated with an image or has its own existence within a series. It may also describe a ROI in an Image.

Each "Overlay Plane" is one bit deep (1BPP). Sixteen separate planes may be associated with an image or exist as "Standalone Overlays" in a series.

Overlay pixel data is stored either in "Overlay Data" (60xx, 3000) or embedded in the "Image Pixel Data" (7FE0, 0010).

LEADTOOLS offers a number of functions to manipulate overlays in DICOM datasets.

LDicomDS::GetOverlayCount can be used to find the number of overlays in the DICOM dataset. Call LDicomDS::GetOverlayAttributes to retrieve the attributes of an overlay and LDicomDS::GetOverlayBitmap to retrieve the "Overlay Data" (60xx,3000) for a single-frame overlay or LDicomDS::GetOverlayBitmapList for a multi-frame one. LDicomDS::GetOverlayActivationLayer lets you get the activation layer for the overlay.

LEADTOOLS also allows you to insert a new or update an existing overlay. Call LDicomDS::SetOverlayAttributes to set the attributes of a certain overlay and then call

LDicomDS::SetOverlayBitmap or LDicomDS::SetOverlayBitmapList to set its data.

To delete all the elements related to an overlay call LDicomDS::DeleteOverlay.


LUT Encoding Overview

Modality LUT

A "Modality LUT " allows the transformation of manufacturer-dependent pixel values into manufacturer-independent pixel values (e.g. Hounsfield units for CT images). The "Modality LUT" may be contained within an image, a presentation state (that references an image), or as a "Standalone Modality LUT"(that references an image). The "Rescale Slope" (0028,1053) and "Rescale Intercept" (0028,1052) elements are used to describe the transformation when it is linear, while the "Modality LUT Sequence" (0028,3000) element is used to describe non-linear transformations. In both cases it is implied that the transformation can only occur for grayscale data, that is, images with "Photometric Interpretation" values of "MONOCHROME1" or "MONOCHROME2".

LEADTOOLS offers a number of functions to manipulate the "Modality LUT". LDicomDS::GetModalityLUTAttributes and LDicomDS::SetModalityLUT can be used to retrieve and update the values of the elements that describe a "Modality LUT" respectively. The data type DICOMMLUTATTRIBS describes all the attributes related to a "Modality LUT ". If the transformation defined by the LUT is linear then the "bIsRescaleSlopeIntercept" member of the structure will be set and "fRescaleIntercept" and "fRescaleSlope" will hold the values for "Rescale Intercept" (0028,1052) and "Rescale Slope" (0028,1053) respectively. The "bIsModalityLUTSequence" member will be set if the transformation is non-linear and "LUTDescriptor" will hold the values of the "LUT Descriptor" (0028,3002). To get the "LUT Data" (0028,3006) under the "Modality LUT Sequence" (0028,3000) use LDicomDS::GetModalityLUTData.To remove the "Modality LUT " from a DICOM dataset call LDicomDS::DeleteModalityLUT.

VOI LUT

A "VOI LUT" allows the transformation of the modality pixel values into pixel values that are meaningful for print or display. This transformation is applied after any "Modality LUT". The "VOI LUT" may be contained within an image, or a presentation state (that references an image), or as a "Standalone VOI LUT" (that references an image). "Window Center" (0028,1050) and "Window Width" (0028,1051) are used to describe the transformation when it’s linear, while the "VOI LUT Sequence" (0028,3010) is used to describe non-linear transformations. In both cases it is implied that the transformation can only occur for grayscale data (images with "Photometric Interpretation" values of "MONOCHROME1" and "MONOCHROME2"). If multiple values are present for the "Window Center" and "Window Width", both attributes shall have the same number of values and shall be considered as pairs. Multiple values indicate that multiple alternative views may be presented. If multiple items are present in VOI LUT Sequence (0028,3010), only one may be applied to the image for display. Multiple items indicate that multiple alternative views may be presented.

LEADTOOLS offers a number of functions to manipulate the "VOI LUT ". The LDicomDS::GetWindowCount function can be used to retrieve the number of values under the "Window Center" and "Window Width" elements , while LDicomDS::GetVOILUTCount can be used to retrieve the number of items under the "VOI LUT" sequence (0028,3010).Use LDicomDS::GetWindow and LDicomDS::SetWindow to retrieve and update the attributes that describe "Window Center" and "Window Width". If you want to delete all the elements related to a linear "VOI LUT" call LDicomDS::DeleteWindow.

If the "VOI LUT" is non-linear, you can call LDicomDS::GetVOILUT to get the format of the "LUT Data" under the "VOI LUT Sequence" and call LDicomDS::GetVOILUTData to get the table data("LUT Data") itself. To set the "LUT Data" use LDicomDS::SetVOILUT which will set both the format of the data and the data itself. If you want to delete all the elements related to a non-linear "VOI LUT" call LDicomDS::DeleteVOILUT.

Palette Color Table

A "Palette Color Lookup Table" is used inside 8 and 16 bit color images where the pixel value is used as an index into each of the Red, Blue, and Green Palette

Color Lookup Tables (0028,1101-1103&1201-1203). The DICOM standard defines two types of tables: "Contiguous Palette Color Tables" where the data for each table is represented by a single contiguous stream and "Segmented Palette Color Tables" where the data is stored in each table as a series of segments. Both types are supported by LEADTOOLS.

LEADTOOLS offers a number of functions to manipulate a "Palette Color Table". You can call LDicomDS::GetPaletteColorLUTAttributes to retrieve the attributes that describe a "Palette Color Lookup Table" and LDicomDS::SetPaletteColorLUTAttributes to set them. LDicomDS::GetPaletteColorLUTData can be used to get the table entries under "Red"," Green" or "Blue" "Palette Color Lookup Table Data", while LDicomDS::SetPaletteColorLUTData can be used to set them.

To remove the "Palette Color Lookup" tables from a DICOM dataset call

LDicomDS::DeletePaletteColorLUT.


Working with DICOM Waveforms

The DICOM standard supports waveform storage and communication: this includes hemodynamic curve data, cardiac electrophysiology, electrocardiography (ECG) and audio signals (WAV files). A waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. The waveform samples can be 8 or 16 bit, with data representation as signed , unsigned , mu-law or A-law. DICOM also supports waveform annotations, which are typically generated as part of the data acquisition process, such as waveform maxima and minima, or the labeling of particular stimuli.

LEADTOOLS waveform support is comprehensive and handles the various features supported by the standard. The LDicomWaveformGroup class encapsulates the attributes of a multiplex group (the building block for waveforms in DICOM), while the LDicomWaveformChannel class provides functions to create and manipulate waveform channels. On the dataset level, the toolkit provides four simple, yet powerful functions for using waveforms:

The LDicomDS::AddWaveformGroup function, which you use to create a new waveform group.

The LDicomDS::DeleteWaveformGroup, which you use to delete an existing waveform group.

The LDicomDS::GetWaveformGroupCount, which you use to get the number of waveform groups.

The LDicomDS::GetWaveformGroup function, which you use to extract a waveform group from a dataset

The LDicomWaveformGroup Class

The functionality offered by the LDicomWaveformGroup class can be divided into three main categories:

Channel Manipulation

Audio Support

Management of Waveform Group Attributes

More information is provided in the following sections.

Channel Manipulation

At the heart of any waveform support is the creation and management of channels. To create a new channel, use the LDicomWaveformGroup::AddChannel function. To get an existing one use the LDicomWaveformGroup::GetChannel function. The following functions can also be used to manage channels:

LDicomWaveformGroup::DeleteChannel

LDicomWaveformGroup::GetNumberOfChannels

LDicomWaveformGroup::GetNumberOfSamplesPerChannel

LDicomWaveformGroup::SetNumberOfSamplesPerChannel

Audio Support

LEADTOOLS waveform support includes support for audio data. To load a wave file into a waveform group, use the LDicomWaveformGroup::LoadAudio function. This function is very useful when creating DICOM objects of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1), which is typically used for report dictation.

To create a wave file from the channels in a waveform group, use the LDicomWaveformGroup::SaveAudio function. This function is very useful when extracting audio (wave) data from a DICOM object of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1)

Management of Waveform Group Attributes

LEADTOOLS waveform support includes comprehensive support for the management of the attributes of a waveform group.

In DICOM it is mandatory to specify the waveform's originality (that is, whether the waveform data is original (source) data, or derived data), as well as its sampling frequency. Consequently it is important to call LDicomWaveformGroup::SetWaveformOriginality and LDicomWaveformGroup::SetSamplingFrequency and set these values in order to create a proper waveform group.

If the acquisition equipment adds padding values, DICOM makes it mandatory to set the LDicomWaveformGroup::SetWaveformPaddingValue value. For more information, refer to the "Waveform Padding Value" (5400,100A) element in the DICOM standard.

The following functions are other functions that can be used to set and get the different attributes of a waveform group:

LDicomWaveformGroup::GetMultiplexGroupLabel

LDicomWaveformGroup::GetMultiplexGroupTimeOffset

LDicomWaveformGroup::GetSampleInterpretation

LDicomWaveformGroup::GetSamplingFrequency

LDicomWaveformGroup::GetTriggerSamplePosition

LDicomWaveformGroup::GetTriggerTimeOffset

LDicomWaveformGroup::GetWaveformOriginality

LDicomWaveformGroup::GetWaveformPaddingValue

LDicomWaveformGroup::SetMultiplexGroupLabel

LDicomWaveformGroup::SetMultiplexGroupTimeOffset

LDicomWaveformGroup::SetSampleInterpretation

LDicomWaveformGroup::SetTriggerSamplePosition

LDicomWaveformGroup::SetTriggerTimeOffset

LDicomWaveformGroup::SetWaveformOriginality

LDicomWaveformGroup::SetWaveformPaddingValue

The LDicomWaveformChannel Class

The LDicomWaveformChannel class provides functionality that can be divided into the following five categories:

1. | Setting/Getting Channel Samples
2. | Setting/Getting Channel Source
3. | Setting/Getting Channel Sensitivity
4. | Adding/Managing Waveform Annotations
5. | Setting/Getting Other WaveformChannel Attributes

More information is provided in the following sections.

Setting/Getting Channel Samples

Before setting channel data be sure to call the LDicomWaveformGroup::SetSampleInterpretation function to set the sample interpretation. To set the data for an 8-bit channel use the LDicomWaveformChannel::SetChannelSamples8 function. Use the LDicomWaveformChannel::SetChannelSamples16 function to set the data for a 16-bit one. Data representation for 8-bit channels can be signed, unsigned, mu-law or A-law, while the data representation for 16-bit channels can be signed or unsigned. To get the data for a channel call the LDicomWaveformChannel::GetChannelSamples function.

Setting/Getting Channel Source

In DICOM, it is mandatory to specify the source for a channel. For this reason it is important to call the LDicomWaveformChannel::SetChannelSource function to create a proper waveform channel. If you want to get a channel source, call the LDicomWaveformChannel::GetChannelSource function.

Setting/Getting Channel Sensitivity

In DICOM, it is mandatory to specify the channel sensitivity if the channel samples represent defined (not arbitrary) units. Since this is almost always the case, it is important to call LDicomWaveformChannel::SetChannelSensitivity to create a proper waveform channel. The members of the pChannelSensitivityUnits structure can be managed using the functions offered by the LDicomContextGroup class. For more information about this class and the use of Coded Concepts in DICOM, please refer to Working with Context Groups.

To get the channel sensitivity call the LDicomWaveformChannel::GetChannelSensitivity function.

Adding/Managing Waveform Annotations

To get the number of annotations call the LDicomWaveformChannel::GetAnnotationCount function. To create a new annotation, call the LDicomWaveformChannel::AddAnnotation function, while you call the LDicomWaveformChannel::GetAnnotation function to get an existing one. To delete an annotation call LDicomWaveformChannel::DeleteAnnotation.

Setting/Getting Other Waveform Channel Attributes

The following functions are other functions that can be used to set and get the different attributes of a waveform channel:

LDicomWaveformChannel::GetChannelLabel

LDicomWaveformChannel::GetChannelMaximumValue

LDicomWaveformChannel::GetChannelMinimumValue

LDicomWaveformChannel::GetChannelOffset

LDicomWaveformChannel::GetChannelSampleSkew

LDicomWaveformChannel::GetChannelStatus

LDicomWaveformChannel::GetChannelTimeSkew

LDicomWaveformChannel::GetFilterHighFrequency

LDicomWaveformChannel::GetFilterLowFrequency

LDicomWaveformChannel::GetIndex

LDicomWaveformChannel::GetNotchFilterBandwidth

LDicomWaveformChannel::GetNotchFilterFrequency

LDicomWaveformChannel::GetWaveformChannelNumber

LDicomWaveformChannel::GetWaveformGroup

LDicomWaveformChannel::SetChannelLabel

LDicomWaveformChannel::SetChannelMaximumValue

LDicomWaveformChannel::SetChannelMinimumValue

LDicomWaveformChannel::SetChannelOffset

LDicomWaveformChannel::SetChannelSampleSkew

LDicomWaveformChannel::SetChannelStatus

LDicomWaveformChannel::SetChannelTimeSkew

LDicomWaveformChannel::SetFilterHighFrequency

LDicomWaveformChannel::SetFilterLowFrequency

LDicomWaveformChannel::SetNotchFilterBandwidth

LDicomWaveformChannel::SetNotchFilterFrequency

LDicomWaveformChannel::SetWaveformChannelNumber


Working with Context Groups

The use of Coded Concepts in DICOM facilitates unambiguous communication of concepts or terms. The Coded Concepts are incorporated in IODs using the Code Sequence Attributes as described in PS 3.3 of the DICOM Standard.

A set of related Coded Concepts forms a Context Group. PS 3.16 of the DICOM Standard specifies the DICOM Content Mapping Resource (DCMR), which defines specific Context Groups. These Context Groups are maintained by LEADTOOLS in an internal table. We will refer to this table as the Context Group Table. For a list of the Context Identifiers (CIDs) of these Context Groups, along with their names, refer to Context Identifier Values.

LEADTOOLS provides a number of functions for working with the Context Group Table. The LDicomContextGroup class offered these functions.

Initially, the Context Group Table is empty. Two ways are provided to add Context Groups to the table:

By loading them from the internal table into the Context Group Table. This can be done using the LDicomContextGroup::Load function.

By inserting Context Groups directly to the Context Group Table using the LDicomContextGroup::Insert function.

You can use the following functions to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

You can also use the LDicomContextGroup::GetCount and LDicomContextGroup::FindIndex functions to enumerate the Context Groups in the Context Group Table.

Use the LDicomContextGroup::Find function to search the Context Group Table for the Context Group with a particular Context ID.

Use the LDicomContextGroup::Delete function to remove individual Context Groups from the Context Group Table, and the LDicomContextGroup::Reset function to remove all the Context Groups at once.

You can use the following functions to investigate the Coded Concepts of a Context Group:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

LDicomContextGroup::GetContextGroup

Use the LDicomContextGroup::FindCodedConcept function to search a Context Group in the Context Group Table for the Coded Concept with specific Coding Scheme Designator and Code Value.

After a Context Group has been added to the Context Group Table, you can modify the Code Meanings of its Coded Concepts, add new Coded Concepts to the Context Group, and delete existing Coded Concepts from the Context Group by using the following functions:

LDicomContextGroup::SetCodeMeaning

LDicomContextGroup::InsertCodedConcept

LDicomContextGroup::DeleteCodedConcept

If a Context Group in the Context Group Table has a corresponding Context Group in the internal table maintained by LEADTOOLS, you can use the LDicomContextGroup::Default function to discard any changes made to the Context Group in the Context Group Table.

Use the LDicomContextGroup::Exists or LDicomContextGroup::ExistsCodedConcept functions to determine whether a pointer to a Context Group structure or a Coded Concept structure is valid, respectively.


Working with DICOM Network Connections

The DICOM Communication Protocol outlines the requirements for transferring DICOM data and messages across an associated network connection. For more information about the DICOM Communication Protocol, refer to LEADTOOLS DICOM Network Communication Support for Message Exchange, or the DICOM Standard.

In order to transfer DICOM data and messages from one Application Entity (AE) to another, a network connection must be established. Once this connection has been established, the connection must be associated (also referred to as establishing an Associate connection). When the Associate connection has been established, then DICOM data and messages can be transferred between AEs.

AEs can have the role of Service Class Provider (SCP), Service Class User (SCU), or both. An SCU makes requests for data or services, and may also receive data. An SCP listens for incoming connection requests from SCUs. Once these connections are established (and an associate connection created), the SCP processes requests and provides data or services requested by SCUs.

In this documentation the basic network connection will be referred to as a DICOM Network connection or a DICOM Network. Information concerning a DICOM Network connection will be maintained in and accessed through a DICOM Network object.

When creating either an SCU or an SCP application, a DICOM Network connection (a DICOM network object) must be created. In addition, for every connection request accepted by an SCP, the SCP must create a DICOM Network object in which to maintain information about that specific SCU-SCP connection.

LEADTOOLS provides a number of functions for creating and initializing a DICOM Network and for transferring DICOM data and messages.

For creating a DICOM Network connection, use the following functions:

LDicomNet::LDicomNet

LDicomNet::StartUp

LDicomNet::Initialize

LDicomNet::Connect

LDicomNet::Listen

LDicomNet::Accept

LDicomNet::OnAccept

LDicomNet::OnConnect

When a DICOM Network connection is no longer needed, it should be closed. The following functions may be used in closing the DICOM Network connection:

LDicomNet::~LDicomNet

LDicomNet::ShutDown

LDicomNet::Close

LDicomNet::OnClose

LEADTOOLS provides functions for sending DICOM messages. These include both low-level and high-level functions. The message sending functions can be divided into two groups.

For sending DICOM Connection messages, including messages used in establishing a DICOM Associate connection, use the following:

LDicomNet::SendAssociateRequest

LDicomNet::SendAssociateAccept

LDicomNet::SendAssociateReject

LDicomNet::SendData

LDicomNet::SendReleaseRequest

LDicomNet::SendReleaseResponse

LDicomNet::SendAbort

LDicomNet::OnReceiveAssociateRequest

LDicomNet::OnReceiveAssociateAccept

LDicomNet::OnReceiveAssociateReject

LDicomNet::OnReceiveReleaseRequest

LDicomNet::OnReceiveReleaseResponse

LDicomNet::OnReceiveAbort

LDicomNet::OnSend

For sending data messages, LEADTOOLS provides the following functions:

LDicomNet::SendCStoreRequest

LDicomNet::SendCStoreResponse

LDicomNet::SendCFindRequest

LDicomNet::SendCFindResponse

LDicomNet::SendCGetRequest

LDicomNet::SendCGetResponse

LDicomNet::SendCMoveRequest

LDicomNet::SendCMoveResponse

LDicomNet::SendCCancelRequest

LDicomNet::SendCEchoRequest

LDicomNet::SendCEchoResponse

LDicomNet::SendNReportRequest

LDicomNet::SendNReportResponse

LDicomNet::SendNGetRequest

LDicomNet::SendNGetResponse

LDicomNet::SendNSetRequest

LDicomNet::SendNSetResponse

LDicomNet::SendNActionRequest

LDicomNet::SendNActionResponse

LDicomNet::SendNCreateRequest

LDicomNet::SendNCreateResponse

LDicomNet::SendNDeleteRequest

LDicomNet::SendNDeleteResponse

LDicomNet::OnReceiveCStoreRequest

LDicomNet::OnReceiveCStoreResponse

LDicomNet::OnReceiveCFindRequest

LDicomNet::OnReceiveCFindResponse

LDicomNet::OnReceiveCGetRequest

LDicomNet::OnReceiveCGetResponse

LDicomNet::OnReceiveCMoveRequest

LDicomNet::OnReceiveCMoveResponse

LDicomNet::OnReceiveCCancelRequest

LDicomNet::OnReceiveCEchoRequest

LDicomNet::OnReceiveCEchoResponse

LDicomNet::OnReceiveNReportRequest

LDicomNet::OnReceiveNReportResponse

LDicomNet::OnReceiveNGetRequest

LDicomNet::OnReceiveNGetResponse

LDicomNet::OnReceiveNSetRequest

LDicomNet::OnReceiveNSetResponse

LDicomNet::OnReceiveNActionRequest

LDicomNet::OnReceiveNActionResponse

LDicomNet::OnReceiveNCreateRequest

LDicomNet::OnReceiveNCreateResponse

LDicomNet::OnReceiveNDeleteRequest

LDicomNet::OnReceiveNDeleteResponse

LDicomNet::OnReceiveUnknown

Finally, you can retrieve information about a DICOM Network connection using these functions:

LDicomNet::IsActivated

LDicomNet::IsAssociated

LDicomNet::IsConnected

LDicomNet::GetQueueSend

LDicomNet::GetServer

LDicomNet::GetClient

LDicomNet::GetClientCount

LDicomNet::GetHostInfo

LDicomNet::GetPeerInfo

LDicomNet::GetAssociate

For more information about the DICOM Associate connection, refer to Working with DICOM Associate Connections.


Working with DICOM Associate Connections

Once a DICOM Network has been established, the Network connection must be associated. This is also referred to as establishing a DICOM Associate connection. The DICOM Associate connection serves to establish how the two AEs will communicate and the nature of the data that will be transferred. For example, the DICOM Associate connection can establish the following

  • The organization of the data – Little Endian vs Big Endian, Implicit VR vs Explicit VR.

  • Compression type.

  • The type of data that will be transferred – CT Image Storage Class, Printer Class, or Patient Study Query Find Class

  • The role of a connection member – SCU, SCP, or both.

  • Maximum size of the data "chunk" to be sent, if a maximum exists.

  • Whether or not asynchronous operations are allowed.

  • The presence of some user-defined information.

An SCU requests the creation of an Associate connection with an SCP with which it has established a DICOM Network connection (not yet associated). The SCU sends the SCP an Associate Request message outlining the data it wishes to transfer, and the how the transfer can occur. The SCP can accept or reject the Associate connection request, based on whether or not the SCP supports the data and communication characteristics outlined by the SCU. If the connection is accepted, the DICOM Associate connection is established and the two AEs can begin transferring messages and data.

In this documentation a DICOM connection which has been associated will be referred to as a DICOM Associate connection or a DICOM Associate. Information concerning the nature of the DICOM Associate Network will be maintained in and accessed through a DICOM Associate object.

LEADTOOLS provides a number of functions for creating a DICOM Associate connection, modifying a DICOM Associate object and retrieving information about a DICOM Associate connection.

Creating a DICOM Associate connection consists of creating the DICOM Associate object that outlines the characteristics of the transfer and sending messages to request, accept or reject a DICOM Associate connection.

To create a DICOM Associate object, use the following functions:

LDicomAssociate::LDicomAssociate

LDicomAssociate::Default

LEADTOOLS provides the following functions for sending messages to establish a DICOM Associate connection:

LDicomNet::SendAssociateRequest

LDicomNet::SendAssociateAccept

LDicomNet::SendAssociateReject

LDicomNet::SendData

LDicomNet::OnReceiveAssociateRequest

LDicomNet::OnReceiveAssociateAccept

LDicomNet::OnReceiveAssociateReject

LDicomNet::OnSend

If a DICOM Associate connection does not support Asynchronous Operations, then an Application Entity must wait for the response from one message before sending another. Use the LDicomAssociate::IsAsyncOperations function to determine whether asynchronous operations are supported. If Asynchronous Operations are supported, multiple messages may be sent without waiting for a response. The number of messages that may be sent is set using LDicomAssociate::SetAsyncOperations.

To determine the number of Asynchronous Operations that may be invoked without a response, call LDicomAssociate::GetInvokedOperations. To determine the number of operations that have been completed, call LDicomAssociate::GetPerformedOperations.

To close a DICOM Associate connection, use the following message sending functions:

LDicomNet::SendReleaseRequest

LDicomNet::SendReleaseResponse

LDicomNet::SendAbort

LDicomNet::OnReceiveReleaseRequest

LDicomNet::OnReceiveReleaseResponse

LDicomNet::OnReceiveAbort

When modifying a DICOM Associate object, use the following functions:

LDicomAssociate::Reset

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::AddPresentation

LDicomAssociate::DelPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::AddTransfer

LDicomAssociate::DelTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::AddUserInfo

LDicomAssociate::DelUserInfo

LDicomAssociate::SetExtended

To retrieve information about a DICOM Associate object, use the following:

LDicomAssociate::IsRequest

LDicomAssociate::GetVersion

LDicomAssociate::GetCalled

LDicomAssociate::GetCalling

LDicomAssociate::GetApplication

LDicomAssociate::GetPresentationCount

LDicomAssociate::GetPresentation

LDicomAssociate::GetResult

LDicomAssociate::GetAbstract

LDicomAssociate::FindAbstract

LDicomAssociate::GetTransferCount

LDicomAssociate::GetTransfer

LDicomAssociate::IsMaxLength

LDicomAssociate::GetMaxLength

LDicomAssociate::IsAsyncOperations

LDicomAssociate::IsImplementClass

LDicomAssociate::GetImplementClass

LDicomAssociate::GetInvokedOperations

LDicomAssociate::GetPerformedOperations

LDicomAssociate::GetUserRole

LDicomAssociate::GetProviderRole

LDicomAssociate::IsRoleSelect

LDicomAssociate::IsImplementVersion

LDicomAssociate::GetImplementVersion

LDicomAssociate::GetUserInfoCount

LDicomAssociate::GetTypeUserInfo

LDicomAssociate::GetLengthUserInfo

LDicomAssociate::GetDataUserInfo

LDicomAssociate::GetLengthExtended

LDicomAssociate::GetExtended


Working with Command Sets

DICOM messages that are transferred across a DICOM Associate connection include a command set and may or may not include a data set. The command set is a specialized data set that contains information about the action to be taken, such as Request, Response, Find, Get, Move, Action, etc. Since the command set is a data set, it consists of one or more data elements. An accompanying data set contains either the data set on which to perform the command, or the data set resulting from a command.

Each command set has its own specific set of data elements. For more information on the data elements that make up the command sets supported by LEADTOOLS, refer to Command Set Default Tables. For more information on command sets in general, refer to the DICOM Standard.

Since a command set is a specialized data set, it is created the same way a data set is and then initialized as a command set. This is accomplished by calling LDicomDS::LDicomDS to create the data set, and then calling LDicomDS::InitCS to initialize the data set to a command set.

To obtain information about an existing command set, use LDicomDS::GetInfoCS. You can also determine the type of a command set by "and-ing" the value of the TAG_COMMAND_FIELD value with COMMAND_REQUEST or COMMAND_RESPONSE. In addition, you can determine whether a command set has a required data set by "and-ing" the value of the TAG_DATA_SET_TYPE element with COMMAND_DATASET_PRESENT, COMMAND_DATASET_IDENTIFIER, or COMMAND_DATASET_ABSENT.

To copy a one data set to another data set, use LDicomDS::CopyDS.


Creating a DICOM Network Connection

When establishing a connection between two AEs, for the purpose of transferring DICOM data and messages, the first step is to create a DICOM Network connection.

The AE acting as an SCP must have a DICOM Network object and the AE acting as an SCU must have a DICOM Network object. In addition, every time an SCP accepts a new connection request from an SCU, the SCP creates another DICOM Network object for the newly connected SCU. This provides the SCP with memory for maintaining information about the SCU and that particular connection. Steps for establishing a DICOM Network connection are given below for both the SCU and the SCP.

Creating a network handle for an SCU

Initialize the DICOM DLL by calling LDicomNet::StartUp. This must be done before any DICOM Network Operations functions are called. Please note that this only needs to be called once for each application.

Create the DICOM Network handle by calling LDicomNet::LDicomNet.

To connect to an SCP, call LDicomNet::Connect. This will generate a call to the LDicomNet::OnAccept function on the SCP to let the SCP know that a connection request has been received.

The SCP should respond by calling LDicomNet::Accept. This will generate a call to the LDicomNet::OnConnect on the SCU. At this time the DICOM Network connection has been established.

Establish a security layer. For more information on security layers, refer to Adding Security to a DICOM Connection and Adding TLS Security to a DICOM Connection

Creating a network handle for an SCP

Initialize the DICOM DLL by calling LDicomNet::StartUp. This must be done before any DICOM Network Operations functions are called. Please note that this only needs to be called once for each application.

Create the DICOM Network object by calling LDicomNet::LDicomNet.

To listen for incoming connection requests, call LDicomNet::Listen.

When an SCU wishes to connect to an SCP, the SCU calls LDicomNet::Connect. This generates a call to the LDicomNet::OnAccept function on the SCP to let the SCP know that a connection request has been received.

The SCP should respond by calling LDicomNet::LDicomNet and LDicomNet::Accept. Calling LDicomNet::LDicomNet and create a network object for this specific connection and allows the SCP to maintain information about this connection. Calling LDicomNet::Accept will generate a call to the LDicomNet::OnConnect on the SCU. At this time the DICOM Network connection has been established. (An SCP should always accept a connection request. Once the connection is made the SCP can check the SCU and close the connection if it does not wish to maintain it. Since the connection requests are queued, if the connection is not accepted, it remains in the queue. When the next request is received, it is placed in the queue behind the first request. Calling LDicomNet::Accept at this point will connect the first request, not the second, since the first request is still in the queue.)

Establish a security layer. For more information on security layers, refer to Adding Security to a DICOM Connection and Adding TLS Security to a DICOM Connection.

For more information on creating SCUs and SCPs, refer to Creating an SCU or Creating an SCP.

Once the DICOM Network Connection has been made, you must create a DICOM Associate Connection before DICOM messages and data can be transferred between the AEs. For more information in creating a DICOM Associate connection, refer to Creating a DICOM Associate Connection.


Creating a DICOM Associate Connection

Once a DICOM Network Connection has been established, a DICOM Associate Connection must be established before DICOM messages and data can be transferred between two AEs.

The AE acting as an SCP must have a DICOM Associate handle and the AE acting as an SCU must have a DICOM Associate handle. Steps for establishing a DICOM Associate connection are given below for both the SCU and the SCP.

Creating an associate handle for an SCU

Create the DICOM Associate handle by calling LDicomAssociate::LDicomAssociate.

Initialize the newly created DICOM Associate handle by calling LDicomAssociate::Default, or set the new DICOM Associate handle using the following functions:

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::SetExtended

LDicomAssociate::AddPresentation

LDicomAssociate::AddTransfer

To connect to an SCP, call LDicomNet::SendAssociateRequest. This will generate a call to the LDicomNet::OnReceiveAssociateRequest on the SCP to let the SCP know an associate connection request has been received.

The SCP may accept or reject the request and respond by calling LDicomNet::SendAssociateAccept or LDicomNet::SendAssociateReject. This will generate a call to the LDicomNet::OnReceiveAssociateAccept or the LDicomNet::OnReceiveAssociateReject. If LDicomNet::OnReceiveAssociateAccept is called, the DICOM Associate Connection has been established.

Creating an associate handle for an SCP

When an SCU requests a DICOM Associate connection, the SCU calls LDicomNet::SendAssociateRequest. This generates a call to LDicomNet::OnReceiveAssociateRequest on the SCP.

When the LDicomNet::OnReceiveAssociateRequest function is called, create the DICOM Associate handle by calling LDicomAssociate::LDicomAssociate.

Reset the newly created DICOM Associate handle to an Associate Accept by calling LDicomAssociate::Reset, or set the new DICOM Associate handle using the functions given above.

The DICOM Associate connection request can be accepted or rejected. To accept the Associate connection request, call LDicomNet::SendAssociateAccept. This will generate a call to the LDicomNet::OnReceiveAssociateAccept on the SCU. At this time the DICOM Associate connection has been established. To reject the Associate connection request, call LDicomNet::SendAssociateReject. This will generate a call to the LDicomNet::OnReceiveAssociateReject function on the SCU.


Creating an SCU

The following steps provide the basic information required to create an SCU:

Initialize the DICOM DLL by calling LDicomNet::StartUp. This must be done before any DICOM Network Operations functions are called.. Please note that this only needs to be called once for each application.

Create the DICOM Network object by calling LDicomNet::LDicomNet.

To connect to an SCP, call LDicomNet::Connect. This will generate a call to the LDicomNet::OnAccept function on the SCP to let the SCP know that a connection request has been received.

The SCP should respond by calling LDicomNet::Accept. This will generate a call to the LDicomNet::OnConnect on the SCU. At this time the DICOM Network connection has been established.

Establish a security layer. For more information on security layers, refer to Adding Security to a DICOM Connection and Adding TLS Security to a DICOM Connection.

Create the DICOM Associate object by calling LDicomAssociate::LDicomAssociate.

Initialize the newly created DICOM Associate object by calling LDicomAssociate::Default, or set the new DICOM Associate object using the following functions:

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::SetExtended

LDicomAssociate::AddPresentation

LDicomAssociate::AddTransfer

To connect to an SCP, call LDicomNet::SendAssociateRequest. This will generate a call to LDicomNet::OnReceiveAssociateRequest on the SCP to let the SCP know an associate connection request has been received.

The SCP may accept or reject the request and respond by calling LDicomNet::SendAssociateAccept or LDicomNet::SendAssociateReject. This will generate a call to LDicomNet::OnReceiveAssociateAccept or LDicomNet::OnReceiveAssociateReject. If LDicomNet::OnReceiveAssociateAccept is called, the DICOM Associate Connection has been established.


Creating an SCP

The following steps provide the basic information required to create an SCP:

Initialize the DICOM DLL by calling LDicomNet::StartUp. This must be done before any DICOM Network Operations functions are called. Please note that this only needs to be called once for each application.

Create the DICOM Network object by calling LDicomNet::LDicomNet.

To listen for incoming connection requests, call LDicomNet::Listen.

When an SCU wishes to connect to an SCP, the SCU calls LDicomNet::Connect. This generates a call to the LDicomNet::OnAccept function on the SCP, to let the SCP know that a connection request has been received.

The SCP should respond by calling LDicomNet::LDicomNet and LDicomNet::Accept. Calling LDicomNet::LDicomNet creates a network object for this specific connection and allows the SCP to maintain information about this connection. Calling LDicomNet::Accept will generate a call to the LDicomNet::OnConnect on the SCU. At this time the DICOM Network connection has been established. (An SCP should always accept a connection request. Once the connection is made the SCP can check the SCU and close the connection if it does not wish to maintain it. Since the connection requests are queued, if the connection is not accepted, it remains in the queue. When the next request is received, it is placed in the queue behind the first request. Calling LDicomNet::Accept at this point will connect the first request, not the second, since the first request is still in the queue.)

Establish a security layer. For more information on security layers, refer to Adding Security to a DICOM Connection and Adding TLS Security to a DICOM Connection.

When an SCU requests a DICOM Associate connection, the SCU calls LDicomNet::SendAssociateRequest. This generates a call to LDicomNet::OnReceiveAssociateRequest on the SCP.

When the LDicomNet::OnReceiveAssociateRequest function is called, create the DICOM Associate object by calling LDicomAssociate::LDicomAssociate.

Reset the newly created DICOM Associate object to an Associate Accept by calling LDicomAssociate::Reset, or set the new DICOM Associate handle using the following functions:

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::SetExtended

The DICOM Associate connection request can be accepted or rejected. To accept the Associate connection request, call LDicomNet::SendAssociateAccept. This will generate a call to LDicomNet::OnReceiveAssociateAccept on the SCU. At this time the DICOM Associate connection has been established. To reject the Associate connection request, call LDicomNet::SendAssociateReject. This will generate a call to the LDicomNet::OnReceiveAssociateReject function on the SCU.


Sending Messages

LEADTOOLS provides many high-level functions for sending messages. These include the following:

LDicomNet::SendAssociateRequest | LDicomNet::SendAssociateAccept
LDicomNet::SendAssociateReject | LDicomNet::SendReleaseRequest
LDicomNet::SendReleaseResponse | LDicomNet::SendAbort
LDicomNet::SendCStoreRequest | LDicomNet::SendCStoreResponse
LDicomNet::SendCFindRequest | LDicomNet::SendCFindResponse
LDicomNet::SendCGetRequest | LDicomNet::SendCGetResponse
LDicomNet::SendCMoveRequest | LDicomNet::SendCMoveResponse
LDicomNet::SendCCancelRequest | LDicomNet::SendCEchoRequest
LDicomNet::SendCEchoResponse | LDicomNet::SendNReportRequest
LDicomNet::SendNReportResponse | LDicomNet::SendNGetRequest
LDicomNet::SendNGetResponse | LDicomNet::SendNSetRequest
LDicomNet::SendNSetResponse | LDicomNet::SendNActionRequest
LDicomNet::SendNActionResponse | LDicomNet::SendNCreateRequest
LDicomNet::SendNCreateResponse | LDicomNet::SendNDeleteRequest

LDicomNet::SendNDeleteResponse

These functions let you easily combine command set information and data set information for a standard set of messages.

If you wish to handle the message sending process in your application, or if you want to create your own messages, LEADTOOLS also provides the low-level function LDicomNet::SendData that allows you to do this.


Receiving Messages

LEADTOOLS provides high-level and low-level functions for receiving messages and handling the associated data. The high-level functions take the received message and data and parse the required information, making it readily available to you. The low-level functions let you receive the raw data and process that data as you wish.

There are two low-level functions provided by LEADTOOLS, LDicomNet::OnReceive and LDicomNet::OnReceiveData. A call to the LDicomNet::OnReceive function is generated prior to the generation of all the LDicomNet::OnReceivexxx functions provided. A call to the LDicomNet::OnReceiveData function is generated prior to the LDicomNet::OnReceiveCxxx and LDicomNet::OnReceiveNxxx functions.

For example, when an SCU calls LDicomNet::SendCStoreRequest, calls to LDicomNet::OnReceive, LDicomNet::OnReceiveData, and LDicomNet::OnReceiveCStoreRequest are all generated on the SCP. The LDicomNet::OnReceiveCStoreRequest function parses the received data into readily useable form. The LDicomNet::OnReceive and LDicomNet::OnReceiveData provide the message and data in raw form so you can process the information yourself.

When an SCU calls LDicomNet::SendReleaseRequest, only calls to LDicomNet::OnReceive and LDicomNet::OnReceiveReleaseRequest are generated (A call to LDicomNet::OnReceiveData is not generated.) since there is no data being sent.


Print Management SCU

The DICOM standard defines the Print Management Service Class to facilitate the printing of images and image related data. The functionality offered by the LDicomPrintSCU class simplifies the process of building a Print Management Service Class User (Print SCU). The LDicomPrintSCU class is derived from LDicomNet and provides functions to handle all the SOP and Meta SOP Classes defined by the Print Management Service Class.

The functionality of the LDicomPrintSCU class can be divided into the following categories:

Association

The Association with the Print Management Service Class Provider (Print SCP) can be simply established by calling the function LDicomPrintSCU::Associate. The SOP/Meta SOP Classes supported by the Print SCU itself are specified when calling this function. The following functions are also related to Association handling:

LDicomPrintSCU::GetAssociateRejectInfo

LDicomPrintSCU::IsClassSupported

LDicomPrintSCU::Release

LDicomPrintSCU::GetAbortInfo

Basic Print Management

Having the Association established, the Basic Print Management can be started by requesting the Print SCP to create a Film Session. This is done using the function LDicomPrintSCU::CreateFilmSession. The following functions are related to Film Session handling:

LDicomPrintSCU::GetFilmSessionInstanceUID

LDicomPrintSCU::UpdateFilmSession

LDicomPrintSCU::PrintFilmSession

LDicomPrintSCU::DeleteFilmSession

LDicomPrintSCU::GetDefaultFilmSessionParameters

Once the Film Session is created, the Print SCP can be requested to create one or more Film Boxes. A Film Box can be created using the function LDicomPrintSCU::CreateFilmBox. The following functions are related to Film Box handling:

LDicomPrintSCU::GetFilmBoxInstanceUID

LDicomPrintSCU::UpdateFilmBox

LDicomPrintSCU::PrintFilmBox

LDicomPrintSCU::DeleteFilmBox

LDicomPrintSCU::GetDefaultFilmBoxParameters

When the Print SCP is requested to create a Film Box, it will also create one or more Image Boxes. The function LDicomPrintSCU::GetImageBoxesCount returns the count of these Image Boxes, which can be handled using the following functions:

LDicomPrintSCU::GetImageBoxInstanceUID

LDicomPrintSCU::UpdateImageBox

LDicomPrintSCU::GetDefaultImageBoxParameters

LDicomPrintSCU::FreeImageBoxesInstanceUIDs

Similarly, when the Print SCP is requested to create a Film Box, it might also create one or more Annotation Boxes. The function LDicomPrintSCU::GetAnnotationBoxesCount returns the count of these Annotation Boxes, which can be handled using the following functions:

LDicomPrintSCU::GetAnnotationBoxInstanceUID

LDicomPrintSCU::UpdateAnnotationBox

LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

If the Presentation LUT SOP Class is supported on the Association, the Print SCP can be requested to create a Presentation LUT. Once a Presentation LUT is created, it can be referenced by the Film Boxes and Grayscale Image Boxes. The following functions handle Presentation LUTs:

LDicomPrintSCU::CreatePresentationLUT

LDicomPrintSCU::GetPresentationLUTInstanceUID

LDicomPrintSCU::DeletePresentationLUT

If the Basic Print Image Overlay Box SOP Class is supported on the Association, the Print SCP can be requested to create an Image Overlay Box, which can then be referenced by the Image Boxes. The following functions handle Image Overlay Boxes:

LDicomPrintSCU::CreateOverlayBox

LDicomPrintSCU::GetOverlayBoxInstanceUID

LDicomPrintSCU::UpdateOverlayBox

LDicomPrintSCU::DeleteOverlayBox

LDicomPrintSCU::GetDefaultOverlayBoxParameters

Pull Stored Print Management

Having the Association established, the Pull Stored Print Management can be started by using the function LDicomPrintSCU::CreatePullPrintRequest to request the Print SCP to create a Pull Print Request SOP Instance. The following functions handle Pull Stored Print Management sessions:

LDicomPrintSCU::GetPullPrintRequestInstanceUID

LDicomPrintSCU::PrintPullPrintRequestSession

LDicomPrintSCU::DeletePullPrintRequest

LDicomPrintSCU::GetDefaultPullPrintRequestParameters

Printer

The function LDicomPrintSCU::GetPrinterInfo can be used to query the Print SCP for information about the printer. Information that can be retrieved includes Printer Name, Printer Manufacturer, Printer Status, etc. The callback function LDicomPrintSCU::OnPrinterReport will be called whenever a printer status report is received from the Print SCP.

The function LDicomPrintSCU::GetPrinterConfiguration can be used to query the Print SCP for the printer configuration information. The retrieved information is stored in the data member LDicomPrintSCU::m_PrinterConfiguration, which is an LDicomDS object.

Print Jobs

When a printing request is sent to the Print SCP, and if the Print Job SOP Class is supported on the Association, the Print SCP will create a Print Job SOP Instance for the new Print Job. The SOP Instance UID of that Instance is returned by the function LDicomPrintSCU::GetPrintJobInstanceUID. This SOP Instance UID can then be passed to the function LDicomPrintSCU::GetPrintJobInfo to query the Print SCP for information about the Print Job. The callback function LDicomPrintSCU::OnPrintJobReport will be called whenever a Print Job status report is received from the Print SCP.

In addition to the functions mentioned above:

The callback function LDicomPrintSCU::OnStatus can be used to monitor the status of the Print SCU itself.

The function LDicomPrintSCU::GetLastOperationStatus returns the status code specified in the response of the Print SCP.

The function LDicomPrintSCU::SetTimeout sets the timeout value for communicating with the Print SCP.

The following sample function illustrates the simplicity of using the LDicomPrintSCU class to print a single DICOM image:

L_VOID PrintImage(L_CHAR* pszImageFilename)
{
LDicomPrintSCU PrintSCU;

// Establish the Association
PrintSCU.Associate ("10.0.2.20", 7104, "PrintSCP", "PrintSCU",
PRINTSCU_BASIC_GRAYSCALE_PM_META_SOP_CLASS);

// Create the Film Session
PrintSCU.CreateFilmSession (NULL);

// Create the Film Box
FILMBOXPARAMETERS FBParams;
PrintSCU.GetDefaultFilmBoxParameters (&FBParams, sizeof(FILMBOXPARAMETERS));
PrintSCU.CreateFilmBox (&FBParams);

// Update the Image Box
IMAGEBOXPARAMETERS IBParams;
PrintSCU.GetDefaultImageBoxParameters (&IBParams, sizeof(IMAGEBOXPARAMETERS));
LDicomDS Image;
Image.LoadDS(pszImageFilename, DS_LOAD_CLOSE);
PrintSCU.UpdateImageBox (PrintSCU.GetImageBoxInstanceUID(0), &Image,
&IBParams);

// Print the Film Box
PrintSCU.PrintFilmBox ();

// Delete the Film Session
PrintSCU.DeleteFilmSession ();

// Release the Association
PrintSCU.Release ();
}


Moving Composite Data

Moving data from one AE to another AE may require several sub-operations to take place in order to accomplish the task. The following is an example showing the types of sub-operations that may be required in a simple C-MOVE-REQ.

In the following example, four AEs will be involved as follows:

AE | Role | Action
A | SCU | Sends the C-MOVE-REQ message.
B | SCP/SCU | Receives the C-MOVE-REQ message and controls the move.
C | SCP | Currently stores the data to be moved.
D | SCP | Will store the moved data at the completion of the move.

This process will be broken down into six steps, as shown in the diagram above. These steps are given in the table below. Please note that the use of hNet, nPriority, nStatus, hDS, etc. throughout the steps below does not imply equivalence. The point of this table is to show possible sub-operations that may be called, and how the message IDs are used to track responses

Step | Function call: | Explanation
1 | LDicomNet::SendCMoveRequest(hNet, nID, 1, pszClass, nPriority, "D", hDS) | A sends this call to B. The third parameter is the message number for this AE's messages. This is the first message sent by A. It wants to move the data set indicated in hDS to D, as indicated in the sixth parameter..
2 | LDicomNet::SendCGetRequest(hNet, nID, 1, pszClass, nPriority, hDS) | B sends this call to C. B must retrieve the data indicated in hDS, in order to store it on D. The third parameter indicates that this is the first message sent by B. When C responds with LDicomNet::SendCGetResponse, it will refer to this message ID. That way B knows which message(command) has been completed.
3 | LDicomNet::SendCGetResponse(hNet, nID, 1, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, hDS) | C sends this call to B. This sends the requested data to B in hDS. The third parameter indicates that this is a response to the first message sent by B. This way B knows the response to LDicomNet::SendCGetRequest (step 2) has been received.
4 | LDicomNet::SendCStoreRequest(hNet, nID, 2, pszClass, pszInstance, nPriority, "A", 1, hDS) | B sends this call to D. B must determine whether D is capable of storing the data. The third parameter indicates that this is the second message sent by B. The seventh parameter indicates that A placed the original C-MOVE-REQ. The eighth parameter indicates that the original message sent by A, requesting the move, was message number 1. The data set to be stored is in hDS.
5 | LDicomNet::SendCStoreResponse(hNet, nID, 2, pszClass, pszInstance, nStatus) | D sends this call to B. The third parameter indicates that this is in response to the second message sent by B.
6 | LDicomNet::SendCMoveResponse(hNet, nID, 1, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, hDS) | B sends this call to A. The third parameter indicates that this is in response to the first message sent by A. At this point the move has been completed, and the data is now stored on D.


Diagram of an SCU-SCP Set-Up

The diagram given below shows a simple example of an SCU-SCP connection and a series of function calls used to transfer messages and data.

SCU

SCP

LDicomNet::StartUp

Initialize the DICOM DLL. This must be done before calling any DICOM operation functions, but only needs to be called once per application.

LDicomNet::StartUp

LDicomNet::LDicomNet

Create a DICOM Network object.

LDicomNet::LDicomNet

The SCP listens for incoming connection requests.

LDicomNet::Listen

LDicomNet::Connect

-------------------------------------------------->
The SCU calls this function to connect to an SCP. This generates a call to this function on the SCP

LDicomNet::OnAccept

LDicomNet::OnConnect

<--------------------------------------------------
The SCP calls LDicomNet::CreateNet for each connection it accepts. This provides the SCP memory to store information about this specific connection. LDicomNet::Accept is called to accept the connection. This generates a call to this function on the SCU.

LDicomNet::LDicomNet
LDicomNet::Accept

DICOM Network Connection established

LDicomNet::SendAssociateRequest

-------------------------------------------------->
The SCU calls this function to request a DICOM Associate connection. This generates calls to these functions on the SCP.

LDicomNet::OnReceive
LDicomNet::OnReceiveAssociateRequest

LDicomNet::OnReceive
LDicomNet::OnReceiveAssociateAccept
or
LDicomNet::OnReceive
LDicomNet::OnReceiveAssociateReject

<--------------------------------------------------
The SCP calls LDicomNet::SendAssociateAccept to accept the DICOM Associate connection. This generates calls to LDicomNet::OnReceive and LDicomNet::OnReceiveAssociateAccept on the SCU. LDicomNet::SendAssociateReject is sent to reject the DICOM Associate connection. This generates calls to LDicomNet::OnReceive and LDicomNet::OnReceiveAssociateReject on the SCU.

LDicomNet::SendAssociateAccept
or
LDicomNet::SendAssociateReject

DICOM Associate Connection established

LDicomNet::SendCStoreRequest

-------------------------------------------------->
The SCU calls this function to request the storage of data. This generates calls to these functions on the SCP.

LDicomNet::OnReceive
LDicomNet::OnReceiveData
LDicomNet::OnReceiveCStoreRequest

LDicomNet::OnReceive
LDicomNet::OnReceiveData
LDicomNet::OnReceiveCStoreResponse

<--------------------------------------------------
The SCP calls this function to respond to the storage request. This generates calls to these functions on the SCU.

LDicomNet::SendCStoreResponse

LDicomNet::SendReleaseRequest
or
LDicomNet::SendAbort

-------------------------------------------------->
The SCP calls LDicomNet::SendReleaseRequest to request a release from the DICOM Associate connection. This generates calls to LDicomNet::OnReceive and LDicomNet::OnReceiveReleaseRequest on the SCP. This is the preferred method of closing a connection. LDicomNet::SendAbort can also be sent to close a connection. This generates calls to LDicomNet::OnReceive and LDicomNet::OnReceiveAbort on the SCP.

LDicomNet::OnReceive
LDicomNet::OnReceiveReleaseRequest
or
LDicomNet::OnReceive
LDicomNet::OnReceiveAbort

LDicomNet::OnReceive
LDicomNet::OnReceiveReleaseResponse

<--------------------------------------------------
The SCP calls this function to respond to the release request. This generates calls to the following functions on the SCU.

LDicomNet::SendReleaseResponse

LDicomNet::Close

--------------------------------------------------->
The SCU calls this function to close the DICOM Associate connection. This generates a call to this function on the SCP.

LDicomNet::OnClose

LDicomNet::ShutDown

When the DICOM DLL is no longer needed, call this function to shut down the DLL and free all associated memory. This function should be called once for every call to LDicomNet::StartUp.

LDicomNet::ShutDown


Closing a DICOM Associate Connection

When the DICOM Associate connection is no longer needed, the connection should be closed. The proper steps for closing a DICOM Associate connection are as follows:

The SCU that wishes to close the connection calls LDicomNet::SendReleaseRequest. This generates a call to the LDicomNet::OnReceiveReleaseRequest on the SCP.

In response to the call to LDicomNet::OnReceiveReleaseRequest, the SCP calls LDicomNet::SendReleaseResponse. This generates a call to LDicomNet::OnReceiveReleaseResponse on the SCU.

At this point LDicomNet::Close can be called to close the connection.

Please note that while calling LDicomNet::SendAbort will also close the connection (depending on the server), the method outlined above is the preferred method.


Security Profiles

A DICOM implementation can claim conformance to any of the security profiles defined by PS 3.15 of the DICOM standard. Currently, LEADTOOLS supports the following profiles:

Secure Transport Connection Profiles

Digital Signature Profiles

Secure Transport Connection Profiles include the following profiles:

Basic TLS Secure Transport Connection Profile. For more information refer to Adding TLS Security to a DICOM Connection.

ISCL Secure Transport Connection Profile. For more information refer to Adding Security to a DICOM Connection.


Working with Digital Signatures

ISO 7498-2 defines a digital signature as, "Data appended to, or a cryptographic transformation of, a data unit that allows a recipient of the data unit to prove the source and integrity of that unit and protect against forgery e.g. by the recipient."

Digital Signatures capability provides a first step towards lifetime integrity checks. A digital signature serves two purposes. First, it can be used to verify the identity of the signer. Second, it can be used to ensure that the signed data has not been altered or destroyed in an unauthorized manner. These two security aspects are usually termed as authentication and data integrity, respectively.

When creating a Digital Signature, the creator of a Digital Signature identifies those Data Elements of a DICOM Data Set that are included in the calculation of the Message Authentication Code (MAC) used in the Digital Signature. The creator calculates the MAC, and then encrypts the MAC with a key or the private part of a key pair unique to the creator of the Digital Signature. Any receiver of the DICOM Data Set that knows the key or public part of the key pair can then recalculate the MAC and compare it with the MAC recorded in the Digital Signature. If any of the identified Data Elements has been altered or removed, it is extremely unlikely that the MAC calculated by the receiver and the MAC within the Digital Signature will agree. Digital Signature Profiles are specified in Annex C of DICOM PS 3.15.

The DICOM standard defines the Message Authentication Code (MAC) Parameters Sequence (4FFE,0001) and the Digital Signatures Sequence (FFFA,FFFA) to include Digital Signatures in a Data Set. For each Digital Signature, there should be a corresponding Digital Signatures Sequence Item, which contains the signature itself and the digital certificate of the signer, in addition to other information. The Digital Signatures Sequence Item also references a MAC Parameters Sequence Item, which specifies some parameters related to the creation of the signature, like the Data Elements signed and the hash algorithm used. For more information, refer to Table C.12-5 of DICOM PS 3.3.

A Digital Signature can be created in the main Data Set as well as in an Item of a Sequence of Items. The two Sequences mentioned above must be at the same level where the Digital Signature is created. Only the Data Elements at this level can be signed by the Digital Signature. For example, if one or more Data Elements of an Item are to be signed, the two Sequences should be placed under that Item on the same level as the Data Elements. Multiple Digital Signatures can be created by adding more Digital Signatures Sequence Items.

LEADTOOLS provides a number of functions for creating, verifying, and handling Digital Signatures in DICOM Data Sets. The functionality provided allows you to implement all of the DICOM Security Profiles that are specified in the DICOM Standard. For many of these functions, a particular Digital Signature is identified by passing a pointer to the DICOMELEMENT structure that specifies the corresponding Digital Signatures Sequence Item.

Use the LDicomDS::CreateSignature function to create a Digital Signature in the main Data Set or in an Item of a Sequence of Items. For example, the following signs the main Data Set:

DataSet.CreateSignature(NULL,
"C:\\PrivateKey",
"C:\\Certificate.cer",
"password");

When creating the signature, use the uSecurityProfile parameter to specify the profile with which the signature should conform. For more information about profiles, refer to Annex C, Digital Signature Profiles, of DICOM PS 3.15.

You can use the LDicomDS::GetSignaturesCount and LDicomDS::GetSignature functions to enumerate the Digital Signatures that exist in the main Data Set or in an Item of a Sequence of Items. The former function returns the number of Digital Signatures while the latter function returns a pointer to the Digital Signatures Sequence Item that corresponds to a particular Digital Signature. This pointer can then be passed to the various functions to verify, delete, or get information about the Digital Signature. Also, the LDicomDS::FindSignature function can be used to search the whole Data Set for a Digital Signature by knowing its Digital Signature UID (0400,0100).

The LDicomDS::VerifySignature function verifies a particular Digital Signature. It can also be used to verify all the Digital Signatures in the whole Data Set at once, as shown in the following example:

uRet = DataSet.VerifySignature(NULL);
switch (uRet)
{
case DICOM_SUCCESS:
// All Digital Signatures were verified
break;

case DICOM_ERROR_INVALID_SIGNATURE:
// At least one Digital Signature is invalid
break;
}

Use the LDicomDS::DeleteSignature function to remove a particular Digital Signature from the Data Set, or to remove all the Digital Signatures in the whole Data Set.

Use the LDicomDS::SaveCertificate function to save the digital certificate of the signer to a file.

Use the following functions to obtain information about a particular Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm


General Transport Layer Secure (TLS) Information

The Transport Layer Secure (TLS) protocol provides a means of adding security to DICOM communication. The security added targets three main areas:

Computer or Entity Authentication

Confidentiality

Data Integrity

Computer/Entity Authentication

Computer or entity authentication allows both the client and the server to make sure the computer to which they are communicating (the peer computer) is "legitimate" for communication. This is accomplished by exchanging information on RSA-based certificates. The server is required to use an RSA certificate; the client may or may not use an RSA certificate. During the mutual authentication "handshake" only a computer (or entity) having the private RSA key can decrypt messages from the peer computer (or entity). If both the client and the server use RSA certificates, then after the handshake both computers have uniquely identified each other. For more information on this, refer to the "TLS Protocol Version 1.00".

Confidentiality

Communication confidentiality is achieved by encrypting the data sent over the communication channel. All data sent over the network is compressed using the current compression algorithm (if any), encrypted with the current algorithm and encrypt keys and is accompanied by a message authentication code. The message authentication code is also encrypted. Currently, the encryption options are:

DES encryption.

3DES encryption.

For a more information on encryption, refer to the "TLS Protocol Version 1.00".

Data Integrity

Data integrity is maintained by using message authentication codes for each packet sent across a DICOM Network. These message authentication codes are encrypted using the same encryption mode used for encrypting data. Currently, TLS uses Secure Hash Algorithm message authentication codes.


Adding TLS Security to a DICOM Connection

This toolkit uses SSL (Secure Socket Layer) and TLS (Transport Layer Security) to implement security. Developed by Netscape, the Secure Socket Layer (SSL) protocol is designed to ensure the security of data being communicated between two points over a network, and uses TCP as the communication layer. SSL provides a way for the client and server to authenticate each other, ensures the integrity of the data during a session, and ensures that the data remains private between the client and the server. The Transport Layer Security (TLS) protocol is based on the SSL protocol.

Based on the TLS standards, LEADTOOLS provides support for adding security in the following areas:

Computer or Entity Authentication

Confidentiality

Data Integrity

Computer/Entity Authentication

Before establishing a DICOM Associate connection between two computers, each computer should "authenticate" the other computer. This ensures that both computers are legitimate, and are qualified to have access to the information that may be transferred. This is accomplished through mutual authentication. For more information on this process, refer to the "TLS Protocol Version 1.00."

Use the following functions to set up the secure connection:

LDicomNet::LDicomNet – The LDicomNet constructors allocate memory for the network structure and set the site of the temporary files. A special version of the constructor can be used to change the default security settings. The LEADTOOLS DICOM DLL must be initialized before using any of the Network operation functions. To do so, call LDicomNet::StartUp.

LDicomNet::Initialize - This function is to be used in conjunction with the LDicomNet::LDicomNet(*pszPath, nMode, bReserved) constructor when changing security options from the defaults.

Authentication is carried out using a series of challenges and responses between the "client" and the "server". TLS has its own system of generating responses, which is handled internally, without using user provided functions. This authentication is based on the presence of an RSA certificate. Servers are required to have an RSA certificate, but clients may or may not have one. If both the client and the server use an RSA certificate, then by the end of the authentication process, each has authenticated the identity of the other. The RSA certificates for servers and clients can be set using the LDicomNet::SetClientCertificateTLS and LDicomNet::SetServerCertificateTLS.

If the certificate files contain encrypted private keys, an event will be fired so that the private key password can be provided:

LDicomNet::OnPrivateKeyPassword

Once a TLS connection has been established, the LDicomNet::OnSecureLinkReady function is called.

Confidentiality

Once two computers have negotiated the ciphersuite, and have authenticated each other, they can begin transferring messages and data between them. For more information on the ciphersuite negotiation, refer to Negotiating a Ciphersuite. The confidentiality of these transfers is maintained by encrypting the data sent over the communication channel. Currently LEADTOOLS supports the TLS standard of using the DES or triple DES encryption mode. To determine the encryption mode used, find out the ciphersuite that was negotiated by calling LDicomNet::GetCiphersuiteTLS. Once the ciphersuite is known, call the LDicomNet::GetEncryptionAlgorithmTLS function.

Data Integrity

Data integrity is maintained by adding message authentication codes to each packet of each message sent across the DICOM Network. The message authentication codes may be SHA. To get the type of message authentication codes used, find out the ciphersuite that was negotiated by calling LDicomNet::GetCiphersuiteTLS. Once the ciphersuite is known, call the LDicomNet::GetIntegrityAlgorithmTLS function.


Negotiating a Ciphersuite

A ciphersuite is a collection of information that dictates how data and messages are transferred between clients and servers. This information includes encryption mode, mutual authentication mode, message authentication mode, etc. TLS supports several different ciphersuites, however, currently LEADTOOLS supports only those indicated in the L_CIPHERSUITE data type. Before the client and server can begin transferring data and messages they must negotiate the ciphersuite to use.

The client sends the server a list of ciphersuites that it understands. These are sent in order of preference. To get or set the ciphersuites at specific indices within the list, use the LDicomNet::GetCipherFromIndexTLS and LDicomNet::SetCipherToIndexTLS functions. The server selects the first ciphersuite that it understands. If this is acceptable to both sides, this is the ciphersuite selected for use. Once a ciphersuite has been negotiated, the selected ciphersuite can be obtained by calling LDicomNet::GetCiphersuiteTLS.

Once the negotiated ciphersuite is known, information associated with this ciphersuite can be obtained using the following functions:

LDicomNet::GetAuthenticationAlgorithmTLS

LDicomNet::GetIntegrityAlgorithmTLS

LDicomNet::GetKeyExchangeAlgorithmTLS

LDicomNet::GetEncryptKeyLengthTLS

LDicomNet::GetMutualAuthKeyLengthTLS


General Integrated Secure Communication Layer (ISCL) Information

The Integrated Secure Communication Layer (ISCL) provides a means of adding security to DICOM communication. The security added targets three main areas:

Computer or Entity Authentication

Confidentiality

Data Integrity

Computer/Entity Authentication

Computer or entity authentication lets both the client and the server make sure the computer to which they are communicating (the peer computer) is "legitimate" for communication. This is accomplished by exchanging challenge codes and response codes. The following functions are used when performing computer or entity authentication:

The LDicomNet::GetChallengeISCL function generates a random number.

The LDicomNet::InternalAuthenticateISCL function generates a response code, based on the specified challenge code.

The LDicomNet::ExternalAuthenticateISCL function determines whether the response code is a valid response for the challenge code.

This occurs during "mutual authentication". Currently, the only mutual authentication protocol is the "Three-pass-four-way" protocol. For a more detailed description of this protocol, refer to the "MEDIS-DC STANDARDS for Integrated Secure Communication Layer Protocols V 1.00".

The mutual authentication protocol lets both the client and the server verify that the computer to which each is connected is cleared to receive information. The server begins by issuing a GETCHALLENGE command. This generates a random number, which in turn is used to create a challenge code.

The challenge code is then sent to the client. The client issues an INTERNAL AUTHENTICATE command, which takes the challenge code and generates a response code. This response code is then returned to the server. The client has also generated its own GETCHALLENGE command and has generated a challenge code. This is sent to the server with the response code. This allows the client to verify that it should be communicating with the server.

The server receives the response code from the client and generates an EXTERNAL AUTHENTICATE command. The original challenge code and the response code returned from the client are compared. If the response code is found to be a legitimate response code for the challenge code, the server has authenticated the client. The server also takes the challenge code received from the client and generates an INTERNAL AUTHENTICATE command. This also generates a response code from the received challenge code. This response code is then sent back to the client.

The client receives the response code from the server and generates an EXTERNAL AUTHENTICATE command. The original challenge code is compared to this response code. If the response code is found to be a legitimate response code for the challenge code, the client has authenticated the server.

At this point, the client sends the server a message that the mutual authentication has been completed.

On the toolkit level each GETCHALLENGE command issued either by the server or the client is done through a call to the function LDicomNet::GetChallengeISCL which will generate a random number.

If an INTERNAL AUTHENTICATE command is issued, LDicomNet::InternalAuthenticateISCL function will be called to generate a response code, based on the specified challenge code.

If an EXTERNAL AUTHENTICATE command is issued, LDicomNet::ExternalAuthenticateISCL function will be called to determine whether the response code is a valid response for the challenge code.

Currently, the only mutual authentication protocol is the "Three-pass-four-way" protocol. For a more detailed description of this protocol, refer to the "MEDIS-DC STANDARDS for Integrated Secure Communication Layer Protocols V 1.00".

Confidentiality

Communication confidentiality is achieved by encrypting the data sent over the communication channel. Currently, the encryption options are:

No encryption

DES-CBC encryption. This is a 56 bit effective key length in a 64 bit key encryption in cipher block chaining mode.

For more information on encryption, refer to the "MEDIS-DC STANDARDS for Integrated Secure Communication Layer Protocols V 1.00".

Data Integrity

Data integrity is maintained by using message authentication codes for each message sent across a DICOM Network. These message authentication codes are encrypted using the same encryption mode used for encrypting data. Currently, ISCL uses DESMAC (64 bit) and MD5 (128 bit) message authentication codes.


Protocols

There are four protocols covered by the ISCL standards. These are:

Line connection

Mutual authentication

Sending and receiving messages

Line disconnection

Line connection

The Line Connection Protocol is used to establish the maximum packet size for transferring information between a client and a server, and for determining the version of the ISCL standard to use. Generally, a client will request a connection with a server. The server can then accept or reject the connection request. The server will also then request a line connection check to determine whether the client and the server can communicate. Along with this request, the server sends information on the maximum packet size it can handle and the version of the standard it uses.

The client receives this information and generates a line connection response. Please note that the maximum packet size will be the smaller value of the client's maximum packet size and the server's maximum packet size. The client then sends a line connection response back to the server.

Once the line connection has been successfully established, the server is then ready to request mutual authentication.

Mutual authentication

The mutual authentication protocol lets both the client and the server verify that the computer to which each is connected is cleared to receive information. The server begins by issuing a GETCHALLENGE command. This generates a random number, which in turn is used to create a challenge code.

The challenge code is then sent to the client. The client issues an INTERNAL AUTHENTICATE command, which takes the challenge code and generates a response code. This response code is then returned to the server. The client has also generated its own GETCHALLENGE command and has generated a challenge code. This is sent to the server with the response code. This allows the client to verify that it should be communicating with the server.

The server receives the response code from the client and generates an EXTERNAL AUTHENTICATE command. The original challenge code and the response code returned from the client are compared. If the response code is found to be a legitimate response code for the challenge code, the server has authenticated the client. The server also takes the challenge code received from the client and generates an INTERNAL AUTHENTICATE command. This also generates a response code from the received challenge code. This response code is then sent back to the client.

The client receives the response code from the server and generates an EXTERNAL AUTHENTICATE command. The original challenge code is compared to this response code. If the response code is found to be a legitimate response code for the challenge code, the client has authenticated the server.

At this point, the client sends the server a message that the mutual authentication has been completed.

Sending and receiving messages

Messages may be sent secured or unsecured. Regardless of the encryption mode or the message authentication mode, messages can still be sent unsecured.

Sending and receiving a secured message is achieved by encrypting the data and adding a message authentication code also encrypted, to the message. Upon receipt, the message is decrypted and the authentication code verified.

Line disconnection

When the connection is no longer needed, one computer/entity of a connection sends a line disconnection request to the other (peer) computer. The computer receiving the request then sends a line disconnection response.

For more information about these protocols, please refer to the "MEDIS-DC STANDARDS for Integrated Secure Communication Layer Protocols, V 1.00."


Establishing an ISCL Line Connection

In order to establish an ISCL line connection between two computers, they must establish what version of the ISCL standard they are going to use and what size communication block they will use. To set the communication block size for a server or a client, use the LDicomNet::SetMaxCommBlockLengthISCL function. If the communication block sizes are different between the "client" and the "server", the smallest communication block size will be used when transferring data between the two machines. To determine what communication block size was agreed upon call LDicomNet::GetCommBlockLengthISCL.


Adding Security to a DICOM Connection

Based on the ISCL standards, LEADTOOLS provides support for adding security in the following areas:

Computer or Entity Authentication

Confidentiality

Data Integrity

Digital Signatures

Computer/Entity Authentication

Before establishing a DICOM Associate connection between two computers, each computer should "authenticate" the other computer. This ensures that both computers are legitimate, and are qualified to have access to the information that may be transferred. This is accomplished through mutual authentication. A more detailed description of this process can be found in either General Integrated Secure Communication Layer (ISCL) Information, or the "MEDIC-DC STANDARDS for Integrated Secure Communication Layer Protocols V 1.00."

A specific mode can be used for the mutual authentication process. This is set using the LDicomNet::SetMutualAuthAlgISCL function. Currently only the "Three-pass-four-way" mode is used. During the mutual authentication process, authentication data, an authentication key and an index for the authentication key is used to authenticate one entity to another. The authentication data used for this process can be set using the LDicomNet::SetAuthDataISCL function.

In addition, during the mutual authentication process an index into an array of authentication keys is used to further authenticate an entity. The authentication keys for both the client and the server must be the same. These keys can be set in the array using the LDicomNet::SetMutualAuthKeyISCL function. An index is used to specify which key in the array should be used for authentication. This index is set using the LDicomNet::SetIndexForMutualAuthISCL function. To determine the current index of the key to use for authentication, call the LDicomNet::GetIndexForMutualAuthISCL function.

Confidentiality

Once two computers have authenticated each other, they can begin transferring messages and data between them. The confidentiality of these transfers is maintained by encrypting the data sent over the communication channel. Currently LEADTOOLS supports the ISCL standard of either using no encryption or using the DES encryption in cipher block chaining mode. The encryption mode can be set using the LDicomnet::SetDefaultEncryptionISCL function.

In addition, during the encryption/decryption process an index into an array of encryption keys is used to further guard data confidentiality. The encryption keys for both the client and the server must be the same. These keys can be set in the array using the LDicomNet::SetEncryptKeyISCL function. An index is used to specify which key in the array should be used for encryption. This index is set using the LDicomNet::SetIndexForEncryptISCL function. To determine the current index of the key to use for encryption, call the LDicomNet::GetIndexForEncryptISCL function.

Data Integrity

Data integrity is maintained by adding message authentication codes to each message sent across the DICOM Network. The message authentication codes may be DESMAC or MD5. To set the type of message authentication codes to use, call the LDicomNet::SetDefaultSigningISCL function.

Digital Signatures

Digital Signatures capability provides a first step towards lifetime integrity checks. When creating a Digital Signature, the creator of a Digital Signature identifies those Data Elements of a DICOM Data Set that are included in the calculation of the Message Authentication Code (MAC) used in the Digital Signature. The creator calculates the MAC, and then encrypts the MAC with a key or the private part of a key pair unique to the creator of the Digital Signature. Any receiver of the DICOM Data Set that knows the key or public part of the key pair can then recalculate the MAC and compare it with the MAC recorded in the Digital Signature. If any of the identified Data Elements has been altered or removed, it is extremely unlikely that the MAC calculated by the receiver and the MAC within the Digital Signature will agree. Digital Signature Profiles are specified in Annex C of DICOM PS 3.15. For more information, refer to Working with Digital Signatures.


Sending and Receiving Messages

Once an ISCL connection has been established, the client and the server are ready to start transferring messages and data. The data transferred may be secured or unsecured. To send unsecured messages, the user should use the LDicomNet::SendNonSecureISCL function. When this function is called, it generates a call to the LDicomNet::OnNonSecureSendISCL function on the sender's machine. Upon receiving non secured data, a call to the LDicomNet::OnNonSecureReceivedISCL function is generated on the receiver's machine.

Use the LDicomNet::SetMaxMessageLengthISCL method function to set the maximum message length that can be processed.

For information about confidentiality and data integrity associated with sending secured messages, refer to Adding Security to a DICOM Connection.

Since encryption modes, message authentication codes, authorization data and message length must all match between a sender and a receiver, occasionally, a sender will send a message that is not received properly by the receiver. When this happens, the receiver, not the sender, can get information about the problems that caused the failure. LEADTOOLS provides the following functions to help the user locate the cause of the problem:

LDicomNet::GetPeerAuthDataISCL

LDicomNet::GetPeerEncryptionISCL

LDicomNet::GetPeerMACISCL

LDicomNet::GetPeerRequestedMessageLengthISCL

In addition, when errors occur, the LDicomNet::GetErrorSecure and LDicomNet::GetStatusISCL can be used to help determine the location of the problem.


Closing an ISCL Connection

When an ISCL connection is no longer needed, it should be closed. There are two options for closing an ISCL using the LDicomNet::CloseForced function. To request a disconnection, LDicomNet::CloseForced should be called with the bForced parameter set to FALSE. When doing this, it is a good idea to make sure the ISCL queue is empty by calling LDicomNet::IsISCLQueueEmpty To just kill the connection completely, call the LDicomNet::CloseForced function with the bForced parameter set to TRUE.


Working with DICOM Annotations

LEADTOOLS DICOM Class Library provides basic annotation support for users who just want to load, count, obtain information about and save annotation files. In addition, LEADTOOLS provides more advanced support for users who want to work with the "Graphic Annotation Module" and the "Grayscale Softcopy Presentation State" IOD, which let you display and manipulate graphic and text annotations.

Please note that the MEDICAL capabilities must be unlocked in order to work with DICOM annotations. For more information on unlocking these capabilities, refer to LSettings::UnlockSupport .

Basic

The toolkit gives the user the ability to store LEADTOOLS annotation files as private data elements inside a DICOM dataset. You can store up to 256 single page or multi-page annotation files, either in the LEAD native format or a binary encoded format.

For working with the annotation files, LEAD provides the following:

To load an annotation file from a DICOM data set, use the LDicomDS::AnnLoad function.

The LDicomDS::AnnCount retrieves information about the annotation files stored in a DICOM data set. This function provides information on which of the 256 positions within the DICOM data set contain annotation files and, if desired, the appropriate private creator tag.

The LDicomDS::AnnDelete function can be used to delete a page from an annotation file, delete an entire annotation file, or delete all annotation files stored in a DICOM data set.

To save annotations as private data within a DICOM data set, use the LDicomDS::AnnSave function.

Advanced

The DICOM standard defines the "Graphic Annotation Module" which describes the attributes of vector graphics and text annotations that shall be made available by a display device to be applied to an image. LEADTOOLS offers a number of functions to manipulate DICOM graphic and text annotations and the related attributes which are part of the "Grayscale Softcopy Presentation State" IOD.

LDicomDS::GetPresStateInfo and LDicomDS::SetPresStateInfo can be used to retrieve and update the values of the elements that describe the "Presentation State Module" respectively. The following functions can be used to mange the set of referenced images under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module":

LDicomDS::AddPresStateImageRefByFileName

LDicomDS::AddPresStateImageRefByDS

LDicomDS::RemovePresStateImageRefBySOPInstance

LDicomDS::RemoveAllPresStateImageRefs

LDicomDS::GetPresStateImageRefSOPInstance

LDicomDS::GetPresStateImageRefCount

LDicomDS::FindFirstPresStateRefSeriesItem

LDicomDS::FindNextPresStateRefSeriesItem

LDicomDS::GetPresStateImageRefBySOPInstance

LEADTOOLS also offers an extensive set of functions to manipulate the "Graphic Layer Module".

This Module defines the characteristics of the layers in which graphic annotations, text annotations, curves and overlays can be rendered. A new layer can be created by calling LDicomDS::CreateLayer, and named by calling LDicomDS::SetLayerName. . Once a layer has been created, you can call LDicomDS::GetLayerInfo and LDicomDS::SetLayerInfo to retrieve and update the values of the elements that describe the layer attributes respectively. A layer can be removed by calling either LDicomDS::RemoveLayerByIndex or LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers will remove all layers in the dataset. Some of the other functions which can be used to maintain layers are:

LDicomDS::GetLayerCount

LDicomDS::GetLayerIndex

LDicomDS::GetLayerGraphicObjectCount

LDicomDS::RemoveLayerGraphicObjects

LDicomDS::GetLayerTextObjectCount

LDicomDS::RemoveLayerTextObjects

LDicomDS::GetLayerElementByIndex

LDicomDS::GetLayerElementByName

A new graphic annotation object can be created by calling LDicomDS::CreateGraphicObject. Once a graphic object has been created, you can call LDicomDS::GetGraphicObjectInfo and LDicomDS::SetGraphicObjectInfo to retrieve and update the values of the elements that describe the object attributes respectively. Some of the other functions which can be used to manipulate graphic objects are:

LDicomDS::GetGraphicObjectCount

LDicomDS::RemoveAllGraphicObjects

LDicomDS::RemoveGraphicObject

LDicomDS::GetGraphicObjPointCount

LDicomDS::GetGraphicObjElement

A new text annotation object can be created by calling LDicomDS::CreateTextObject. Once a text object has been created, you can call LDicomDS::GetTextObjectInfo and LDicomDS::SetTextObjectInfo to retrieve and update the values of the elements that describe the object attributes respectively. Some of the other functions which can be used to manipulate text objects are:

LDicomDS::RemoveTextObject

LDicomDS::GetTextObjectCount

LDicomDS::RemoveAllTextObjects

LDicomDS::GetTextObjElement

The "Referenced Image Sequence" (0008,1140) under the "Graphic Annotation Module" is used to define the set of images (SOP instances) to which a group of graphic and text annotations applies. LEADTOOLS offers the following functions to manipulate the items under that sequence:

LDicomDS::AddLayerImageRef

LDicomDS::GetLayerImageRefCount

LDicomDS::GetLayerImageRefSOPInstance

LDicomDS::RemoveImageRefFromLayer

LDicomDS::RemoveAllImageRefsFromLayer

LDicomDS::RemoveAllImageRefFromAllLayers

LDicomDS::GetLayerImageRefElement

The items in the "Graphic Annotation Sequence" (0070,0001) under the "Graphic Annotation Module" can be manipulated with the following LEADTOOLS functions:

LDicomDS::CreateGraphicAnnSQItem

LDicomDS::FindFirstGraphicAnnSQItem

LDicomDS::FindNextGraphicAnnSQItem

LDicomDS::GetLayerName

LDicomDS::SetLayerName

To bring the DICOM annotation world into the LEADTOOLS annotation world, the toolkit offers a number of functions to convert from DICOM annotations into LEADTOOLS annotations and vise versa. LDicomDS::ConvertLEADAnnObjToDicomAnnObjs can be used to convert a LEADTOOLS annotation object into one or more DICOM annotation objects, and (optionally) add the new DICOM annotation object(s) into the dataset. For each resulting DICOM annotation object the LDicomDS::OnConvertLEADAnnObjToDicomAnnObj function will be called by the toolkit.

To convert from DICOM graphic or text annotations into LEADTOOLS annotations use LDicomDS::ConvertDicomAnnObjToLEADAnnObj.


Files To Be Included With Your Application

Note: You may not copy or redistribute any of the following files without obtaining the proper license. In some cases, the license is included with your initial purchase of LEADTOOLS. In other cases, you must obtain a license from a third party or enter into a royalty agreement with LEAD to obtain the proper license. For these special licensing situations, see the notes below accompanying the specific file.

Note: You may not distribute the header files with your application, and you may not provide software development capabilities in your application.

The following table summarizes the files you must include on your distribution diskettes to support the LEADTOOLS DICOM functions on a WIN32 system. (\REDIST\ subdirectory contains copies of these files.)

Please note that LTKRN and LTWVC are required for ALL Class Library applications. For more information on LTKRN, LTWVC, and other files for the Main Class Library, refer to Files To Be Included With Your Application .

Note: All Unicode versions of LEADTOOLS require Microsoft Unicode Layer for Windows (UNICOWS.DLL) in order to function on Windows 95/98/Me. You can obtain MSUL from: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_mslu.asp.

Redistributables: | Explanation: | If you are using a standard release, the files to use are: | If you are using an evaluation release, the files to use are:
LTDIC | DICOM Support (File format support, communication support). The header file is LTDIC.H. | DLL: LTDIC14N.DLL Library: LTDIC_N.LIB | DLL: LTDIC14E.DLL Library: LTDIC_E.LIB
LTCRY LTTLS | TLS secure communication support. The header files are LTCRY.H and LTTLS.H. | DLL: LTCRY14N.DLL LTTLS14N.DLL Library: LTCRY_N.LIB LTTLS_N.LIB | DLL: LTCRY14E.DLL LTTLS14E.DLL Library: LTCRY_E.LIB LTTLS_E.LIB
LTEAY | Digital Signatures Support. | DLL: LTEAY14N.DLL Library: LTEAY_N.LIB | DLL: LTEAY14E.DLL Library: LTEAY_E.LIB


Installation Directory

The installation procedure creates a directory tree for the LEADTOOLS files, and adds the demonstration programs and online help to your desktop. You specify the root directory during installation.

Please note that due to the large size of the PDF files that contain the LEADTOOLS manuals, these files are no longer included in the setup. Instead, these PDF files can be downloaded from our website at http://support.leadtools.com/SupportPortal/DesktopDefault.aspx?tabindex=3&tabid=27.

The following is a list of the subdirectories in the root directory:

BIN | Executable files for the demonstration programs.
HELP | Online help files.
IMAGES | Sample images and databases containing images.
EXAMPLES\DLL | One subdirectory for each example API program.
EXAMPLES\OCX | One subdirectory for each example ActiveX program.
EXAMPLES\CLASSLIB | One subdirectory for each example Class Library program.
EXAMPLES\RES | Resource files for the example programs.
INCLUDE | Header files, BAS files, and the ActiveX's MFC interface files for versions of Visual C++ earlier than 4.0.
INCLUDE\CLASSLIB | Header files for the Class Library
LIB | Library files.
REDIST | Redistributable files. These are copies of the LEADTOOLS files and other files that you may need to distribute with your application. For exact information about required files, refer to Files To Be Included With Your Application.
REDIST\NONAGLTKRN | This directory contains the LTKRN DLL that must be distributed with your application.


Summary of All Supported Image File Formats

Color and Grayscale

DICOM Format (DIC)


Formats of Input Files

This topic has been replaced. Refer to Summary of All Supported Image File Formats.


Formats of Output Files

This topic has been replaced. Refer to Summary of All Supported Image File Formats.


File Formats: DICOM Format (DIC)

DICOM Format (DIC)

Note:

This format is supported only in Document/Medical.

DICOM (DIC) files are commonly used in medical images. LEADTOOLS reads a broad range of DICOM formats, converting them to LEAD-supported bits-per-pixel as necessary. LEADTOOLS writes DICOM files in the LEAD-supported bits-per-pixel. DICOM files can contain many comment fields of varioius types. You can use the LFile::ReadComment function to read comments in an existing file. Before writing a file, you can use the LFileSettings::SetComment function to create an array of comments to be saved in the file.

You can read DICOM files as follows:

Grayscale files in the 1- to 16-bit range are loaded as they are in the original file.

Palettized color files in the 1- to 16-bit range are converted to 8-bit palettized or 24-bit unpalettized. By default, they are converted to 24-bit only if the palette contains more than 256 colors.

Unpalettized color files (RGB, ARGB, or CMYK) with 1 to 16 bits per plane are converted to 24-bit RGB.

Read multipage DICOM files by setting the page number in LOADFILEOPTION .

You can write DICOM files as 8, 12, or 16-bit grayscale, 8-bit palettized color, or 24-bit RGB color (8 bits per plane).

The file constants associated with this file format are:

Constant | Read Support | Write Support | Description
FILE_DICOM_GRAY | 1 to 16 BPP (Grayscale) | 1 to 16 BPP (Grayscale) | [89] Grayscale DICOM uncompressed.
FILE_DICOM_COLOR | 8, 24 BPP | 8, 24 BPP | [90] Color DICOM uncompressed.
FILE_DICOM_RLE_GRAY | xxxx | xxxx | [125] Grayscale DICOM RLE compressed.
FILE_DICOM_RLE_COLOR | xxxx | xxxx | [126] Color DICOM RLE compressed.
FILE_DICOM_JPEG_GRAY | 8, 16 BPP (Grayscale) | 8, 16 BPP (Grayscale) | [127] Grayscale DICOM JPEG compressed.
FILE_DICOM_JPEG_COLOR | 24 BPP | 24 BPP | [128] Color DICOM JPEG compressed.
FILE_DICOM_J2K_GRAY | 8, 16 BPP (Grayscale) | 8, 16 BPP (Grayscale) | [293] Grayscale DICOM JPEG 2000 compressed.
FILE_DICOM_J2K_COLOR | 24 BPP | 24 BPP | [294] Color DICOM JPEG 2000 compressed.

Required DLL: LTDIC. For a listing of the exact DLLs needed, based on the toolkit version, refer to Files To Be Included With Your Application.

Related Formats: EXIF - Exif Formats , JPG - JPEG Compressed , JP2 - JPEG 2000 Compressed , TIFF - Tagged Image File Format.


Classes

The following classes are provided by the LEADTOOLS DICOM Class Library:

LDicomAssociate

LDicomContextGroup

LDicomDir

LDicomDS

LDicomIOD

LDicomNet

LDicomPrintSCU

LDicomTag

LDicomUID

LDicomVR

LDicomWaveformChannel

LDicomWaveformGroup


LDicomAssociate

Description

This class provides the main functionality for dealing with DICOM Associate connections. It includes functions for creating and modifying DICOM Associate objects.

For more information, refer to Working with DICOM Associate Connections.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomAssociate::Class Members

Creating an Associate Connection

Setting a DICOM Associate Object

Getting Information About a DICOM Associate Object

Return to LDicomAssociate

Creating an Associate Connection

LDicomAssociate::LDicomAssociate

LDicomAssociate::Default

Setting a DICOM Associate Object

LDicomAssociate::Reset

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::AddPresentation

LDicomAssociate::DelPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::AddTransfer

LDicomAssociate::DelTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::AddUserInfo

LDicomAssociate::DelUserInfo

LDicomAssociate::SetExtended

Getting Information about a DICOM Associate Object

LDicomAssociate::IsRequest

LDicomAssociate::GetVersion

LDicomAssociate::GetCalled

LDicomAssociate::GetCalling

LDicomAssociate::GetApplication

LDicomAssociate::GetPresentationCount

LDicomAssociate::GetPresentation

LDicomAssociate::GetResult

LDicomAssociate::GetAbstract

LDicomAssociate::FindAbstract

LDicomAssociate::GetTransferCount

LDicomAssociate::GetTransfer

LDicomAssociate::IsMaxLength

LDicomAssociate::GetMaxLength

LDicomAssociate::IsImplementClass

LDicomAssociate::GetImplementClass

LDicomAssociate::GetInvokedOperations

LDicomAssociate::GetPerformedOperations

LDicomAssociate::GetUserRole

LDicomAssociate::GetProviderRole

LDicomAssociate::IsRoleSelect

LDicomAssociate::IsImplementVersion

LDicomAssociate::GetImplementVersion

LDicomAssociate::GetUserInfoCount

LDicomAssociate::GetTypeUserInfo

LDicomAssociate::GetLengthUserInfo

LDicomAssociate::GetDataUserInfo

LDicomAssociate::GetLengthExtended

LDicomAssociate::GetExtended


LDicomContextGroup

Description

The LDicomContextGroup class provides functionality for working with a table of Context Groups (the Context Group Table). The Context Groups defined by the DICOM Content Mapping Resource (DCMR), which is specified by PS 3.16 of the DICOM Standard, are maintained by LEADTOOLS in an internal table. The class offers functions that allow you to do the following:

Load the desired Context Groups from the internal table into the Context Group Table

Insert Context Groups and Coded Concepts to the Context Group Table

Maneuver through the Context Group Table

Search the Context Group Table for a specific Context Group or Coded Concept

Delete Context Groups and Coded Concepts from the Context Group Table

Modify the Code Meanings of Coded Concepts

Restore Context Groups

For more information, refer to Working with Context Groups.

All the members of the LDicomContextGroup class are static. Therefore, the functionality of the class can be used without instantiation. The following is an example:

pDICOMCONTEXTGROUP pGroup = LDicomContextGroup::Find(CID_3001);

Required Libraries

ltdic14n.dll

See Also

Elements: | Class Members
Topics: | Working with Context Groups


LDicomContextGroup::Class Members

Loading/Inserting and Deleting Context Groups

Maneuvering Through the Context Group Table

Searching the Context Group Table

Inserting and Deleting Coded Concepts

Modifying Coded Concepts

Restoring Context Groups

Miscellaneous

Return to LDicomContextGroup

Loading/Inserting and Deleting Context Groups

LDicomContextGroup::Load

LDicomContextGroup::Insert

LDicomContextGroup::Delete

LDicomContextGroup::Reset

Maneuvering Through the Context Group Table

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

LDicomContextGroup::GetCount

LDicomContextGroup::FindIndex

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

LDicomContextGroup::GetContextGroup

Searching the Context Group Table

LDicomContextGroup::Find

LDicomContextGroup::FindCodedConcept

Inserting and Deleting Coded Concepts

LDicomContextGroup::InsertCodedConcept

LDicomContextGroup::DeleteCodedConcept

Modifying Coded Concepts

LDicomContextGroup::SetCodeMeaning

Restoring Context Groups

LDicomContextGroup::Default

Miscellaneous

LDicomContextGroup::Exists

LDicomContextGroup::ExistsCodedConcept


LDicomDir

Description

The LDicomDir class is derived from LDicomDS and it streamlines the process of creating DICOM Directories for DICOM File-sets. For more information, refer to Creating DICOM Directories.

Required Libraries

ltdic14n.dll

See Also

Elements: | Class Members
Topics: | Dicom Directories


LDicomDir::Class Members

Constructing, Destructing, Loading and Saving DICOM Directories

Setting/Getting Options

Adding DICOM Files/Data Sets to DICOM Directories

Miscellaneous

Overridables

Return to LDicomDir

Constructing, Destructing, Loading and Saving DICOM Directories

LDicomDir::LDicomDir

LDicomDir::~LDicomDir

LDicomDir::LoadDS

LDicomDir::ResetDicomDir

LDicomDir::SaveDicomDir

Setting/Getting Options

LDicomDir::SetOptions

LDicomDir::GetOptions

Adding DICOM Files/Data Sets to DICOM Directories

LDicomDir::InsertDicomFile

LDicomDir::InsertDicomDS

Miscellaneous

LDicomDir::SetFileSetID

LDicomDir::SetDescriptorFile

Overridables

LDicomDir::OnInsertDicomFile


LDicomDS

Description

This class provides the main functionality for dealing with data sets. It includes functions for creating, initializing, loading and saving data sets. In addition, there are functions that allow you to do the following:

Manuever through a data set

Search a data set

Insert or delete data set members

Retrieve or set data element values

Get or set information about the entire data set.

Convert values.

For more information, refer to Working with Data Sets.

For information about available macros, refer to DICOM Macros.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomDS::Class Members

Creating, Initializing, Loading, and Saving Data Sets

Maneuvering Through a Data Set

Searching a Data Set

Inserting and Deleting Data Set Members

Getting Data Element Values

Setting Data Element Values

Getting and Setting Data Set Information

Converting Values

Maneuvering Through the DICOM Dir Data Set

Searching the DICOM Dir Data Set

Inserting and Deleting Key Elements

Getting the Type of an Existing Key Element

Annotation Files in Data Sets

Overlays

LUT Encoding

DICOM Annotations

Working with Time-based Waveforms

Data Sets/Digital Signatures

Return to LDicomDS

Creating, Initializing, Loading, and Saving Data Sets

LDicomDS::LDicomDS

LDicomDS::InitDS

LDicomDS::LoadDS

LDicomDS::LoadDSMemory

LDicomDS::SaveDS

Maneuvering Through a Data Set

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

Searching a Data Set

LDicomDS::FindModule

LDicomDS::FindIndexModule

LDicomDS::FindFirstElement

LDicomDS::FindLastElement

LDicomDS::FindPrevElement

LDicomDS::FindNextElement

Inserting and Deleting Data Set Members

LDicomDS::InsertElement

LDicomDS::InsertModule

LDicomDS::DeleteElement

LDicomDS::DeleteModule

LDicomDS::ResetDS

Getting Data Element Values

LDicomDS::FreeValue

LDicomDS::GetAgeValue

LDicomDS::GetBinaryValue

LDicomDS::GetCharValue

LDicomDS::GetCountValue

LDicomDS::GetDateTimeValue

LDicomDS::GetDateValue

LDicomDS::GetDoubleValue

LDicomDS::GetFloatValue

LDicomDS::GetImage

LDicomDS::GetImageList

LDicomDS::GetLongValue

LDicomDS::GetShortValue

LDicomDS::GetStringValue

LDicomDS::GetTimeValue

Setting Data Element Values

LDicomDS::DeleteImage

LDicomDS::InsertImage

LDicomDS::InsertImageList

LDicomDS::SetAgeValue

LDicomDS::SetBinaryValue

LDicomDS::SetImage

LDicomDS::SetImageList

LDicomDS::SetCharValue

LDicomDS::SetDateTimeValue

LDicomDS::SetDateValue

LDicomDS::SetDoubleValue

LDicomDS::SetFloatValue

LDicomDS::SetLongValue

LDicomDS::SetShortValue

LDicomDS::SetStringValue

LDicomDS::SetTimeValue

Getting and Setting Data Set Information

LDicomDS::ChangeTransferSyntax

LDicomDS::ConformanceDS

LDicomDS::ExistsElement

LDicomDS::GetCountImage

LDicomDS::GetCountModule

LDicomDS::GetDefaultJ2KOptions

LDicomDS::GetJ2KOptions

LDicomDS::GetKeepPixelDataIntactFlag

LDicomDS::GetLevelElement

LDicomDS::GetPreamble

LDicomDS::IsVolatileElement

LDicomDS::SetJ2KOptions

LDicomDS::SetKeepPixelDataIntactFlag

LDicomDS::SetPreamble

Converting Values

LDicomDS::GetConvertValue

LDicomDS::SetConvertValue

Maneuvering Through the DICOM Dir Data Set

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetPrevKey

LDicomDS::GetNextKey

Searching the DICOM Dir Data Set

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindPrevKey

LDicomDS::FindNextKey

Inserting and Deleting Key Elements

LDicomDS::InsertKey

LDicomDS::DeleteKey

Getting the Type of an Existing Key Element

LDicomDS::GetValueKey

Annotation Files in Data Sets

LDicomDS:AnnCount

LDicomDS::AnnDelete

LDicomDS::AnnLoad

LDicomDS::AnnSave

Overlays

LDicomDS::GetOverlayAttributes

LDicomDS::GetOverlayActivationLayer

LDicomDS::GetOverlayBitmap

LDicomDS::GetOverlayBitmapList

LDicomDS::GetOverlayCount

LDicomDS::SetOverlayAttributes

LDicomDS::SetOverlayBitmap

LDicomDS::SetOverlayBitmapList

LDicomDS::DeleteOverlay

LUT Encoding

LDicomDS::GetModalityLUTAttributes

LDicomDS::GetModalityLUTData

LDicomDS::DeleteModalityLUT

LDicomDS::SetModalityLUT

LDicomDS::GetPaletteColorLUTAttributes

LDicomDS::SetPaletteColorLUTAttributes

LDicomDS::GetPaletteColorLUTData

LDicomDS::SetPaletteColorLUTData

LDicomDS::DeletePaletteColorLUT

LDicomDS::GetWindowCount

LDicomDS::GetVOILUTCount

LDicomDS::GetWindow

LDicomDS::SetWindow

LDicomDS::DeleteWindow

LDicomDS::GetVOILUT

LDicomDS::SetVOILUT

LDicomDS::GetVOILUTData

LDicomDS::DeleteVOILUT

DICOM Annotations

LDicomDS::AddLayerImageRef

LDicomDS::AddPresStateImageRefByDS

LDicomDS::AddPresStateImageRefByFileName

LDicomDS::ConvertDicomAnnObjToLEADAnnObj

LDicomDS::ConvertLEADAnnObjToDicomAnnObjs

LDicomDS::CreateGraphicAnnSQItem

LDicomDS::CreateGraphicObject

LDicomDS::CreateLayer

LDicomDS::CreateTextObject

LDicomDS::FindFirstGraphicAnnSQItem

LDicomDS::FindFirstPresStateRefSeriesItem

LDicomDS::FindNextGraphicAnnSQItem

LDicomDS::FindNextPresStateRefSeriesItem

LDicomDS::GetGraphicObjectCount

LDicomDS::GetGraphicObjectInfo

LDicomDS::GetGraphicObjElement

LDicomDS::GetGraphicObjPointCount

LDicomDS::GetLayerCount

LDicomDS::GetLayerElementByIndex

LDicomDS::GetLayerElementByName

LDicomDS::GetLayerGraphicObjectCount

LDicomDS::GetLayerImageRefCount

LDicomDS::GetLayerImageRefElement

LDicomDS::GetLayerImageRefSOPInstance

LDicomDS::GetLayerIndex

LDicomDS::GetLayerInfo

LDicomDS::GetLayerName

LDicomDS::GetLayerTextObjectCount

LDicomDS::GetPresStateImageRefBySOPInstance

LDicomDS::GetPresStateImageRefCount

LDicomDS::GetPresStateImageRefSOPInstance

LDicomDS::GetPresStateInfo

LDicomDS::GetTextObjectCount

LDicomDS::GetTextObjectInfo

LDicomDS::GetTextObjElement

LDicomDS::OnConvertLEADAnnObjToDicomAnnObj

LDicomDS::RemoveAllGraphicObjects

LDicomDS::RemoveAllImageRefFromAllLayers

LDicomDS::RemoveAllImageRefsFromLayer

LDicomDS::RemoveAllLayers

LDicomDS::RemoveAllPresStateImageRefs

LDicomDS::RemoveAllTextObjects

LDicomDS::RemoveGraphicObject

LDicomDS::RemoveImageRefFromLayer

LDicomDS::RemoveLayerByIndex

LDicomDS::RemoveLayerByName

LDicomDS::RemoveLayerGraphicObjects

LDicomDS::RemoveLayerTextObjects

LDicomDS::RemovePresStateImageRefBySOPInstance

LDicomDS::RemoveTextObject

LDicomDS::SetGraphicObjectInfo

LDicomDS::SetLayerInfo

LDicomDS::SetLayerName

LDicomDS::SetPresStateInfo

LDicomDS::SetTextObjectInfo

Working with Time-based Waveforms

LDicomDS::AddWaveformGroup

LDicomDS::DeleteWaveformGroup

LDicomDS::GetWaveformGroup

LDicomDS::GetWaveformGroupCount

Data Sets/Digital Signatures

LDicomDS::CreateSignature

LDicomDS::DeleteSignature

LDicomDS::FindSignature

LDicomDS::GetMacAlgorithm

LDicomDS::GetMacTransferSyntax

LDicomDS::GetSignature

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignaturesCount

LDicomDS::GetSignatureUID

LDicomDS::GetSignedElement

LDicomDS::GetSignedElementsCount

LDicomDS::SaveCertificate

LDicomDS::VerifySignature


LDicomIOD

Description

The LDicomIOD class contains functionality for working with the tree (IOD Table) of available Information Object Definitions (IODs) that LEADTOOLS maintains internally. This class provides functions that allow you to do the following:

Manuever through the IOD Table.

Search the IOD Table.

Insert items to or delete items from the IOD Table.

Modify existing items within the IOD Table.

Set the IOD Table to its default values.

For more information, refer to Working with Information Object Definitions (IODs).

You may find it useful to call the static member functions of this class directly, as (ClassName::Function), without declaring an object. For example, the following is valid, and will compile:

pModule = LDicomIOD::FindModule(CLASS_US_IMAGE, MODULE_GENERAL_STUDY);

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomIOD::Class Members

Maneuvering Through the IOD Table

Searching the IOD Table

Inserting and Deleting IODs

Modifying an Existing IOD

Setting the Default IOD Table

Miscellaneous

Return to LDicomIOD

Maneuvering Through the IOD Table

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetPrev

LDicomIOD::GetNext

LDicomIOD::GetCountModule

Searching the IOD Table

LDicomIOD::FindClass

LDicomIOD::FindModule

LDicomIOD::Find

LDicomIOD::FindIndexModule

Inserting and Deleting IODs

LDicomIOD::Insert

LDicomIOD::Delete

LDicomIOD::Reset

Modifying an Existing IOD

LDicomIOD::SetDescription

LDicomIOD::SetName

Setting the Default IOD Table

LDicomIOD::Default

Miscellaneous

LDicomIOD::Exists


LDicomNet

Description

This class provides the main functionality for dealing with DICOM Network connections. It includes functions for creating and establishing DICOM Network connections and passing messages across established connections.

For more information, refer to Working with DICOM Network Connections.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomNet::Class Members

Creating a Network Connection

Closing a Network Connection

DICOM Associate Connection Messages

Sending Data Messages

Getting Information About a Network Connection

ISCL Security

TLS Security

Return to LDicomNet

Creating a Network Connection

LDicomNet::LDicomNet

LDicomNet::StartUp

LDicomNet::Connect

LDicomNet::Listen

LDicomNet::Accept

LDicomNet::OnAccept

LDicomNet::OnConnect

Closing a Network Connection

LDicomNet::~LDicomNet

LDicomNet::ShutDown

LDicomNet::Close

LDicomNet::OnClose

DICOM Associate Connection Messages

LDicomNet::GetAssociate

LDicomNet::SendAssociateRequest

LDicomNet::SendAssociateAccept

LDicomNet::SendAssociateReject

LDicomNet::SendData

LDicomNet::SendReleaseRequest

LDicomNet::SendReleaseResponse

LDicomNet::SendAbort

LDicomNet::OnReceiveAssociateRequest

LDicomNet::OnReceiveAssociateAccept

LDicomNet::OnReceiveAssociateReject

LDicomNet::OnReceiveReleaseRequest

LDicomNet::OnReceiveReleaseResponse

LDicomNet::OnReceiveAbort

LDicomNet::OnSend

Sending Data Messages

LDicomNet::SendCStoreRequest

LDicomNet::SendCStoreResponse

LDicomNet::SendCFindRequest

LDicomNet::SendCFindResponse

LDicomNet::SendCGetRequest

LDicomNet::SendCGetResponse

LDicomNet::SendCMoveRequest

LDicomNet::SendCMoveResponse

LDicomNet::SendCCancelRequest

LDicomNet::SendCEchoRequest

LDicomNet::SendCEchoResponse

LDicomNet::SendNReportRequest

LDicomNet::SendNReportResponse

LDicomNet::SendNGetRequest

LDicomNet::SendNGetResponse

LDicomNet::SendNSetRequest

LDicomNet::SendNSetResponse

LDicomNet::SendNActionRequest

LDicomNet::SendNActionResponse

LDicomNet::SendNCreateRequest

LDicomNet::SendNCreateResponse

LDicomNet::SendNDeleteRequest

LDicomNet::SendNDeleteResponse

LDicomNet::OnReceiveCStoreRequest

LDicomNet::OnReceiveCStoreResponse

LDicomNet::OnReceiveCFindRequest

LDicomNet::OnReceiveCFindResponse

LDicomNet::OnReceiveCGetRequest

LDicomNet::OnReceiveCGetResponse

LDicomNet::OnReceiveCMoveRequest

LDicomNet::OnReceiveCMoveResponse

LDicomNet::OnReceiveCCancelRequest

LDicomNet::OnReceiveCEchoRequest

LDicomNet::OnReceiveCEchoResponse

LDicomNet::OnReceiveNReportRequest

LDicomNet::OnReceiveNReportResponse

LDicomNet::OnReceiveNGetRequest

LDicomNet::OnReceiveNGetResponse

LDicomNet::OnReceiveNSetRequest

LDicomNet::OnReceiveNSetResponse

LDicomNet::OnReceivenactionRequest

LDicomNet::OnReceiveNActionResponse

LDicomNet::OnReceiveNCreateRequest

LDicomNet::OnReceiveNCreateResponse

LDicomNet::OnReceiveNDeleteRequest

LDicomNet::OnReceiveNDeleteResponse

LDicomNet::OnReceiveUnknown

Getting Information About a Network Connection

LDicomNet::IsActivated

LDicomNet::IsAssociated

LDicomNet::IsConnected

LDicomNet::GetQueueSend

LDicomNet::GetServer

LDicomNet::GetClient

LDicomNet::GetClientCount

LDicomNet::GetHostInfo

LDicomNet::GetPeerInfo

LDicomNet::GetAssociate

ISCL Security

LDicomNet::SetDefaultEncryptionISCL

LDicomNet::SetDefaultSigningISCL

LDicomNet::GetPeerEncryptionISCL

LDicomNet::GetPeerMACISCL

LDicomNet::SetAuthDataISCL

LDicomNet::GetPeerAuthDataISCL

LDicomNet::SetMaxCommBlockLengthISCL

LDicomNet::GetCommBlockLengthISCL

LDicomNet::SetMaxMessageLengthISCL

LDicomNet::SetMutualAuthAlgISCL

LDicomNet::SetMutualAuthKeyISCL

LDicomNet::SetIndexForMutualAuthISCL

LDicomNet::SetEncryptKeyISCL

LDicomNet::SetIndexForEncryptISCL

LDicomNet::SendNonSecureISCL

LDicomNet::CloseForced

LDicomNet::IsISCLQueueEmpty

LDicomNet::GetErrorSecure

LDicomNet::GetIndexForMutualAuthISCL

LDicomNet::GetIndexForEncryptISCL

LDicomNet::GetPeerRequestedMessageLengthISCL

LDicomNet::GetStatusISCL

LDicomNet::GetChallengeISCL

LDicomNet::InternalAuthenticateISCL

LDicomNet::ExternalAuthenticateISCL

LDicomNet::OnNonSecureReceivedISCL

LDicomNet::OnNonSecureSendISCL

LDicomNet::OnSecureLinkReady

TLS Security

LDicomNet::GetCipherFromIndexTLS

LDicomNet::SetCipherToIndexTLS

LDicomNet::GetCiphersuiteTLS

LDicomNet::GetEncryptionAlgorithmTLS

LDicomNet::GetErrorSecure

LDicomNet::GetAuthenticationAlgorithmTLS

LDicomNet::GetIntegrityAlgorithmTLS

LDicomNet::GetKeyExchangeAlgorithmTLS

LDicomNet::GetEncryptKeyLengthTLS

LDicomNet::GetMutualAuthKeyLengthTLS

LDicomNet::Initialize

LDicomNet::SetClientCertificateTLS

LDicomNet::SetServerCertificateTLS

LDicomNet::OnPrivateKeyPassword

LDicomNet::OnSecureLinkReady


LDicomPrintSCU

Description

The LDicomPrintSCU class uses the capabilities of its base class LDicomNet to implement a Print Management Service Class User (SCU). All the SOP/Meta SOP Classes defined by the Print Management Service Class are supported.

For more information, refer to Print Management SCU.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomPrintSCU::Class Members

Construction and Destruction

Establishing the Association

Handling Film Sessions

Handling Film Boxes

Handling Image Boxes

Performing Pull Stored Print Management

Printer Related Functions

Handling Annotation Boxes

Print Jobs Related Functions

Handling Image Overlay Boxes

Handling Presentation LUTs

LDicomPrintSCU Data Members

Miscellaneous

Return to LDicomPrintSCU

Construction and Destruction

LDicomPrintSCU::LDicomPrintSCU

LDicomPrintSCU::~LDicomPrintSCU

Establishing the Association

LDicomPrintSCU::Associate

LDicomPrintSCU::GetAssociateRejectInfo

LDicomPrintSCU::IsClassSupported

LDicomPrintSCU::Release

LDicomPrintSCU::GetAbortInfo

Handling Film Sessions

LDicomPrintSCU::CreateFilmSession

LDicomPrintSCU::GetFilmSessionInstanceUID

LDicomPrintSCU::UpdateFilmSession

LDicomPrintSCU::PrintFilmSession

LDicomPrintSCU::DeleteFilmSession

LDicomPrintSCU::GetDefaultFilmSessionParameters

Handling Film Boxes

LDicomPrintSCU::CreateFilmBox

LDicomPrintSCU::GetFilmBoxInstanceUID

LDicomPrintSCU::UpdateFilmBox

LDicomPrintSCU::PrintFilmBox

LDicomPrintSCU::DeleteFilmBox

LDicomPrintSCU::GetDefaultFilmBoxParameters

Handling Image Boxes

LDicomPrintSCU::GetImageBoxesCount

LDicomPrintSCU::GetImageBoxInstanceUID

LDicomPrintSCU::UpdateImageBox

LDicomPrintSCU::GetDefaultImageBoxParameters

LDicomPrintSCU::FreeImageBoxesInstanceUIDs

Performing Pull Stored Print Management

LDicomPrintSCU::CreatePullPrintRequest

LDicomPrintSCU::GetPullPrintRequestInstanceUID

LDicomPrintSCU::PrintPullPrintRequestSession

LDicomPrintSCU::DeletePullPrintRequest

LDicomPrintSCU::GetDefaultPullPrintRequestParameters

Printer Related Functions

LDicomPrintSCU::OnPrinterReport

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrinterConfiguration

Handling Annotation Boxes

LDicomPrintSCU::GetAnnotationBoxesCount

LDicomPrintSCU::GetAnnotationBoxInstanceUID

LDicomPrintSCU::UpdateAnnotationBox

LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

Print Jobs Related Functions

LDicomPrintSCU::GetPrintJobInstanceUID

LDicomPrintSCU::OnPrintJobReport

LDicomPrintSCU::GetPrintJobInfo

Handling Image Overlay Boxes

LDicomPrintSCU::CreateOverlayBox

LDicomPrintSCU::GetOverlayBoxInstanceUID

LDicomPrintSCU::UpdateOverlayBox

LDicomPrintSCU::DeleteOverlayBox

LDicomPrintSCU::GetDefaultOverlayBoxParameters

Handling Presentation LUTs

LDicomPrintSCU::CreatePresentationLUT

LDicomPrintSCU::GetPresentationLUTInstanceUID

LDicomPrintSCU::DeletePresentationLUT

LDicomPrintSCU Data Members

LDicomPrintSCU::m_PrinterConfiguration

Miscellaneous

LDicomPrintSCU::SetTimeout

LDicomPrintSCU::OnStatus

LDicomPrintSCU::GetLastOperationStatus


LDicomTag

Description

The LDicomTag class contains functionality for working with the table, or list (Data Element Tag Table) of available Data Element Tags that LEADTOOLS maintains internally. This class provides functions that allow you to do the following:

Manuever through the Data Element Tag Table.

Search the Data Element Tag Table.

Insert items to or delete items from the Data Element Tag Table.

Modify existing items within the Data Element Tag Table.

Set the Data Element Tag Table to its default values.

For more information, refer to Working with Tags.

For information about available macros, refer to DICOM Macros.

You may find it useful to call the static member functions of this class directly, as (ClassName::Function), without declaring an object. For example, the following is valid, and will compile:

nCount = LDicomTag::GetCount();

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomTag::Class Members

Maneuvering Through the Data Element Tag Table

Searching the Data Element Tag Table

Inserting and Deleting Tags

Modifying an Existing Tag

Setting the Default Data Element Tag Table

Miscellaneous

Return to LDicomTag

Maneuvering Through the Data Element Tag Table

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetPrev

LDicomTag::GetNext

LDicomTag::GetCount

Searching the Data Element Tag Table

LDicomTag::Find

LDicomTag::FindIndex

Inserting and Deleting Tags

LDicomTag::Insert

LDicomTag::Delete

LDicomTag::Reset

Modifying an Existing Tag

LDicomTag::SetName

Setting the Default Data Element Tag Table

LDicomTag::Default

Miscellaneous

LDicomTag::Exists


LDicomUID

Description

The LDicomUID class contains functionality for working with the table, or list (UID Table) of available Unique Identifiers that LEADTOOLS maintains internally. This class provides functions that allow you to do the following:

Manuever through the UID Table.

Search the UID Table.

Insert items to or delete items from the UID Table.

Modify existing items within the UID Table.

Set the UID Table to its default values.

For more information, refer to Working with Unique Identifiers.

You may find it useful to call the static member functions of this class directly, as (ClassName::Function), without declaring an object. For example, the following is valid, and will compile:

pUID = LDicomUID::GetFirst();

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomUID::Class Members

Maneuvering Through the UID Table

Searching the UID Table

Inserting and Deleting UIDs

Modifying an Existing UID

Setting the Default UID Table

Miscellaneous

Return to LDicomUID

Maneuvering Through the UID Table

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetPrev

LDicomUID::GetNext

LDicomUID::GetCount

Searching the UID Table

LDicomUID::Find

LDicomUID::FindIndex

Inserting and Deleting UIDs

LDicomUID::Insert

LDicomUID::Delete

LDicomUID::Reset

Modifying an Existing UID

LDicomUID::SetName

Setting the Default UID Table

LDicomUID::Default

Miscellaneous

LDicomUID::Exists


LDicomVR

Description

The LDicomVR class contains functionality for working with the table, or list (Value Representation Table) of available Value Representations that LEADTOOLS maintains internally. This class provides functions that allow you to do the following:

Manuever through the Value Representation Table.

Search the Value Representation Table.

Insert items to or delete items from the Value Representation Table.

Modify existing items within the Value Representation Table.

Set the Value Representation Table to its default values.

For more information, refer to Working with Value Representations.

You may find it useful to call the static member functions of this class directly, as (ClassName::Function), without declaring an object. For example, the following is valid, and will compile:

LDicomVR::Insert(0x5858, "New XXX VR", 16, VR_STRING | VR_MAXIMUM, 1);

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomVR::Class Members

Maneuvering Through the VR Table

Searching the VR Table

Inserting and Deleting VRs

Modifying an Existing VR

Setting the Default VR Table

Miscellaneous

Return to LDicomVR

Maneuvering Through the VR Table

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetPrev

LDicomVR::GetNext

LDicomVR::GetCount

Searching the VR Table

LDicomVR::Find

LDicomVR::FindIndex

Inserting and Deleting VRs

LDicomVR::Insert

LDicomVR::Delete

LDicomVR::Reset

Modifying an Existing VR

LDicomVR::SetName

Setting the Default VR Table

LDicomVR::Default

Miscellaneous

LDicomVR::Exists


LDicomWaveformChannel

Description

The LDicomWaveformChannel class provides functions to create and manipulate waveform channels. For more information, refer to Working with DICOM Waveforms.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomWaveformChannel::Class Members

Constructing, Destructing

Setting/Getting Channel Samples

Setting/Getting Channel Source

Setting/Getting Channel Sensitivity

Setting/Getting Other Channel Attributes

Adding/Managing Waveform Annotations

Miscellaneous

Return to LDicomWaveformChannel

Constructing, Destructing

LDicomWaveformChannel::LDicomWaveformChannel

LDicomWaveformChannel::~LDicomWaveformChannel

Setting/Getting Channel Samples

LDicomWaveformChannel::SetChannelSamples8

LDicomWaveformChannel::SetChannelSamples16

LDicomWaveformChannel::SetChannelSamples32

LDicomWaveformChannel::GetChannelSamples

Setting/Getting Channel Source

LDicomWaveformChannel::SetChannelSource

LDicomWaveformChannel::GetChannelSource

Setting/Getting Channel Sensitivity

LDicomWaveformChannel::SetChannelSensitivity

LDicomWaveformChannel::GetChannelSensitivity

Setting/Getting Other Channel Attributes

LDicomWaveformChannel::SetChannelStatus

LDicomWaveformChannel::GetChannelStatus

LDicomWaveformChannel::SetChannelTimeSkew

LDicomWaveformChannel::GetChannelTimeSkew

LDicomWaveformChannel::SetChannelSampleSkew

LDicomWaveformChannel::GetChannelSampleSkew

LDicomWaveformChannel::SetWaveformChannelNumber

LDicomWaveformChannel::GetWaveformChannelNumber

LDicomWaveformChannel::SetChannelLabel

LDicomWaveformChannel::GetChannelLabel

LDicomWaveformChannel::SetChannelOffset

LDicomWaveformChannel::GetChannelOffset

LDicomWaveformChannel::SetFilterLowFrequency

LDicomWaveformChannel::GetFilterLowFrequency

LDicomWaveformChannel::SetFilterHighFrequency

LDicomWaveformChannel::GetFilterHighFrequency

LDicomWaveformChannel::SetNotchFilterFrequency

LDicomWaveformChannel::GetNotchFilterFrequency

LDicomWaveformChannel::SetNotchFilterBandwidth

LDicomWaveformChannel::GetNotchFilterBandwidth

LDicomWaveformChannel::SetChannelMinimumValue

LDicomWaveformChannel::GetChannelMinimumValue

LDicomWaveformChannel::SetChannelMaximumValue

LDicomWaveformChannel::GetChannelMaximumValue

Adding/Managing Waveform Annotations

LDicomWaveformChannel::GetAnnotationCount

LDicomWaveformChannel::GetAnnotation

LDicomWaveformChannel::AddAnnotation

LDicomWaveformChannel::DeleteAnnotation

Miscellaneous

LDicomWaveformChannel::GetWaveformGroup

LDicomWaveformChannel::GetIndex


LDicomWaveformGroup

Description

The LDicomWaveformGroup class provides functions to create and manipulate waveform groups. For more information, refer to Working with DICOM Waveforms.

Required Libraries

ltdic14n.dll

See Also

Class Members


LDicomWaveformGroup::Class Members

Constructing, Destructing and Resetting

Manipulating Channels

Setting/Getting Attributes

Audio Support

Return to LDicomWaveformGroup

Constructing, Destructing and Resetting

LDicomWaveformGroup::LDicomWaveformGroup

LDicomWaveformGroup::~LdicomWaveformGroup

LDicomWaveformGroup::Reset

Manipulating Channels

LDicomWaveformGroup::GetNumberOfChannels

LDicomWaveformGroup::GetChannel

LDicomWaveformGroup::AddChannel

LDicomWaveformGroup::DeleteChannel

LDicomWaveformGroup::SetNumberOfSamplesPerChannel

LDicomWaveformGroup::GetNumberOfSamplesPerChannel

Setting/Getting Attributes

LDicomWaveformGroup::SetSamplingFrequency

LDicomWaveformGroup::GetSamplingFrequency

LDicomWaveformGroup::SetSampleInterpretation

LDicomWaveformGroup::GetSampleInterpretation

LDicomWaveformGroup::SetMultiplexGroupTimeOffset

LDicomWaveformGroup::GetMultiplexGroupTimeOffset

LDicomWaveformGroup::SetTriggerTimeOffset

LDicomWaveformGroup::GetTriggerTimeOffset

LDicomWaveformGroup::SetTriggerSamplePosition

LDicomWaveformGroup::GetTriggerSamplePosition

LDicomWaveformGroup::SetWaveformOriginality

LDicomWaveformGroup::GetWaveformOriginality

LDicomWaveformGroup::SetMultiplexGroupLabel

LDicomWaveformGroup::GetMultiplexGroupLabel

LDicomWaveformGroup::SetWaveformPaddingValue

LDicomWaveformGroup::GetWaveformPaddingValue

Audio Support

LDicomWaveformGroup::LoadAudio

LDicomWaveformGroup::SaveAudio


Technical Support

As a registered user, free technical support is available. You must register your software to receive any technical support. Technical support is available 9 a.m. through 6 p.m. Eastern Standard Time. If you are calling by phone, please be at your computer. You can also contact us through the following methods:

Phone: | (704) 372-9681
E-mail: | support@leadtools.com
FAX: | (704) 372-8161
Online Support / FAQs | http://www.leadtools.com (click on Customers Only)
Home page: | http://www.leadtools.com
FTP: | ftp.leadtools.com

You can also contact LEAD by mail at:

LEAD Technologies, Inc.
Attn: Technical Support
Suite 400
1201 Greenwood Cliff
Charlotte, NC 28204

Before calling technical support, please look in the online documentation and the example programs for an answer to your question.


DICOM Class Library Function Groups

Data Sets

Information Object Definitions

Data Element Tags

Unique Identifiers

Value Representations

DICOM Directories

DICOM Network Connections

DICOM Associate Connections

LUT Encoding

Overlays

DICOM Print Service Class User: Functions

DICOM Waveform Channels

DICOM Waveform Groups

DICOM Context Groups


Data Sets

Creating, Initializing, Loading, and Saving Data Sets

Maneuvering Through a Data Set

Searching a Data Set

Inserting and Deleting Data Set Members

Getting Data Element Values

Setting Data Element Values

Getting and Setting Data Set Information

Converting Values

Annotation Files in Data Sets

Digital Signatures


Data Sets: Creating, Initializing, Loading, and Saving Data Sets

Data Sets:
Creating, Initializing, Loading, and Saving Data Sets

LDicomDS::LDicomDS

LDicomDS::InitDS

LDicomDS::LoadDS

LDicomDS::LoadDSMemory

LDicomDS::SaveDS

LDicomDS::InitCS


Data Sets: Maneuvering Through a Data Set

Data Sets:
Maneuvering Through a Data Set

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

LDicomDS::ExistsElement


Data Sets: Searching a Data Set

Data Sets:
Searching a Data Set

LDicomDS::FindModule

LDicomDS::FindIndexModule

LDicomDS::FindFirstElement

LDicomDS::FindLastElement

LDicomDS::FindPrevElement

LDicomDS::FindNextElement

LDicomDS::ExistsElement


Data Sets: Inserting and Deleting Data Set Members

Data Sets:
Inserting and Deleting Data Set Members

Inserting Data Set Members:

LDicomDS::CopyDS

LDicomDS::InsertElement

LDicomDS::InsertModule

Deleting Data Set Members:

LDicomDS::DeleteElement

LDicomDS::DeleteModule

LDicomDS::ResetDS

LDicomDS::ExistsElement


Data Sets: Getting Data Element Values

Data Sets:
Getting Data Element Values

LDicomDS::FreeValue

LDicomDS::GetAgeValue

LDicomDS::GetBinaryValue

LDicomDS::GetCharValue

LDicomDS::GetCountValue

LDicomDS::GetDateTimeValue

LDicomDS::GetDateValue

LDicomDS::GetDoubleValue

LDicomDS::GetFloatValue

LDicomDS::GetImage

LDicomDS::GetImageList

LDicomDS::GetLongValue

LDicomDS::GetShortValue

LDicomDS::GetStringValue

LDicomDS::GetTimeValue


Data Sets: Setting Data Element Values

Data Sets:
Setting Data Element Values

LDicomDS::InsertImage

LDicomDS::InsertImageList

LDicomDS::SetAgeValue

LDicomDS::SetBinaryValue

LDicomDS::SetCharValue

LDicomDS::SetDateTimeValue

LDicomDS::SetDateValue

LDicomDS::SetDoubleValue

LDicomDS::SetFloatValue

LDicomDS::SetImage

LDicomDS::SetImageList

LDicomDS::SetLongValue

LDicomDS::SetShortValue

LDicomDS::SetStringValue

LDicomDS::SetTimeValue


Data Sets: Getting and Setting Data Set Information

Data Sets:
Getting and Setting Data Set Information

Getting information:

LDicomDS::ConformanceDS

LDicomDS::GetCountImage

LDicomDS::GetCountModule

LDicomDS::GetDefaultJ2KOptions

LDicomDS::GetInfoCS

LDicomDS::GetInfoImage

LDicomDS::GetJ2KOptions

LDicomDS::GetKeepPixelDataIntactFlag

LDicomDS::GetLevelElement

LDicomDS::GetPreamble

LDicomDS::IsVolatileElement

Setting information:

LDicomDS::ChangeTransferSyntax

LDicomDS::SetDebugDS

LDicomDS::SetJ2KOptions

LDicomDS::SetKeepPixelDataIntactFlag

LDicomDS::SetPreamble


Data Sets: Converting Values

Data Sets:
Converting Values

LDicomDS::GetConvertValue

LDicomDS::SetConvertValue


Data Sets: Annotation Files in Data Sets

Data Sets:
Annotation Files in Data Sets

LDicomDS::AnnCount

LDicomDS::AnnDelete

LDicomDS::AnnLoad

LDicomDS::AnnSave


Data Sets: Digital Signatures

Data Sets:
Digital Signatures

LDicomDS::CreateSignature

LDicomDS::DeleteSignature

LDicomDS::FindSignature

LDicomDS::GetMacAlgorithm

LDicomDS::GetMacTransferSyntax

LDicomDS::GetSignature

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignaturesCount

LDicomDS::GetSignatureUID

LDicomDS::GetSignedElement

LDicomDS::GetSignedElementsCount

LDicomDS::SaveCertificate

LDicomDS::VerifySignature


Information Object Definitions

Maneuvering Through the IOD Table

Searching the IOD Table

Inserting and Deleting IODs

Modifying an Existing IOD

Setting the Default IOD Table


Information Object Definitions: Maneuvering Through the IOD Table

Information Object Definitions:
Maneuvering Through the IOD Table

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetPrev

LDicomIOD::GetNext

LDicomIOD::GetCountModule

LDicomIOD::Exists


Information Object Definitions: Searching the IOD Table

Information Object Definitions:
Searching the IOD Table

LDicomIOD::FindClass

LDicomIOD::FindModule

LDicomIOD::Find

LDicomIOD::FindIndexModule

LDicomIOD::Exists


Information Object Definitions: Inserting and Deleting IODs

Information Object Definitions:
Inserting and Deleting IODs

Inserting IODs:

LDicomIOD::Insert

Deleting IODs:

LDicomIOD::Delete

LDicomIOD::Reset

LDicomIOD::Exists


Information Object Definitions: Modifying an Existing IOD

Information Object Definitions:
Modifying an Existing IOD

LDicomIOD::SetDescription

LDicomIOD::SetName

LDicomIOD::Exists


Information Object Definitions: Setting the Default IOD Table

Information Object Definitions:
Setting the Default IOD Table

LDicomIOD::Default


Data Element Tags

Maneuvering Through the Data Element Tag Table

Searching the Data Element Tag Table

Inserting and Deleting Tags

Modifying an Existing Tag

Setting the Default Data Element Tag Table


Data Element Tags: Maneuvering Through the Data Element Tag Table

Data Element Tags:
Maneuvering Through the Data Element Tag Table

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetPrev

LDicomTag::GetNext

LDicomTag::GetCount

LDicomTag::Exists


Data Element Tags: Searching the Data Element Tag Table

Data Element Tags:
Searching the Data Element Tag Table

LDicomTag::Find

LDicomTag::FindIndex

LDicomTag::Exists


Data Element Tags: Inserting and Deleting Data Element Tags

Data Element Tags:
Inserting and Deleting Data Element Tags

Inserting Data Element Tags:

LDicomTag::Insert

Deleting Data Element Tags:

LDicomTag::Delete

LDicomTag::Reset

LDicomTag::Exists


Data Element Tags: Modifying an Existing Data Element Tag

Data Element Tags:
Modifying an Existing Data Element Tag

LDicomTag::SetName

LDicomTag::Exists


Data Element Tags: Setting the Default Data Element Tag Table

Data Element Tags:
Setting the Default Data Element Tag Table

LDicomTag::Default


Unique Identifiers

Maneuvering Through the UID Table

Searching the UID Table

Inserting and Deleting UIDs

Modifying an Existing UID

Setting the Default UID Table


Unique Identifiers: Maneuvering Through the UID Table

Unique Identifiers:
Maneuvering Through the UID Table

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetPrev

LDicomUID::GetNext

LDicomUID::GetCount

LDicomUID::Exists


Unique Identifiers: Searching the UID Table

Unique Identifiers:
Searching the UID Table

LDicomUID::Find

LDicomUID::FindIndex

LDicomUID::Exists


Unique Identifiers: Inserting and Deleting UIDs

Unique Identifiers:
Inserting and Deleting UIDs

Inserting UIDs:

LDicomUID::Insert

Deleting UIDs:

LDicomUID::Delete

LDicomUID::Reset

LDicomUID::Exists


Unique Identifiers: Modifying an Existing UID

Unique Identifiers:
Modifying an Existing UID

LDicomUID::SetName

LDicomUID::Exists


Unique Identifiers: Setting the Default UID Table

Unique Identifiers:
Setting the Default UID Table

LDicomUID::Default


Value Representations

Maneuvering Through the VR Table

Searching the VR Table

Inserting and Deleting VRs

Modifying an Existing VR

Setting the Default VR Table


Value Representations: Maneuvering Through the Value Representation Table

Value Representations:
Maneuvering Through the Value Representation Table

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetPrev

LDicomVR::GetNext

LDicomVR::GetCount

LDicomVR::Exists


Value Representations: Searching the Value Representation Table

Value Representations:
Searching the Value Representation Table

LDicomVR::Find

LDicomVR::FindIndex

LDicomVR::Exists


Value Representations: Inserting and Deleting Value Representations

Value Representations:
Inserting and Value Representation s

Inserting Value Representations:

LDicomVR::Insert

Deleting Value Representations:

LDicomVR::Delete

LDicomVR::Reset

LDicomVR::Exists


Value Representations: Modifying an Existing Value Representation

Value Representations:
Modifying an Existing Value Representation

LDicomVR::SetName

LDicomVR::Exists


Value Representations: Setting the Default Value Representation Table

Value Representations:
Setting the Default Value Representation Table

LDicomVR::Default


Key Elements

Maneuvering Through the DICOM Dir Data Set

Searching the DICOM Dir Data Set

Inserting and Deleting Key Elements

Getting the Type of an Existing Key Element


Key Elements: Maneuvering Through the DICOM Dir Data Set

Key Elements:
Maneuvering Through the DICOM Dir Data Set

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetPrevKey

LDicomDS::GetNextKey


Key Elements: Searching the DICOM Dir Data Set

Key Elements:
Searching the DICOM Dir Data Set

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindPrevKey

LDicomDS::FindNextKey


Key Elements: Inserting and Deleting Key Elements

Key Elements:
Inserting and Deleting Key Elements

Inserting Key Elements:

LDicomDS::InsertKey

Deleting Key Elements:

LDicomDS::DeleteKey


Key Elements: Getting the Type of an Existing Key Element

Key Elements:
Getting the Type of an Existing Key Element

LDicomDS::GetValueKey


Dicom Annotations

Presentation State Module

Layers

Graphic Objects

Text Objects

Converting Between LEADTOOLS Annotations and DICOM Annotations


Dicom Annotations: Converting Between LEADTOOLS Annotations and DICOM Annotations

Dicom Annotations:
Converting Between LEADTOOLS Annotations and DICOM Annotations

LDicomDS::ConvertDicomAnnObjToLEADAnnObj

LDicomDS::ConvertLEADAnnObjToDicomAnnObjs

LDicomDS::OnConvertLEADAnnObjToDicomAnnObj


Dicom Annotations: Graphic Objects

Dicom Annotations:
Graphic Objects

LDicomDS::CreateGraphicObject

LDicomDS::GetGraphicObjectCount

LDicomDS::GetGraphicObjectInfo

LDicomDS::GetGraphicObjElement

LDicomDS::GetGraphicObjPointCount

LDicomDS::RemoveAllGraphicObjects

LDicomDS::SetGraphicObjectInfo


Dicom Annotations: Layers

Dicom Annotations:
Layers

LDicomDS::CreateLayer

LDicomDS::GetLayerCount

LDicomDS::GetLayerElementByIndex

LDicomDS::GetLayerElementByName

LDicomDS::GetLayerGraphicObjectCount

LDicomDS::GetLayerIndex

LDicomDS::GetLayerInfo

LDicomDS::GetLayerTextObjectCount

LDicomDS::RemoveAllLayers

LDicomDS::RemoveLayerByIndex

LDicomDS::RemoveLayerByName

LDicomDS::RemoveLayerGraphicObjects

LDicomDS::RemoveLayerTextObjects

LDicomDS::SetLayerInfo

LDicomDS::AddLayerImageRef

LDicomDS::GetLayerImageRefCount

LDicomDS::GetLayerImageRefElement

LDicomDS::RemoveAllImageRefFromAllLayers

LDicomDS::RemoveAllImageRefsFromLayer

LDicomDS::RemoveImageRefFromLayer


Dicom Annotations: Presentation State Module

Dicom Annotations:
Presentation State Module

LDicomDS::AddPresStateImageRefByDS

LDicomDS::AddPresStateImageRefByFileName

LDicomDS::FindFirstPresStateRefSeriesItem

LDicomDS::FindNextPresStateRefSeriesItem

LDicomDS::GetPresStateImageRefBySOPInstance

LDicomDS::GetPresStateImageRefCount

LDicomDS::GetPresStateImageRefSOPInstance

LDicomDS::GetPresStateInfo

LDicomDS::RemoveAllPresStateImageRefs

LDicomDS::RemovePresStateImageRefBySOPInstance

LDicomDS::SetPresStateInfo


Dicom Annotations: Text Objects

Dicom Annotations:
Text Objects

LDicomDS::CreateTextObject

LDicomDS::GetTextObjectCount

LDicomDS::GetTextObjectInfo

LDicomDS::GetTextObjElement

LDicomDS::RemoveAllTextObjects

LDicomDS::RemoveTextObject

LDicomDS::SetTextObjectInfo


DICOM Associate Connections

Creating an Associate Connection

Modifying a DICOM Associate Handle

Getting Information About a DICOM Associate Handle


DICOM Associate Connection: Creating an Associate Connection

DICOM Associate Connection:
Creating an Associate Connection

LDicomAssociate::LDicomAssociate

LDicomAssociate::Default


DICOM Associate Connection: Modifying a DICOM Associate Handle

DICOM Associate Connection:
Modifying a DICOM Associate Handle

LDicomAssociate::Reset

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::AddPresentation

LDicomAssociate::DelPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::AddTransfer

LDicomAssociate::DelTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::AddUserInfo

LDicomAssociate::DelUserInfo

LDicomAssociate::SetExtended


DICOM Associate Connection: Getting Information About a DICOM Associate Handle

DICOM Associate Connection:
Getting Information About a DICOM Associate Handle

LDicomAssociate::IsRequest

LDicomAssociate::GetVersion

LDicomAssociate::GetCalled

LDicomAssociate::GetCalling

LDicomAssociate::GetApplication

LDicomAssociate::GetPresentationCount

LDicomAssociate::GetPresentation

LDicomAssociate::GetResult

LDicomAssociate::GetAbstract

LDicomAssociate::FindAbstract

LDicomAssociate::GetTransferCount

LDicomAssociate::GetTransfer

LDicomAssociate::IsMaxLength

LDicomAssociate::GetMaxLength

LDicomAssociate::IsImplementClass

LDicomAssociate::GetImplementClass

LDicomAssociate::GetInvokedOperations

LDicomAssociate::GetPerformedOperations

LDicomAssociate::GetUserRole

LDicomAssociate::GetProviderRole

LDicomAssociate::IsRoleSelect

LDicomAssociate::IsImplementVersion

LDicomAssociate::GetImplementVersion

LDicomAssociate::GetUserInfoCount

LDicomAssociate::GetTypeUserInfo

LDicomAssociate::GetLengthUserInfo

LDicomAssociate::GetDataUserInfo

LDicomAssociate::GetLengthExtended

LDicomAssociate::GetExtended


DICOM Context Groups

DICOM Context Groups: Loading/Inserting and Deleting Context Groups

DICOM Context Groups: Maneuvering Through the Context Group Table

DICOM Context Groups: Searching the Context Group Table

DICOM Context Groups: Inserting and Deleting Coded Concepts

DICOM Context Groups: Modifying Coded Concepts

DICOM Context Groups: Restoring Context Groups

DICOM Context Groups: Miscellaneous


DICOM Context Groups: Loading/Inserting and Deleting Context Groups

DICOM Context Groups:
Loading/Inserting and Deleting Context Groups

LDicomContextGroup::Load

LDicomContextGroup::Insert

LDicomContextGroup::Delete

LDicomContextGroup::Reset


DICOM Context Groups: Maneuvering Through the Context Group Table

DICOM Context Groups:
Maneuvering Through the Context Group Table

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

LDicomContextGroup::GetCount

LDicomContextGroup::FindIndex

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

LDicomContextGroup::GetContextGroup


DICOM Context Groups: Searching the Context Group Table

DICOM Context Groups:
Searching the Context Group Table

LDicomContextGroup::Find

LDicomContextGroup::FindCodedConcept


DICOM Context Groups: Inserting and Deleting Coded Concepts

DICOM Context Groups:
Inserting and Deleting Coded Concepts

LDicomContextGroup::InsertCodedConcept

LDicomContextGroup::DeleteCodedConcept


DICOM Context Groups: Modifying Coded Concepts

DICOM Context Groups:
Modifying Coded Concepts

LDicomContextGroup::SetCodeMeaning


DICOM Context Groups: Restoring Context Groups

DICOM Context Groups:
Restoring Context Groups

LDicomContextGroup::Default


DICOM Context Groups: Miscellaneous

DICOM Context Groups:
Miscellaneous

LDicomContextGroup::Exists

LDicomContextGroup::ExistsCodedConcept


DICOM Directories

Constructing, Destructing, and Saving DICOM Directories

Setting/Getting Options

Adding DICOM Files/Data Sets to DICOM Directories

Miscellaneous

Overridables


DICOM Directories: Adding DICOM Files/Data Sets to DICOM Directories

DICOM Directories:
Adding DICOM Files/Data Sets to DICOM Directories

LDicomDir::InsertDicomFile

LDicomDir::InsertDicomDS


DICOM Directories: Constructing, Destructing, Loading and Saving DICOM Directories

DICOM Directories:
Constructing, Destructing, Loading and Saving DICOM Directories

LDicomDir::LDicomDir

LDicomDir::~LDicomDir

LDicomDir::LoadDS

LDicomDir::ResetDicomDir

LDicomDir::SaveDicomDir


DICOM Directories: Miscellaneous

DICOM Directories:
Miscellaneous

LDicomDir::SetFileSetID

LDicomDir::SetDescriptorFile


DICOM Directories: Overridables

DICOM Directories:
Overridables

LDicomDir::OnInsertDicomFile


DICOM Directories: Setting/Getting Options

DICOM Directories:
Setting/Getting Options

LDicomDir::SetOptions

LDicomDir::GetOptions


DICOM Network Connections

Creating a Network Connection

Closing a Network Connection

DICOM Associate Connection Messages

Sending Data Messages

Getting Information About a Network Connection

ISCL Security

TLS Security


DICOM Network Connection: Creating a Network Connection

DICOM Network Connection:
Creating a Network Connection

LDicomNet::LDicomNet

LDicomNet::StartUp

LDicomNet::Initialize

LDicomNet::Connect

LDicomNet::Listen

LDicomNet::Accept

LDicomNet::OnAccept

LDicomNet::OnConnect


DICOM Network Connection: Closing a Network Connection

DICOM Network Connection:
Closing a Network Connection

LDicomNet::~LDicomNet

LDicomNet::ShutDown

LDicomNet::Close

LDicomNet::OnClose


DICOM Associate Connection Messages

LDicomNet::GetAssociate

LDicomNet::SendAssociateRequest

LDicomNet::SendAssociateAccept

LDicomNet::SendAssociateReject

LDicomNet::SendData

LDicomNet::SendReleaseRequest

LDicomNet::SendReleaseResponse

LDicomNet::SendAbort

LDicomNet::OnReceiveAssociateRequest

LDicomNet::OnReceiveAssociateAccept

LDicomNet::OnReceiveAssociateReject

LDicomNet::OnReceiveReleaseRequest

LDicomNet::OnReceiveReleaseResponse

LDicomNet::OnReceiveAbort

LDicomNet::OnSend


DICOM Network Connection: Sending Data Messages

DICOM Network Connection:
Sending Data Messages

LDicomNet::SendCStoreRequest

LDicomNet::SendCStoreResponse

LDicomNet::SendCFindRequest

LDicomNet::SendCFindResponse

LDicomNet::SendCGetRequest

LDicomNet::SendCGetResponse

LDicomNet::SendCMoveRequest

LDicomNet::SendCMoveResponse

LDicomNet::SendCCancelRequest

LDicomNet::SendCEchoRequest

LDicomNet::SendCEchoResponse

LDicomNet::SendNReportRequest

LDicomNet::SendNReportResponse

LDicomNet::SendNGetRequest

LDicomNet::SendNGetResponse

LDicomNet::SendNSetRequest

LDicomNet::SendNSetResponse

LDicomNet::SendNActionRequest

LDicomNet::SendNActionResponse

LDicomNet::SendNCreateRequest

LDicomNet::SendNCreateResponse

LDicomNet::SendNDeleteRequest

LDicomNet::SendNDeleteResponse

LDicomNet::OnReceiveCStoreRequest

LDicomNet::OnReceiveCStoreResponse

LDicomNet::OnReceiveCFindRequest

LDicomNet::OnReceiveCFindResponse

LDicomNet::OnReceiveCGetRequest

LDicomNet::OnReceiveCGetResponse

LDicomNet::OnReceiveCMoveRequest

LDicomNet::OnReceiveCMoveResponse

LDicomNet::OnReceiveCCancelRequest

LDicomNet::OnReceiveCEchoRequest

LDicomNet::OnReceiveCEchoResponse

LDicomNet::OnReceiveNReportRequest

LDicomNet::OnReceiveNReportResponse

LDicomNet::OnReceiveNGetRequest

LDicomNet::OnReceiveNGetResponse

LDicomNet::OnReceiveNSetRequest

LDicomNet::OnReceiveNSetResponse

LDicomNet::OnReceivenactionRequest

LDicomNet::OnReceiveNActionResponse

LDicomNet::OnReceiveNCreateRequest

LDicomNet::OnReceiveNCreateResponse

LDicomNet::OnReceiveNDeleteRequest

LDicomNet::OnReceiveNDeleteResponse

LDicomNet::OnReceiveUnknown


DICOM Network Connection: Getting Information About a Network Connection

DICOM Network Connection:
Getting Information About a Network Connection

LDicomNet::IsActivated

LDicomNet::IsAssociated

LDicomNet::IsConnected

LDicomNet::GetQueueSend

LDicomNet::GetServer

LDicomNet::GetClient

LDicomNet::GetClientCount

LDicomNet::GetHostInfo

LDicomNet::GetPeerInfo

LDicomNet::GetAssociate


DICOM Network Connection: ISCL Security

DICOM Network Connection:
ISCL Security

LDicomNet::CloseForced

LDicomNet::ExternalAuthenticateISCL

LDicomNet::GetChallengeISCL

LDicomNet::GetCommBlockLengthISCL

LDicomNet::GetErrorSecure

LDicomNet::GetIndexForEncryptISCL

LDicomNet::GetIndexForMutualAuthISCL

LDicomNet::GetPeerEncryptionISCL

LDicomNet::GetPeerMACISCL

LDicomNet::GetPeerRequestedMessageLengthISCL

LDicomNet::GetStatusISCL

LDicomNet::InternalAuthenticateISCL

LDicomNet::IsISCLQueueEmpty

LDicomNet::OnNonSecureReceivedISCL

LDicomNet::OnNonSecureSendISCL

LDicomNet::OnSecureLinkReady

LDicomNet::SendNonSecureISCL

LDicomNet::SetAuthDataISCL

LDicomNet::SetDefaultEncryptionISCL

LDicomNet::SetDefaultSigningISCL

LDicomNet::SetEncryptKeyISCL

LDicomNet::SetIndexForEncryptISCL

LDicomNet::SetIndexForMutualAuthISCL

LDicomNet::SetMaxCommBlockLengthISCL

LDicomNet::SetMaxMessageLengthISCL

LDicomNet::SetMutualAuthAlgISCL

LDicomNet::SetMutualAuthKeyISCL


DICOM Network Connection: TLS Security

DICOM Network Connection:
TLS Security

LDicomNet::LDicomNet

LDicomNet::GetAuthenticationAlgorithmTLS

LDicomNet::GetCipherFromIndexTLS

LDicomNet::GetCiphersuiteTLS

LDicomNet::GetEncryptionAlgorithmTLS

LDicomNet::GetEncryptKeyLengthTLS

LDicomNet::GetErrorSecure

LDicomNet::GetIntegrityAlgorithmTLS

LDicomNet::GetKeyExchangeAlgorithmTLS

LDicomNet::GetMutualAuthKeyLengthTLS

LDicomNet::Initialize

LDicomNet::OnPrivateKeyPassword

LDicomNet::OnSecureLinkReady

LDicomNet::SetCipherToIndexTLS

LDicomNet::SetClientCertificateTLS

LDicomNet::SetServerCertificateTLS


DICOM Print Management Service Class User: Functions

DICOM Print Management Service Class User:
Functions

LDicomPrintSCU::LDicomPrintSCU

LDicomPrintSCU::~LDicomPrintSCU

LDicomPrintSCU::Associate

LDicomPrintSCU::CreateFilmBox

LDicomPrintSCU::CreateFilmSession

LDicomPrintSCU::CreateOverlayBox

LDicomPrintSCU::CreatePresentationLUT

LDicomPrintSCU::CreatePullPrintRequest

LDicomPrintSCU::DeleteFilmBox

LDicomPrintSCU::DeleteFilmSession

LDicomPrintSCU::DeleteOverlayBox

LDicomPrintSCU::DeletePresentationLUT

LDicomPrintSCU::DeletePullPrintRequest

LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

LDicomPrintSCU::FreeImageBoxesInstanceUIDs

LDicomPrintSCU::GetAbortInfo

LDicomPrintSCU::GetAnnotationBoxesCount

LDicomPrintSCU::GetAnnotationBoxInstanceUID

LDicomPrintSCU::GetAssociateRejectInfo

LDicomPrintSCU::GetDefaultFilmBoxParameters

LDicomPrintSCU::GetDefaultFilmSessionParameters

LDicomPrintSCU::GetDefaultImageBoxParameters

LDicomPrintSCU::GetDefaultOverlayBoxParameters

LDicomPrintSCU::GetDefaultPullPrintRequestParameters

LDicomPrintSCU::GetFilmBoxInstanceUID

LDicomPrintSCU::GetFilmSessionInstanceUID

LDicomPrintSCU::GetImageBoxesCount

LDicomPrintSCU::GetImageBoxInstanceUID

LDicomPrintSCU::GetLastOperationStatus

LDicomPrintSCU::GetOverlayBoxInstanceUID

LDicomPrintSCU::GetPresentationLUTInstanceUID

LDicomPrintSCU::GetPrinterConfiguration

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrinterInfo

LDicomPrintSCU::GetPrintJobInfo

LDicomPrintSCU::GetPrintJobInstanceUID

LDicomPrintSCU::GetPullPrintRequestInstanceUID

LDicomPrintSCU::IsClassSupported

LDicomPrintSCU::OnPrinterReport

LDicomPrintSCU::OnPrintJobReport

LDicomPrintSCU::OnStatus

LDicomPrintSCU::PrintFilmBox

LDicomPrintSCU::PrintFilmSession

LDicomPrintSCU::PrintPullPrintRequestSession

LDicomPrintSCU::Release

LDicomPrintSCU::SetTimeout

LDicomPrintSCU::UpdateAnnotationBox

LDicomPrintSCU::UpdateFilmBox

LDicomPrintSCU::UpdateFilmSession

LDicomPrintSCU::UpdateImageBox

LDicomPrintSCU::UpdateOverlayBox


DICOM Waveform Channels

DICOM Waveform Channels: Constructing, Destructing

DICOM Waveform Channels: Setting/Getting Channel Samples

DICOM Waveform Channels: Setting/Getting Channel Source

DICOM Waveform Channels: Setting/Getting Channel Sensitivity

DICOM Waveform Channels: Setting/Getting Other Channel Attributes

DICOM Waveform Channels: Adding/Managing Waveform Annotations

DICOM Waveform Channels: Miscellaneous


DICOM Waveform Channels: Adding/Managing Waveform Annotations

DICOM Waveform Channels:
Adding/Managing Waveform Annotations

LDicomWaveformChannel::AddAnnotation

LDicomWaveformChannel::DeleteAnnotation

LDicomWaveformChannel::GetAnnotationCount

LDicomWaveformChannel::GetAnnotation


DICOM Waveform Channels: Constructing, Destructing

DICOM Waveform Channels:
Constructing, Destructing

LDicomWaveformChannel::LDicomWaveformChannel

LDicomWaveformChannel::~LDicomWaveformChannel


DICOM Waveform Channels: Miscellaneous

DICOM Waveform Channels:
Miscellaneous

LDicomWaveformChannel::GetIndex

LDicomWaveformChannel::GetWaveformGroup


DICOM Waveform Channels: Setting/Getting Channel Samples

DICOM Waveform Channels:
Setting/Getting Channel Samples

LDicomWaveformChannel::GetChannelSamples

LDicomWaveformChannel::SetChannelSamples16

LDicomWaveformChannel::SetChannelSamples32

LDicomWaveformChannel::SetChannelSamples8


DICOM Waveform Channels: Setting/Getting Channel Sensitivity

DICOM Waveform Channels:
Setting/Getting Channel Sensitivity

LDicomWaveformChannel::GetChannelSensitivity

LDicomWaveformChannel::SetChannelSensitivity


DICOM Waveform Channels: Setting/Getting Channel Source

DICOM Waveform Channels:
Setting/Getting Channel Source

LDicomWaveformChannel::GetChannelSource

LDicomWaveformChannel::SetChannelSource


DICOM Waveform Channels: Setting/Getting Other Channel Attributes

DICOM Waveform Channels:
Setting/Getting Other Channel Attributes

LDicomWaveformChannel::GetChannelLabel

LDicomWaveformChannel::GetChannelMaximumValue

LDicomWaveformChannel::GetChannelMinimumValue

LDicomWaveformChannel::GetChannelOffset

LDicomWaveformChannel::GetChannelSampleSkew

LDicomWaveformChannel::GetChannelStatus

LDicomWaveformChannel::GetChannelTimeSkew

LDicomWaveformChannel::GetFilterHighFrequency

LDicomWaveformChannel::GetFilterLowFrequency

LDicomWaveformChannel::GetNotchFilterBandwidth

LDicomWaveformChannel::GetNotchFilterFrequency

LDicomWaveformChannel::GetWaveformChannelNumber

LDicomWaveformChannel::SetChannelLabel

LDicomWaveformChannel::SetChannelMaximumValue

LDicomWaveformChannel::SetChannelMinimumValue

LDicomWaveformChannel::SetChannelOffset

LDicomWaveformChannel::SetChannelSampleSkew

LDicomWaveformChannel::SetChannelStatus

LDicomWaveformChannel::SetChannelTimeSkew

LDicomWaveformChannel::SetFilterHighFrequency

LDicomWaveformChannel::SetFilterLowFrequency

LDicomWaveformChannel::SetNotchFilterBandwidth

LDicomWaveformChannel::SetNotchFilterFrequency

LDicomWaveformChannel::SetWaveformChannelNumber


DICOM Waveform Groups

DICOM Waveform Groups: Constructing, Destructing and Resetting

DICOM Waveform Groups: Using Waveform Groups

DICOM Waveform Groups: Manipulating Channels

DICOM Waveform Groups: Setting/Getting Attributes

DICOM Waveform Groups: Supporting Audio


DICOM Waveform Groups: Constructing, Destructing and Resetting

DICOM Waveform Groups:
Constructing, Destructing and Resetting

LDicomWaveformGroup::LDicomWaveformGroup

LDicomWaveformGroup::~LdicomWaveformGroup

LDicomWaveformGroup::Reset


DICOM Waveform Groups: Manipulating Channels

DICOM Waveform Groups:
Manipulating Channels

LDicomWaveformGroup::AddChannel

LDicomWaveformGroup::DeleteChannel

LDicomWaveformGroup::GetChannel

LDicomWaveformGroup::GetNumberOfChannels

LDicomWaveformGroup::GetNumberOfSamplesPerChannel

LDicomWaveformGroup::SetNumberOfSamplesPerChannel


DICOM Waveform Groups: Setting/Getting Attributes

DICOM Waveform Groups:
Setting/Getting Attributes

LDicomWaveformGroup::GetMultiplexGroupLabel

LDicomWaveformGroup::GetMultiplexGroupTimeOffset

LDicomWaveformGroup::GetSampleInterpretation

LDicomWaveformGroup::GetSamplingFrequency

LDicomWaveformGroup::GetTriggerSamplePosition

LDicomWaveformGroup::GetTriggerTimeOffset

LDicomWaveformGroup::GetWaveformOriginality

LDicomWaveformGroup::GetWaveformPaddingValue

LDicomWaveformGroup::SetMultiplexGroupLabel

LDicomWaveformGroup::SetMultiplexGroupTimeOffset

LDicomWaveformGroup::SetSampleInterpretation

LDicomWaveformGroup::SetSamplingFrequency

LDicomWaveformGroup::SetTriggerSamplePosition

LDicomWaveformGroup::SetTriggerTimeOffset

LDicomWaveformGroup::SetWaveformOriginality

LDicomWaveformGroup::SetWaveformPaddingValue


DICOM Waveform Groups: Supporting Audio

DICOM Waveform Groups:
Supporting Audio

LDicomWaveformGroup::LoadAudio

LDicomWaveformGroup::SaveAudio


DICOM Waveform Groups: Using Waveform Groups

DICOM Waveform Groups:
Using Waveform Groups

LDicomDS::AddWaveformGroup

LDicomDS::DeleteWaveformGroup

LDicomDS::GetWaveformGroupCount

LDicomDS::GetWaveformGroup


LUT Encoding

Modality LUT

Palette Color Table

VOI LUT


LUT Encoding: Modality LUT

LUT Encoding:
Modality LUT

LDicomDS::GetModalityLUTAttributes

LDicomDS::GetModalityLUTData

LDicomDS::DeleteModalityLUT

LDicomDS::SetModalityLUT


LUT Encoding: Palette Color Table

LUT Encoding:
Palette Color Table

LDicomDS::GetPaletteColorLUTAttributes

LDicomDS::SetPaletteColorLUTAttributes

LDicomDS::GetPaletteColorLUTData

LDicomDS::SetPaletteColorLUTData

LDicomDS::DeletePaletteColorLUT


LUT Encoding: VOI LUT

LUT Encoding:
VOI LUT

LDicomDS::GetWindowCount

LDicomDS::GetVOILUTCount

LDicomDS::GetWindow

LDicomDS::SetWindow

LDicomDS::DeleteWindow

LDicomDS::GetVOILUT

LDicomDS::SetVOILUT

LDicomDS::GetVOILUTData

LDicomDS::DeleteVOILUT


Overlays

LDicomDS::GetOverlayAttributes

LDicomDS::GetOverlayActivationLayer

LDicomDS::GetOverlayBitmap

LDicomDS::GetOverlayBitmapList

LDicomDS::GetOverlayCount

LDicomDS::SetOverlayAttributes

LDicomDS::SetOverlayBitmap

LDicomDS::SetOverlayBitmapList

LDicomDS::DeleteOverlay


Data Types

Basic Data Types and Keywords

LEADTOOLS Basic Data Types

Keywords Used in Declarations

Image and Toolkit Information Structures

BITMAPHANDLE

List Data Types

HBITMAPLIST

DICOM Structures

CODBLOCKSTYLE

DICOMANNPOINT

DICOMCODEDCONCEPT

DICOMCODESEQUENCEITEM

DICOMCONTEXTGROUP

DICOMDIROPTIONS

DICOMELEMENT

DICOMGRAPHICLAYER

DICOMGRAPHICOBJECT

DICOMIMAGE

DICOMIOD

DICOMLUTDESCRIPTOR

DICOMMLUTATTRIBS

DICOMMODULE

DICOMPALCOLORLUTATTRIBS

DICOMPALETTECOLORLUTTYPE

DICOMPRESSTATEINFO

DICOMTAG

DICOMTEXTOBJECT

DICOMUID

DICOMVOILUTATTRIBS

DICOMVR

DICOMWAVEFORMANNOTATION

DICOMWINDOWATTRIBS

FILEJ2KOPTIONS

FILMBOXPARAMETERS

FILMSESSIONPARAMETERS

HDICOMNET

HDICOMPDU

IMAGEBOXPARAMETERS

J2KCOMPRESSIONCONTROL

J2KREGIONOFINTEREST

L_CIPHERSUITE

L_SSL_CTX_CREATE

OVERLAYATTRIBUTES

OVERLAYBOXPARAMETERS

PRINTERINFO

PRINTERREPORTINFO

PRINTJOBINFO

PRINTJOBREPORTINFO

PULLPRINTREQUESTPARAMETERS

STOREDPRINTSTORAGEINSTANCEINFO

VALUEAGE

VALUEDATETIME

VALUEDATE

VALUETIME

Structures Used with Input and Output Functions

WINDOWS Structures


LEADTOOLS Basic Data Types

LEADTOOLS has defined the following basic data types for portability:

Data Type | Definition and Usage
L_BITFIELD | Defined as L_UINT; used as a bit field.
L_BOOL | Defined as L_UINT; used as a boolean value.
L_CHAR | Defined as char; used as a signed 8-bit integer.
L_DOUBLE | Defined as double; used as a double precision floating point number.
L_FLOAT | Defined as float; used as a floating point number.
L_INT | Defined as int; used as a signed integer, 16-bits or larger.
L_INT16 | Defined as short; used as a signed 16-bit integer.
L_INT32 | Defined as long; used as a signed 32-bit integer.
L_UCHAR | Defined as unsigned char; used as an unsigned 8-bit integer.
L_UINT | Defined as unsigned; used as an unsigned integer, 16-bits or larger.
L_UINT16 | Defined as unsigned short; used as an unsigned 16-bit integer.
L_UINT32 | Defined as unsigned long; used as an unsigned 32-bit integer.
L_VOID | Defined as void; used as a void.


Keywords Used in Declarations

LEADTOOLS uses the following keywords in declarations of functions, structures, and datatypes:

Keyword | Definition and Usage
L_FAR | Defined as nothing; used as a placeholder.
L_HUGE | Defined as nothing; used as a placeholder.
L_EXPORT | Defined as nothing; used as a placeholder.
L_PASCAL | Defined as nothing; used as a placeholder.
EXT_FUNCTION | Defined as WINAPI; used as an attribute for all toolkit functions.
pEXT_FUNCTION | Defined as EXT_FUNCTION L_FAR *; used as an attribute when defining pointers to toolkit functions.
EXT_CALLBACK | Defined as _cdecl L_FAR; used as an attribute for all toolkit callback functions.
pEXT_CALLBACK | Defined as EXT_CALLBACK L_FAR *; used as an attribute when defining pointers to toolkit callback functions.


BITMAPHANDLE

The BITMAPHANDLE structure serves as a working area for image manipulation and conversion. LEADTOOLS functions use this structure as a bitmap handle for accessing the image in memory and for maintaining the characteristics of the image.

Note:

Fields intended for internal use, such as the pointer to the bitmap, are omitted from the table. If necessary, you can refer to the LTKRN.H header file, which describes the entire structure.

Member | Data Type | Description
uStructSize | L_INT | For versioning, this must be set to sizeof(BITMAPHANDLE). Some functions require the BITMAPHANDLE structure to be initialized prior to the function being called.
Width | L_INT | Image width in pixels.
Height | L_INT | Image height in pixels.
BitsPerPixel | L_INT | Number of bits per pixel.
BytesPerLine | L_UINT | Bytes per line, rounded upward to the nearest multiple of four.
Flags.Allocated | L_BITFIELD | TRUE if the bitmap is allocated.
Flags.ConventionalMemory | L_BITFIELD | TRUE if the bitmap is allocated using conventional memory.
Flags.DiskMemory | L_BITFIELD | TRUE if the bitmap is allocated using LEAD's own virtual memory.
Flags.LockedMemory | L_BITFIELD | TRUE if the bitmap memory is locked down.
Flags.Progressive | L_BITFIELD | TRUE if an image is being loaded from a progressive JPEG file.
Flags.Tiled | L_BOOL | TRUE if the bitmap is a tiled bitmap.
Flags.WaitUserInput | L_BITFIELD | TRUE if the animation playback waits for user input.
Flags.Transparency | L_BITFIELD | TRUE if the animation playback uses transparency.
Flags.Compressed | L_BITFIELD | TRUE if the current bitmap is in 1-bit RLE-compressed format. For information about this format, refer to Speeding Up 1-Bit Documents .
Flags.Signed | L_BITFIELD | TRUE if the pixel values in the bitmap are signed.
Flags.SuperCompressed | L_BITFIELD | TRUE if the bitmap is in super-compressed format. The bitmap can be 24-bit or 1-bit. For more information, refer to Super Compressed Bitmaps in the Main Class Library help file.
Flags.NewPalette | L_BITFIELD | Indicates how the palette is stored. If FALSE: the palette is stored as a GDI object (in Palette.hPalette). This is the default behavior in this version. In future versions, this will be changed. If TRUE: the palette is stored as an array of RGBQUAD structures (in Palette.pPalette).
nColors | L_INT | Number of colors (256 or less) that the bitmap has. If the image has more than 256 colors, this value is zero.
hPalette | HPALETTE | Handle to the image's palette. It can be an optimized palette or a fixed palette. This member no longer exists. It has been changed to Palette.hPalette.
Palette.hPalette | HPALETTE | Handle to the image's palette. It can be an optimized palette or a fixed palette. This member will be removed in the future. Do not access this member directly. This is valid only if Flags.NewPalette is FALSE.
Palette.pPalette | L_RGBQUAD L_FAR * | Array of palette colors. This is valid only if Flags.NewPalette is TRUE.
ViewPerspective | L_CHAR | Where the beginning of the image is stored. Valid values are TOP_LEFT, BOTTOM_LEFT, TOP_RIGHT, BOTTOM_RIGHT, TOP_LEFT90, and TOP_LEFT270. For descriptions, refer to Accounting for View Perspective .
Order | L_INT | Color order of the bitmap. Possible values are ORDER_RGB, ORDER_BGR and ORDER_GRAY.
Size | L_UINT32 | Size of the bitmap image data, in bytes.
DitheringMethod | L_UINT | Dithering method (referenced by some functions). For possible values, refer to the L_DefaultDithering function.
XResolution | L_INT | Horizontal resolution, in dots per inch. Some file formats save this value in the file header.
YResolution | L_INT | Vertical resolution, in dots per inch. Some file formats save this value in the file header.
Left | L_INT | Left offset for animation playback.
Top | L_INT | Top offset for animation playback, based on a TOP_LEFT view perspective.
Delay | L_UINT32 | Animation playback delay in milliseconds (ms).
Background | COLORREF | Background color for animation playback. You can specify a COLORREF value, such as the return value of the Windows RGB macro, or you can use the PALETTEINDEX macro to specify a palette color.
Transparency | COLORREF | Transparent color for animation playback. You can specify a COLORREF value, such as the return value of the Windows RGB macro, or you can use the PALETTEINDEX macro to specify a palette color.
DisposalMethod | L_UINT | Animation playback disposal method. For possible values, refer to Animation Disposal Methods.
LowBit | L_INT | Value indicating the low bit used for window leveling. 0 <= nLowBit <= nHighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale). A value of -1 will be treated as 0.
HighBit | L_INT | Value indicating the high bit used for window leveling. 0 <= nLowBit <= nHighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale). A value of -1 will be treated as BitsPerPixel -1.
MinVal | L_INT32 | Minimum grayscale value. For every value between 0 and MinVal, Black (RGB(0,0,0)) will be used. For values between MinVal and MaxVal, the gray value to be displayed is calculated by : gray = (index - MinVal) * 255 / (MaxVal - MinVal).(See * below)
MaxVal | L_UINT | Maximum grayscale value. For every value larger than MaxVal, White (RGB(255,255,255)) will be used. For values between MinVal and MaxVal, the gray value to be displayed is calculated by : gray = (index - MinVal) * 255 / (MaxVal - MinVal). (See * below)

* index is the intensity value of the pixel. If the intensity value is > MaxVal, the color will be White. If the intensity value is < MinVal, the color will be Black. For those intensity values between MinVal and MaxVal, the above equation is used to determine the color, with index equal to the intensity value.

Comments

pBITMAPHANDLE is a pointer to a BITMAPHANDLE structure. Generally, where a function parameter type is pBITMAPHANDLE, you can declare a BITMAPHANDLE variable, update the structure's fields, and pass the variable's address in the parameter. Declaring a pBITMAPHANDLE variable is necessary only if your program requires a pointer.

In most cases, the values of fields in the BITMAPHANDLE structure are maintained by LEADTOOLS functions.

Note: A 16-bpp image may be color or grayscale. If you are working with a 16-bit grayscale image, explicitly set BITMAPHANDLE.Order to ORDER_GRAY. By default, the Order for a 16-bit image will be set to ORDER_BGR.


HBITMAPLIST

LEADTOOLS has defined the following data types for referencing a list of bitmaps:

Data Type | Definition and Usage
HBITMAPLIST | Defined as HANDLE; used as a handle to a list of bitmaps.
pHBITMAPLIST | Defined as HBITMAPLIST L_FAR *; used as a pointer to an HBITMAPLIST variable.


CODBLOCKSTYLE

typedef struct _CodBlockStyle
{
L_BITFIELD bSelective_AC_Bypass;
L_BITFIELD bResetContextOnBoundaries;
L_BITFIELD bTerminationOnEachPass;
L_BITFIELD bVerticallyCausalContext;
L_BITFIELD bPredictableTermination;
L_BITFIELD bErrorResilienceSymbol;
L_BITFIELD bReserved6:26;
} CodBlockStyle;

The CODBLOCKSTYLE structure provides a series of bit flags that indicate the behavior of the code blocks.

Member | Description
bSelective_AC_Bypass | TRUE if the "lazy coding mode" is adopted. In this case, trailing bit-planes bypass the arithmetic coder except in the normalization pass. Otherwise, the arithmetic coder is used on all passes.
bResetContextOnBoundaries | TRUE if the arithmetic coder's probability models are reset between coding passes. This controls where the end of encoded data is and limits the amount of potentially lost data in the event of a transmission error.
bTerminationOnEachPass | TRUE if the arithmetic code-word generation process stops on a byte boundary at the end of each coding pass.
bVerticallyCausalContext | TRUE if the context models are restricted to being vertically causal within each sub-block.
bPredictableTermination | TRUE if the encoder has a predictable termination policy and identifies that the policy was used in the code-stream COD/COC markers. This can be used to implement error detection and concealment.
bErrorResilienceSymbol | TRUE if a 4 symbol marker is included for each bit-plane, following the normalization pass.
bReserved6:26 | Reserved for future use.


DICOMANNPOINT

typedef struct tagDICOMANNPOINT
{
L_FLOAT fX; /* x coordinate of the point*/
L_FLOAT fY; /* y coordinate of the point*/
} DICOMANNPOINT, *pDICOMANNPOINT;

The DICOMANNPOINT structure defines coordinates of a DICOM point, which is used in the implementation of "Graphical Annotation Objects".

Member | Meaning
fX | Value that indicates the X coordinate of the point.
fY | Value that indicates the Y coordinate of the point.

Comments

This is the primitive data type in the toolkit. pDICOMANNPOINT is a pointer to a DICOMANNPOINT structure.

See Also

Functions: | LDicomDS::CreateGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo
Topics: | Working with DICOM Annotations


DICOMCODEDCONCEPT

typedef struct tagDICOMCODEDCONCEPT
{
GENERICLINK /* reserved */

L_CHAR * pszCodingSchemeDesignator; /* Coding Scheme Designator */
L_CHAR * pszCodingSchemeVersion; /* Coding Scheme Version */
L_CHAR * pszCodeValue; /* Code Value */
L_CHAR * pszCodeMeaning; /* Code Meaning */

pVALUEDATETIME pContextGroupLocalVersion; /* pointer to the Context Group Local Version */
L_CHAR * pszContextGroupExtensionCreatorUID; /* Context Group Extension Creator UID */

} DICOMCODEDCONCEPT, * pDICOMCODEDCONCEPT;

The DICOMCODEDCONCEPT structure is used to specify a Coded Concept.

Member | Description
GENERICLINK | Reserved.
pszCodingSchemeDesignator | Character string that contains the Coding Scheme Designator (0008,0102) of the Coded Concept.
pszCodingSchemeVersion | Character string that contains the Coding Scheme Version (0008,0103) of the Coded Concept.
pszCodeValue | Character string that contains the Code Value (0008,0100) of the Coded Concept.
pszCodeMeaning | Character string that contains the Code Meaning (0008,0104) of the Coded Concept.
pContextGroupLocalVersion | Pointer to a VALUEDATETIME structure that contains the Context Group Local Version (0008,0107) of the Coded Concept.
pszContextGroupExtensionCreatorUID | Character string that contains the Context Group Extension Creator UID (0008,010D) of the Coded Concept.

Comments

When the return value of a member function of the LDicomContextGroup class is a pointer to a DICOMCODEDCONCEPT structure, none of the members pszCodingSchemeDesignator, pszCodeValue, and pszCodeMeaning can be NULL.

For the Coded Concepts that are maintained internally, the members pContextGroupLocalVersion and pszContextGroupExtensionCreatorUID are always NULLs.

See Also

Functions: | LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::FindCodedConcept, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::InsertCodedConcept, LDicomContextGroup::DeleteCodedConcept
Topics: | Working with Context Groups


DICOMCODESEQUENCEITEM

typedef struct tagDICOMCODESEQUENCEITEM
{
L_UINT uStructSize; /* Structure Size */
L_CHAR* pszCodeValue; /* Code Value */
L_CHAR* pszCodingSchemeDesignator; /* Coding Scheme Designator */
L_CHAR* pszCodingSchemeVersion; /* Coding Scheme Version */
L_CHAR* pszCodeMeaning; /* Code Meaning */
L_CHAR* pszContextIdentifier; /* Context Identifier */
L_CHAR* pszMappingResource; /* Mapping Resource */
pVALUEDATETIME pContextGroupVersion; /* Pointer to Context Group Version */
pVALUEDATETIME pContextGroupLocalVersion; /* Pointer to Context Group Local Version */
L_CHAR * pszContextGroupExtensionCreatorUID; /* Context Group Extension Creator UID */
}DICOMCODESEQUENCEITEM, * pDICOMCODESEQUENCEITEM;

The members of this structure represent the default set of attributes encapsulated in the items of "Code Sequence Attributes".

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMCODESEQUENCEITEM) )
pszCodeValue | Character string that contains the "Code Value" (0008,0100) element.
pszCodingSchemeDesignator | Character string that contains the "Coding Scheme Designator" (0008,0102) element.
pszCodingSchemeVersion | Character string that contains the "Coding Scheme Version" (0008,0103) element.
pszCodeMeaning | Character string that contains the "Code Meaning" (0008,0104) element.
pszContextIdentifier | Character string that contains the "Context Identifier" (0008,010F) element.
pszMappingResource | Character string that contains the "Mapping Resource" (0008,0105) element.
pContextGroupVersion | Pointer to a VALUEDATETIME structure that contains the "Context Group Version" (0008,0106) element.
pContextGroupLocalVersion | Pointer to a VALUEDATETIME structure that contains the "Context Group Local Version" (0008,0107) element.
pszContextGroupExtensionCreatorUID | Character string that contains the "Context Group Extension Creator UID" (0008,010D) element.

Comments

The members of this structure are based on the default set of attributes encapsulated in the items of "Code Sequence Attributes". These attributes comprise the "Code Sequence Macro". For more information, refer to "Standard Attribute Sets For Code Sequence Attributes" in the DICOM standard.


DICOMCONTEXTGROUP

typedef struct tagDICOMCONTEXTGROUP
{
GENERICLINK /* reserved */
L_CHAR * pszContextIdentifier; /* Context Identifier */
L_CHAR * pszName; /* name */
L_BOOL bExtensible; /* extensibility */
pVALUEDATETIME pContextGroupVersion; /* pointer to the Context Group Version */

} DICOMCONTEXTGROUP, * pDICOMCONTEXTGROUP;

The DICOMCONTEXTGROUP structure is used to specify a Context Group.

Member | Description
GENERICLINK | Reserved.
pszContextIdentifier | Character string that contains the Context Identifier (0008,010F) of the Context Group (for example, "CID 2", "CID 82", "CID 3001", etc.). A Context Group is identified by its Context ID (CID). For a list of the Context IDs of the Context Groups maintained internally, refer to Context Identifier Values.
pszName | Character string that contains the name of the Context Group (for example, "Anatomic Modifier", "Units of Measurement", "ECG Leads", etc.).
bExtensible | A value that indicates whether the Context Group is extensible. Possible values are:
 | Value | Meaning
 | TRUE | The Context Group is Extensible.
 | FALSE | The Context Group is Non-extensible.
pContextGroupVersion | Pointer to a VALUEDATETIME structure that contains the Context Group Version (0008,0106) of the Context Group.

Comments

When the return value of a member function of the LDicomContextGroup class is a pointer to a DICOMCONTEXTGROUP structure, none of the members pszContextIdentifier, pszName, and pContextGroupVersion can be NULL.

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirst, LDicomContextGroup::FindIndex, LDicomContextGroup::Find, LDicomContextGroup::Delete, LDicomContextGroup::Default, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::FindCodedConcept, LDicomContextGroup::GetContextGroup
Topics: | Working with Context Groups


DICOMDIROPTIONS

typedef struct tagDICOMDIROPTIONS
{
L_INT nSize;
L_BOOL bIncludeSubfolders;
L_UINT32 uFlags;

} DICOMDIROPTIONS, * pDICOMDIROPTIONS;

The DICOMDIROPTIONS structure contains information concerning the Dicom Directory options. It is used by the functions LDicomDir::SetOptions and LDicomDir::GetOptions to set and get the DICOM Directory options.

Member | Description
nSize | Size of the structure. This must be set before passing the structure to the function LDicomDir::SetOptions.
bIncludeSubfolders | Specifies whether the function LDicomDir::InsertDicomFile should add the DICOM files in the subfolders of the destination folder (when the function is passed a NULL). Possible values are:
 | Value | Meaning
 | TRUE | (Default) Add the files in the subfolders of the destination folder to the DICOM directory. This DICOM directory will be saved to the DICOMDIR file.
 | FALSE | Add only the files in the destination folder to the DICOM directory. This DICOM directory will be saved to the DICOMDIR file.
uFlags | Specifies flags that control the behavior of some functions. This can be set to 0 (the default value) or:

Value | Meaning
DICOMDIR_REJECT_INVALID_FILEID | [0x01] If this flag is set, then any function of the LDicomDir class that takes a filename as a parameter will fail if the number of components in the File ID exceeds 8 or if the number of characters in any component of the File ID exceeds 8 (the latter case is possible only for the last component, since the short format of filenames is used for File IDs).
DICOMDIR_INSERT_ICON_IMAGE_SEQUENCE | [0x02] If this flag is set, then an Icon Image Sequence key (0088,0200) will be added to the Image Directory Record when adding a DICOM file or Data Set to the Directory. The icon image used is representative of the image stored.

Comments

As an example, if the destination folder is specified as "C:\DICOM Images\", then the following filenames will be rejected if DICOMDIR_REJECT_INVALID_FILEID is specified:

"C:\DICOM Images\Sub1\Sub2\Sub3\Sub4\Sub5\Sub6\Sub7\Sub8\Brain"

"C:\DICOM Images\Patient 1\CT-10-Knee.dic"

The first filename is rejected because the number of components in the File ID exceeds 8 (there are 9 components, starting from "Sub1"). The second filename is rejected because the number of characters in the last component, which is the short format of "CT-10-Knee.dic" (e.g., "CT-10-~1.dic") exceeds 8. On the other hand, the following filenames will not be rejected:

"C:\DICOM Images\Sub1\Sub2\Sub3\Sub4\Sub5\Sub6\Sub7\Brain"

"C:\DICOM Images\ Patient 1\Knee.dic"


DICOMELEMENT

typedef struct _DICOMELEMENT
{
GENERICLINK; /* Reserved */
L_UINT32 nTag; /* Data element tag */
L_UINT16 nVR; /* Value representation */
L_UINT32 nLength; /* length of the value stored in the data element */
L_UINT32 nVM; /* Reserved */
L_CHAR *pValue; /* Reserved */
L_UINT32 nAttach; /* Reserved */
L_UINT32 nOffset; /* Reserved */
L_VOID *pFile; /* Reserved */
} DICOMELEMENT, L_FAR * pDICOMELEMENT;

The DICOMELEMENT structure contains information concerning the Data Elements contained in a DICOM data set.

Member | Description
GENERICLINK | Reserved
nTag | Data element tag. For a list of default values, refer to Data Element Tag Constants.
nVR | Value representation. For a list of default values supported by DICOM, refer to Value Representation Constants.
nLength | Length of the value stored in the data element. If the stored value is a sequence, this value will be ELEMENT_LENGTH_MAX (0xFFFFFFFF).
nVM | Reserved.
pValue | Reserved.
nAttach | Reserved.
nOffset | Reserved.
pFile | Reserved.

Comments

When a data set is loaded from a DICOM file, only the tag, the value representation and the length of the stored value data is actually loaded. This information is stored in the DICOMELEMENT structure. You can access and modify this data set information, add to the data set, or delete items from the data set.

See Also

Functions:

LDicomDS::DeleteElement, LDicomDS::DeleteModule, LDicomDS::ExistsElement, LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindNextElement, LDicomDS::FindPrevElement, LDicomDS::GetAgeValue, LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetChildElement, LDicomDS::GetCountImage, LDicomDS::GetCountValue, LDicomDS::GetDateTimeValue, LDicomDS::GetDateValue, LDicomDS::GetDoubleValue, LDicomDS::GetFirstElement, LDicomDS::GetFloatValue, LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::GetLastElement, LDicomDS::GetLevelElement, LDicomDS::GetLongValue, LDicomDS::GetNextElement, LDicomDS::GetParentElement, LDicomDS::GetPrevElement, LDicomDS::GetRootElement, LDicomDS::GetShortValue, LDicomDS::GetStringValue, LDicomDS::GetTimeValue, LDicomDS::InsertElement, LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetAgeValue, LDicomDS::SetBinaryValue, LDicomDS::SetImage, LDicomDS::SetImageList, LDicomDS::SetCharValue, LDicomDS::SetDateTimeValue, LDicomDS::SetDateValue, LDicomDS::SetDoubleValue, LDicomDS::SetFloatValue, LDicomDS::SetLongValue, LDicomDS::SetPreamble, LDicomDS::SetShortValue, LDicomDS::SetStringValue, LDicomDS::SetTimeValue

Topics:

Working with Data Sets


DICOMGRAPHICLAYER

typedef struct tagDICOMGRAPHICLAYER
{
L_UINT uStructSize; /* size of this structure */
L_CHAR *pszLayerName; /* pointer to the "Graphic Layer" */
L_INT32 nLayerOrder; /* the "Graphic Layer Order" */
L_INT16 *puGrayscale; /* pointer to the "Graphic Layer Recommended Display Grayscale Value" */
L_INT16 *pRGBLayerColors; /* pointer to the "Graphic Layer Recommended Display RGB Value" */
L_CHAR *pszLayerDescription; /* pointer to the "Graphic Layer Description" */
}
DICOMGRAPHICLAYER, *pDICOMGRAPHICLAYER;

The DICOMGRAPHICLAYER structure is used by the functions LDicomDS::CreateLayer to create a layer, and by LDicomDS::GetLayerInfo and LDicomDS::SetLayerInfo to get and set the attributes that describe a DICOM graphic layer.

Member | Meaning
uStructSize | The size of the structure (use sizeof (DICOMGRAPHICLAYER)).
pszLayerName | Pointer to the "Graphic Layer" (0070,0002) attribute value.
nLayerOrder | "Graphic Layer Order" (0070,0062) attribute value.
puGrayscale | Pointer to the "Graphic Layer Recommended Display Grayscale Value" (0070,0066) attribute value.
pRGBLayerColors | Pointer to the "Graphic Layer Recommended Display RGB Value" (0070,0067) attribute value.
pszLayerDescription | Pointer to the "Graphic Layer Description" (0070,0068) attribute value.

Comments

The members of this structure are based on the attributes of the "Graphic Layer Module", please see "Graphic Layer Module Attributes" in the DICOM standard for more details.

Special note about the following members: pszLayerName, puGrayscale, pRGBLayerColors, and pszLayerDescription:

When you call a function, which updates this structure (ex. LDicomDS::GetLayerInfo), LEADTOOLS will fill these members with pointers to the internal memory, which LEADTOOLS manages. You must not free these pointers. When you call a function, which updates internal data from the structure you provide (ex. LDicomDS::SetLayerInfo), LEADTOOLS expects you to fill these members with pointers to memory that you have allocated and that you manage. You must free these pointers when they are no longer needed.

See Also

Functions: | LDicomDS::CreateLayer, LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo
Topics: | Working with DICOM Annotations


DICOMGRAPHICOBJECT

typedef struct tagDICOMGRAPHICOBJECT
{
L_UINT uStructSize; /* size of this structure */
L_CHAR *pszLayerName; /* pointer to the "Graphic Layer" attribute */
L_UINT uType; /* value of the "Graphic Type" */
L_UINT uUnits; /* value of the "Graphic Annotation Units" */
L_BOOL bFilled; /* value that indicates the "Graphic Filled" */
L_INT16 nPointCount; /* value that indicates the "Number of Graphic Points" */
PDICOMANNPOINT pAnnPoints; /* pointer to an array of DICOMANNPOINT structures */
} DICOMGRAPHICOBJECT, *pDICOMGRAPHICOBJECT;

The DICOMGRAPHICOBJECT describes the attributes of a "Graphic Annotation" object.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMGRAPHICOBJECT)).
pszLayerName | Pointer to the "Graphic Layer" (0070,0002) attribute value in the "Graphic Annotation Sequence" (0070,0001)
uType | The value of the attribute "Graphic Type" (0070,0023) in the "Graphic Annotation Module". Enumerated values are:
 | Value | Meaning
 | DICANN_TYPE_POINT | [0x00000001] "POINT"
 | DICANN_TYPE_POLYLINE | [0x00000002] "POLYLINE"
 | DICANN_TYPE_INTERPOLATED | [0x00000003] "INTERPOLATED"
 | DICANN_TYPE_CIRCLE | [0x00000004] "CIRCLE"
 | DICANN_TYPE_ELLIPSE | [0x00000005] "ELLIPSE"
uUnits | The value of the attribute "Graphic Annotation Units" (0070,0005) in the "Graphic Annotation Module". Enumerated values are:
 | Value | Meaning
 | DICANN_UNIT_PIXEL | [0x00000001] "PIXEL"
 | DICANN_UNIT_DISPLAY | [0x00000002] "DISPLAY"
bFilled | Boolean variable, which represents the attribute "Graphic Filled" (0070,0024).
 | Value | Meaning
 | TRUE | Y = yes
 | FALSE | N = no
nPointCount | The value of the attribute "Number of Graphic Points" (0070,0021) in the "Graphic Annotation Module".
pAnnPoints | Pointer to an array of DICOMANNPOINT structures, which represent the points of the graphical object. This member is based on the "Graphic Data" (0070,0022) attribute in the "Graphic Annotation Module".

Comments

The members of this structure are based on some of the attributes of the "Graphic Annotation Module", please see "Graphic Annotation Module Attributes" in the DICOM standard for more details.

Special note about the following members: pszLayerName and pAnnPoints:

When you call a function, which updates this structure (ex. LDicomDS::GetGraphicObjectInfo), LEADTOOLS will fill these members with pointers to the internal memory, which LEADTOOLS manages. You must not free these pointers. When you call a function, which updates internal data from the structure you provide (ex. LDicomDS::SetGraphicObjectInfo), LEADTOOLS expects you to fill these members with pointers to memory that you have allocated and that you manage. You must free these pointers when they are no longer needed.

See Also

Functions: | LDicomDS::CreateGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo
Topics: | Working with DICOM Annotations


DICOMIMAGE

typedef struct _DICOMIMAGE
{
L_INT32 nCompression; /* compression type */
L_CHAR szPhotometric[30]; /* photometric type name */
L_INT32 nPhotometric; /* photometric type code */
L_UINT32 nSamplesPerPixel; /* samples or planes */
L_INT32 nRows; /* number of rows */
L_INT32 nColumns; /* number of columns */
L_UINT32 nBitsAllocated; /* number of bits allocated */
L_UINT32 nBitsStored; /* number of bits stored */
L_UINT32 nHighBit; /* highest bit */
L_INT32 nPixelRepresentation; /* type of pixel representation */
L_INT32 nPlanarConfiguration; /* planar configuration */
L_INT32 nResolutionX; /* x resolution */
L_INT32 nResolutionY; /* y resolution */
L_INT32 nSmallestImagePixelValue; /* smallest pixel value */
L_BOOL bSmallestImagePixelValue; /* flag */
L_INT32 nLargestImagePixelValue; /* largest pixel value */
L_BOOL bLargestImagePixelValue; /* flag */
L_UINT32 nRedEntries; /* number of red entries */
L_UINT32 nRedFirst; /* first red entry */
L_UINT32 nRedBits; /* number of bits per red entry */
L_UINT32 nGreenEntries; /* number of green entries */
L_UINT32 nGreenFirst; /* first green entry */
L_UINT32 nGreenBits; /* number of bits per green entry */
L_UINT32 nBlueEntries; /* number of blue entries */
L_UINT32 nBlueFirst; /* first blue entry */
L_UINT32 nBlueBits; /* number of bits per blue entry */
L_UINT32 nPaletteEntries; /* number of palette entries */
L_UINT32 nPaletteFirst; /* first palette entry */
L_INT32 nBitsPerPixel; /* number of bits per pixel */
L_BOOL bGray; /* flag */
L_UINT32 nFrames; /* number of frames */
}
} DICOMIMAGE, L_FAR * pDICOMIMAGE;

The DICOMIMAGE structure contains image information.

Member | Description
nCompression | Type of compression used on the image.
szPhotometric | Name of the photometric type.
nPhotometric | Photometric type code.
nSamplesPerPixel | Number of samples (or planes) in the image.
nRows | Number of rows.
nColumns | Number of columns.
nBitsAllocated | Number of bits allocated for each pixel sample.
nBitsStored | Number of bits stored for each pixel sample.
nHighBit | The highest (most significant) bit set.
nPixelRepresentation | Data representation of the pixels. Unsigned integers (0) or 2’s complement (1).
nPlanarConfiguration | Planar configuration. Color-by-plane or color-by-pixel.
nResolutionX | The x resolution.
nResolutionY | The y resolution.
nSmallestImagePixelValue | The smallest pixel value in the image.
bSmallestImagePixelValue | Flag that indicates whether the smallest pixel value applies to the entire image or to one plane.
nLargestImagePixelValue | The largest pixel value in the image.
bLargestImagePixelValue | Flag that indicates whether the largest pixel value applies to the entire image or to one plane.
nRedEntries | The number of red entries in the Red Palette ColorLookup Table.
nRedFirst | The first value in the Red Palette Color Lookup Table.
nRedBits | The number of bits per entry in the Red Palette Color Lookup Table. Either 8 or 16.
nGreenEntries | The number of green entries in the Green Palette ColorLookup Table.
nGreenFirst | The first value in the Green Palette Color Lookup Table.
nGreenBits | The number of bits per entry in the Green Palette Color Lookup Table. Either 8 or 16.
nBlueEntries | The number of blue entries in the Blue Palette ColorLookup Table.
nBlueFirst | The first value in the Blue Palette Color Lookup Table.
nBlueBits | The number of bits per entry in the Blue Palette Color Lookup Table. Either 8 or 16.
nPaletteEntries | The number of palette entries.
nPaletteFirst | The smallest value of the first entries in the Red, Green and Blue Color Lookup Tables.
nBitsPerPixel | The number of bits per pixel.
bGray | Flag that indicates whether it is grayscale.
nFrames | The number of frames.

Comments

For more information about image information, refer to PS 3.3 of the DICOM Standard.

See Also

Functions: | LDicomDS::GetInfoImage
Topics: | Working with Data Sets


DICOMIOD

typedef struct _DICOMIOD
{
GENERICLINK; /* reserved */
L_UINT32 nCode; /* code */
L_CHAR *pszName; /* name */
L_CHAR nType; /* type */
L_UINT16 nUsage; /* usage */
L_CHAR *pszDescription; /* description */
} DICOMIOD, L_FAR * pDICOMIOD;

The DICOMIOD structure contains information about Information Object Definitions.

Member | Description
GENERICLINK | Reserved.
nCode | Code value that specifies the Information Object Definition. The information object may be a Class, a Module or a Tag. For lists of default values, refer to Data Element Tag Constants, IOD Class Constants, and IOD Module Constants.
pszName | Character string that contains the name of the Information Object Definition.
nType | The type of Information Object Definition you are working with. Possible values are:
 | Value | Meaning
 | IOD_TYPE_CLASS | [0x00] Class type Information Object Definition.
 | IOD_TYPE_MODULE | [0x01] Module type Information Object Definition.
 | IOD_TYPE_ELEMENT | [0x02] Element type Information Object Definition.
nUsage | Value that indicates whether the Information Object is mandatory, conditional or optional, and the type of usage. For a list of possible values, refer to IOD Usage Constants. For more information about mandatory, conditional, and optional IODs, refer to An Overview of Dicom or the DICOM Spec.
pszDescription | Character string that contains a description of the Information Object Definition.

Comments

Internally LEADTOOLS maintains a tree structure, referred to as the IOD Structure, of available Information Object Definitions (IODs). TheseIODs can include default IODs available in DICOM, as well as user defined IODs. You can access any of this information, add to the IOD Structure, or delete items from the IOD Structure using the LDicomIOD class.

See Also

Functions: | LDicomIOD::Default, LDicomIOD::Insert, LDicomIOD::Delete, LDicomIOD::Exists, LDicomIOD::Reset, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild, LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetPrev, LDicomIOD::GetNext, LDicomIOD::GetCountModule, LDicomIOD::Find, LDicomIOD::FindClass, LDicomIOD::FindModule, LDicomIOD::FindIndexModule, LDicomIOD::SetName, LDicomIOD::SetDescription
Topics: | Working with Information Object Definitions


DICOMLUTDESCRIPTOR

typedef struct tagDICOMLUTDESCRIPTOR
{
L_UINT uStructSize;
L_UINT uNumberOfEntries;
L_INT nFirstStoredPixelValueMapped;
L_UINT uEntryBits;
} DICOMLUTDESCRIPTOR, L_FAR * pDICOMLUTDESCRIPTOR;

This type is used by other structures to define a lookup table (LUT) descriptor.

Member | Description
uStructSize | The size of the structure (use sizeof(DICOMLUTDESCRIPTOR))
uNumberOfEntries | The first value in the "LUT Descriptor". Specifies the number of entries in the lookup table.
nFirstStoredPixelValueMapped | The second value in the "LUT Descriptor". Specifies the first input value mapped.
uEntryBits | The third value in the "LUT Descriptor". Specifies the number of bits for each entry in the LUT Data.

Comments

This type is currently used by DICOMMLUTATTRIBS, DICOMPALCOLORLUTATTRIBS and DICOMVOILUTATTRIBS structures to specify the "LUT Descriptor".

When used with DICOMMLUTATTRIBS it specifies the attributes of "LUT Descriptor" (0028,3002) element under the "Modality LUT Sequence" (0028,3000).

When used with DICOMPALCOLORLUTATTRIBS it specifies the attributes of "Red Palette Color Lookup Table Descriptor" (0028,1101)," Green Palette Color Lookup Table Descriptor" (0028,1102) or "Blue Palette Color Lookup Table Descriptor" (0028,1103).

When used with DICOMVOILUTATTRIBS it specifies the attributes of "LUT Descriptor" (0028,3002) element under the "VOI LUT Sequence" (0028,3010).


DICOMMLUTATTRIBS

typedef struct tagDICOMMLUTATTRIBS
{
L_UINT uStructSize;
L_BOOL bIsModalityLUTSequence;
DICOMLUTDESCRIPTOR LUTDescriptor;
L_CHAR pszLUTExplanation[DICOM_VR_LO_LENGTH+1];
L_CHAR szModalityLUTType[DICOM_VR_LO_LENGTH+1];
L_BOOL bIsRescaleSlopeIntercept;
L_DOUBLE fRescaleIntercept;
L_DOUBLE fRescaleSlope;
L_CHAR szRescaleType[DICOM_VR_LO_LENGTH+1];
} DICOMMLUTATTRIBS, * pDICOMMLUTATTRIBS;

This structure is used by the functions LDicomDS::GetModalityLUTAttributes and LDicomDS::SetModalityLUT to get and set the attributes that describe the Modality LUT.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMMLUTATTRIBS) )
bIsModalityLUTSequence | Flag that indicates whether a "Modality LUT Sequence" (0028,3000) exists in the DICOM dataset or not. When this flag is set the members LUTDescriptor, pszLUTExplanation and szModalityLUTType will be valid. Otherwise, their values are undefined. Also, if this flag is set the function LDicomDS::GetModalityLUTData can be called to retrieve the "LUT Data" for a "Modality LUT Sequence". Otherwise, this data will be missing.
LUTDescriptor | Value of the "LUT Descriptor" (0028,3002) element under the "Modality LUT Sequence" (0028,3000). This member is only defined when bIsModalityLUTSequence is set to TRUE.
pszLUTExplanation | Value of the "LUT Explanation" (0028,3003) element under the "Modality LUT Sequence" (0028,3000). This member is only defined when bIsModalityLUTSequence is set to TRUE.
 | The maximum length of this string is DICOM_VR_LO_LENGTH, which is defined as 64.
szModalityLUTType | Value of the "Modality LUT Type" (0028,3004) element under the "Modality LUT Sequence" (0028,3000). This member is only defined when bIsModalityLUTSequence is set to TRUE.
 | The maximum length of this string is DICOM_VR_LO_LENGTH, which is defined as 64.
bIsRescaleSlopeIntercept | Flag that indicates whether Rescale Intercept(0028,1052) and Rescale Slope(0028,1053) exist in the DICOM dataset or not. When this flag is set the members fRescaleIntercept, fRescaleSlope and szRescaleType will be valid. Otherwise, their values are undefined.
fRescaleIntercept | Value of the "Rescale Intercept" (0028,1052) element. This member is only defined when bIsRescaleSlopeIntercept is set to TRUE.
fRescaleSlope | Value of the "Rescale Slope" (0028,1053) element. This member is only defined when bIsRescaleSlopeIntercept is set to TRUE.
szRescaleType | Value of the "Rescale Type" (0028,1054) element. This member is only defined when bIsRescaleSlopeIntercept is set to TRUE. The maximum length of this string is DICOM_VR_LO_LENGTH, which is defined as 64.

Comments

The members of this structure are based on the attributes of the "Modality LUT Module". Please see "Modality LUT Module Attributes" in the DICOM standard for more details.

The DICOM standard states that:

"Either a Modality LUT Sequence containing a single Item or Rescale Slope and Intercept values shall be present, but not both."

For this reason, both bIsModalityLUTSequence and bIsRescaleSlopeIntercept cannot be set to TRUE at the same time.

When using this structure with the LDicomDS::SetModalityLUT function make sure to initialize uStructSize to be sizeof(DICOMMLUTATTRIBS).Then you must set one of the flags, either bIsModalityLUTSequence or bIsRescaleSlopeIntercept. If you set bIsModalityLUTSequence, you must populate LUTDescriptor, pszLUTExplanation and szModalityLUTType with valid values. If you set bIsRescaleSlopeIntercept, you must populate fRescaleIntercept,fRescaleSlope and szRescaleType with valid values.

According to the DICOM standard when the number of table entries under the "LUT Data" (0028,3006) element is equal to 2^16 then the value of LUTDescriptor.uNumberOfEntries shall be 0. However, the 2 functions, LDicomDS::GetModalityLUTAttributes and LDicomDS::SetModalityLUT, do NOT have this limitation. When you call LDicomDS::GetModalityLUTAttributes, it will automatically set value in the dataset to 0 if LUTDescriptor.uNumberOfEntries is equal to 2^16. The same applies to LDicomDS::SetModalityLUT.


DICOMMODULE

typedef struct _DICOMMODULE
{
L_UINT32 nModule; /* module code */
L_UINT32 nCount; /* number of elements */
pDICOMELEMENT pElement[1000]; /* an array of pointers to DICOMELEMENT structures */
} DICOMODULE, L_FAR * pDICOMMODULE;

The DICOMMODULE structure contains information about Modules.

Member | Description
nModule | Code value that specifies the Module. For a list of default values, refer to IOD Module Constants.
nCount | Number of elements within the specified module.
pElement | An array of pointers to DICOMELEMENT structures. The DICOMELEMENT structures contain information about the elements contained in the module specified in nModule.

See Also

Functions: | LDicomDS::FindIndexModule, LDicomDS::FindModule, LDicomDS::InsertModule
Topics: | Working with Data Sets


DICOMPALCOLORLUTATTRIBS

typedef struct tagDICOMPALCOLORLUTATTRIBS
{
L_UINT uStructSize;
DICOMLUTDESCRIPTOR RedLUTDescriptor;
DICOMLUTDESCRIPTOR GreenLUTDescriptor;
DICOMLUTDESCRIPTOR BlueLUTDescriptor;
L_CHAR szUID[DICOM_VR_UI_LENGTH+1];
L_BOOL bIsSegmented;
} DICOMPALCOLORLUTATTRIBS, * pDICOMPALCOLORLUTATTRIBS;

This structure is used by the functions LDicomDS::GetPaletteColorLUTAttributes and LDicomDS::SetPaletteColorLUTAttributes to get and set the attributes that describe the "Palette Color Lookup Table".

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMPALCOLORLUTATTRIBS) )
RedLUTDescriptor | Value of the "Red Palette Color Lookup Table Descriptor" (0028,1101) element.
GreenLUTDescriptor | Value of the "Green Palette Color Lookup Table Descriptor" (0028,1102) element.
BlueLUTDescriptor | Value of the "Blue Palette Color Lookup Table Descriptor" (0028,1103) element.
szUID | Value of the "Palette Color Lookup Table UID" (0028,1199) element. The maximum length of this string is DICOM_VR_UI_LENGTH, which is defined as 64.
bIsSegmented | Flag that indicates whether "Palette Color Lookup Table Data" is segmented or not, this flag is set when "Segmented Red Palette Color Lookup Table Data" (0028,1221) , "Segmented Green Palette Color Lookup Table Data" (0028,1222) and Segmented Blue Palette Color Lookup Table Data (0028,1223) exist in the DICOM dataset.

Comments

The members of this structure are based on the attributes of the "Palette Color Lookup Module". Please see "Palette Color Lookup Module" in the DICOM standard for more details.

According to the DICOM standard when the number of table entries under the "Palette Color Lookup Table" is equal to 2^16 then the value of LUTDescriptor.uNumberOfEntries shall be 0. However, the 2 functions, LDicomDS::GetPaletteColorLUTAttributes and LDicomDS::SetPaletteColorLUTAttributes, do NOT have this limitation. When you call LDicomDS::GetPaletteColorLUTAttributes it will automatically set the value inside the dataset to 0 if LUTDescriptor.uNumberOfEntries is equal to 2^16. The same applies to LDicomDS::SetPaletteColorLUTAttributes.


DICOMPALETTECOLORLUTTYPE

typedef enum tagDICOMPALETTECOLORLUTTYPE
{
DICOMPALETTECOLORLUTTYPE_RED,
DICOMPALETTECOLORLUTTYPE_GREEN,
DICOMPALETTECOLORLUTTYPE_BLUE
} DICOMPALETTECOLORLUTTYPE, *pDICOMPALETTECOLORLUTTYPE;

The DICOMPALETTECOLORLUTTYPE data type is used within LDicomDS::GetPaletteColorLUTData and LDicomDS::SetPaletteColorLUTData to determine which "Palette Color Lookup Table" data to get or set.

Value | Meaning
DICOMPALETTECOLORLUTTYPE_RED | "Red Palette Color Lookup Table Data" (0028,1201).
DICOMPALETTECOLORLUTTYPE_GREEN | "Green Palette Color Lookup Table Data" (0028,1202).
DICOMPALETTECOLORLUTTYPE_BLUE | "Blue Palette Color Lookup Table Data" (0028,1203).


DICOMPRESSTATEINFO

typedef struct tagDICOMPRESSTATEINFO
{
L_UINT uStructSize; /* size of this structure */
L_INT32 nInstanceNumber; /* the "Instance Number" */
L_CHAR *pszPresLabel; /* pointer to the "Presentation Label" */
L_CHAR *pszPresDescription; /* pointer to the "Presentation Description" */
pVALUEDATE pPresCreationDate; /* pointer to the "Presentation Creation Date" */
pVALUETIME pPresCreationTime /* pointer to the "Presentation Creation Time" */
L_CHAR *pszPresCreator; /* pointer to the "Presentation Creator’s Name" */
} DICOMPRESSTATEINFO, *pDICOMPRESSTATEINFO;

This structure is used by the functions LDicomDS::GetPresStateInfo and LDicomDS::SetPresStateInfo to get and set the attributes that describe the "Presentation State Module".

Member | Meaning
uStructSize | The size of the structure (use sizeof (DICOMPRESSTATEINFO))
nInstanceNumber | "Instance Number" (0020,0013) attribute value
pszPresLabel | Pointer to the "Presentation Label"(0070,0080) attribute value
pszPresDescription | Pointer to the "Presentation Description" (0070,0081) attribute value.
pPresCreationDate | Pointer to the "Presentation Creation Date" (0070,0082) attribute value.
pPresCreationTime | Pointer to the "Presentation Creation Time" (0070,0083) attribute value.
pszPresCreator | Pointer to the "Presentation Creator’s Name" (0070,0084) attribute value

Comments

The members of this structure are based on the attributes of the "Presentation State Module", please see "Presentation State Module Attributes" in the DICOM standard for more details.

Special note about the following members: pszPresLabel, pszPresDescription, pPresCreationDate, pPresCreationTime and pszPresCreator: When you call a function, which updates this structure (ex. LDicomDS::GetPresStateInfo), LEADTOOLS will fill these members with pointers to the internal memory, which LEADTOOLS manages. You must not free these pointers. When you call a function, which updates internal data from the structure you provide (ex. LDicomDS::SetPresStateInfo), LEADTOOLS expects you to fill these members with pointers to memory that you have allocated and that you manage. You must free these pointers when they are no longer needed.

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo.
Topics: | Working with DICOM Annotations


DICOMTAG

typedef struct _DICOMTAG
{
GENERICLINK; /* reserved */
L_UINT32 nCode; /* code */
L_UINT32 nMask; /* mask */
L_CHAR *pszName; /* name */
L_UINT16 nVR; /* value representation */
L_UINT32 nMinVM; /* minimum value multiplicity */
L_UINT32 nMaxVM; /* maximum value multiplicity */
L_UINT32 nDivideVM; /* value used to divide the value multiplicity */
} DICOMTAG, L_FAR * pDICOMTAG;

The DICOMTAG structure contains information about supported tags.

Member | Description
GENERICLINK | Reserved.
nCode | Code that indicates the tag. For a list of default values, refer to Data Element Tag Constants.
nMask | Masking value. Masking allows you to insert multiple elements in the same entry in the table.
pszName | Character string that contains the name of the tag. To see the default values for the Tag Names, refer to the Default Data Element Tag Table.
nVR | Value representation code that indicates the type of value stored in the data element. For a list of default values supported by DICOM, refer to Value Representation Constants.
nMinVM | Value that indicates the minimum number of values that may be stored in the Value Field of the Data Element.
nMaxVM | Value that indicates the maximum number of values that may be stored in the Value Field of the Data Element.
nDivideVM | Value used to divide the value multiplicity. When multiple values are stored in the value field of a data element, the number of values present must be evenly divisible by nDivideVM. For most items nDivideVM will be 1. However, if the values stored in the value field are RGB triplets, for example, you would have to store three values for each triplet. You could store 12 values, since 12 values would be 4 triplets, however, you could not store 13 values. In this case nDivideVM would be 3.

Comments

Internally LEADTOOLS maintains a table or list of available tag values. These values can include default values for standard tags available in DICOM, as well as user defined tags. You can access any of this information, add to the table, or delete items from the table using the L_DicomXXXTag functions. To see the default values, refer to the Default Data Element Tag Table.

See Also

Functions: | LDicomTag::Default, LDicomTag::Insert, LDicomTag::Delete, LDicomTag::Exists, LDicomTag::Reset, LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::GetCount, LDicomTag::Find, LDicomTag::FindIndex, LDicomTag::SetName
Topics: | Working with Tags


DICOMTEXTOBJECT

typedef struct tagDICOMTEXTOBJECT
{
L_UINT uStructSize;
L_CHAR *pszLayerName;
L_CHAR *pszTextValue;
L_FLOAT *pTLHCorner;
L_FLOAT *pBRHCorner;
L_UINT uBoundingBoxUnits;
L_UINT uTextJustification;
L_FLOAT *pAnchorPoint;
L_UINT uAnchorPointUnits;
L_BOOL bAnchorPointVisible;
} DICOMTEXTOBJECT, *pDICOMTEXTOBJECT;

The DICOMTEXTOBJECT describes the attributes of a "Text Annotation" object.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMTEXTOBJECT)).
pszLayerName | Pointer to the "Graphic Layer" (0070,0002) attribute value in the "Graphic Annotation Sequence" (0070,0001)
pszTextValue | Pointer to the "Unformatted Text Value" (0070,0006) attribute value.
pTLHCorner | Pointer to the "Bounding Box Top Left Hand Corner" (0070,0010) attribute value.
pBRHCorner | Pointer to the "Bounding Box Bottom Right Hand Corner" (0070,0011) attribute value.
uBoundingBoxUnits | "Bounding Box Annotation Units" (0070,0003) attribute value. Enumerated values are:
 | Value | Meaning
 | DICANN_UNIT_PIXEL | [0x00000001] "PIXEL".
 | DICANN_UNIT_DISPLAY | [0x00000002] "DISPLAY"
uTextJustification | "Bounding Box Text Horizontal Justification" (0070,0012) attribute value. Enumerated values are:
Value | Meaning
DICANN_TEXT_LEFT | [0x00000000] "LEFT"
DICANN_TEXT_RIGHT | [0x00000001] "RIGHT".
DICANN_TEXT_CENTER | [0x00000002] "CENTER".
pAnchorPoint | Pointer to the "Anchor Point"(0070,0014) attribute value.
uAnchorPointUnits | "Anchor Point Annotation Units" (0070,0004) attribute value. Enumerated values are:
Value | Meaning
DICANN_UNIT_PIXEL | [0x00000001] "PIXEL".
DICANN_UNIT_DISPLAY | [0x00000002] "DISPLAY".

bAnchorPointVisible

"Anchor Point Visibility" (0070,0015) attribute value. Possible values are:

Value | Meaning
TRUE | "Y"
FALSE | "N"

Comments

The members of this structure are based on some of the attributes of the "Graphic Annotation Module", please see "Graphic Annotation Module Attributes" in the DICOM standard for more details.

Special note about the following members: pszLayerName, pszTextValue, pTLHCorner, pBRHCorner and pAnchorPoint:

When you call a function, which updates this structure (ex. LDicomDS::GetTextObjectInfo), LEADTOOLS will fill these members with pointers to the internal memory, which LEADTOOLS manages. You must not free these pointers. When you call a function, which updates internal data from the structure you provide (ex. LDicomDS::SetTextObjectInfo), LEADTOOLS expects you to fill these members with pointers to memory that you have allocated and that you manage. You must free these pointers when they are no longer needed.

See Also

Functions: | LDicomDS::CreateTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo.
Topics: | Working with DICOM Annotations


DICOMUID

typedef struct _DICOMUID
{
GENERICLINK; /* reserved */
L_CHAR *pszCode; /* code */
L_CHAR *pszName; /* name */
L_INT nType; /* type */
} DICOMUID, L_FAR * pDICOMUID;

The DICOMUID structure contains information about Unique Identifiers.

Member | Description
GENERICLINK | Reserved.
pszCode | Unique identifier code. For a list of default values, refer to the Default UID Table.
pszName | The name of the unique identifier. For a list of default values, refer to the Default UID Table.
nType | Type of UID. Possible values are:
 | Value | Meaning
 | UID_TYPE_OTHER | Unknown
 | UID_TYPE_TRANSFER1 | Transfer Syntax - Uncompressed Image
 | UID_TYPE_TRANSFER2 | Transfer Syntax - Compressed Image
 | UID_TYPE_CLASS | SOP Class
 | UID_TYPE_META_CLASS | Meta SOP Class
 | UID_TYPE_INSTANCE | SOP Instance
 | UID_TYPE_APPLICATION | Application Context Name

Comments

Internally LEADTOOLS maintains a table or list of available unique identifiers. These values can include default values for standard unique identifiers available in DICOM, as well as user defined unique identifiers. You can access any of this information, add to the table, or delete items from the table using the LDicomUID class member functions. To see the default values, refer to the Default UID Table.

See Also

Functions: | LDicomUID::Default, LDicomUID::Insert, LDicomUID::Delete, LDicomUID::Exists, LDicomUID::Reset, LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::GetCount, LDicomUID::Find, LDicomUID::FindIndex, LDicomUID::SetName
Topics: | Working with Unique Identifiers


DICOMVOILUTATTRIBS

typedef struct tagDICOMVOILUTATTRIBS
{
L_UINT uStructSize;
DICOMLUTDESCRIPTOR LUTDescriptor;
L_CHAR pszLUTExplanation[DICOM_VR_LO_LENGTH+1];
}DICOMVOILUTATTRIBS , * pDICOMVOILUTATTRIBS;

This structure is used by the functions LDicomDS::GetVOILUT and LDicomDS::SetVOILUT to get and set the attributes that describe the VOI LUT.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMVOILUTATTRIBS))
LUTDescriptor | Value of the "LUT Descriptor" (0028,3002) element under the "VOI LUT Sequence" (0028,3010).
pszLUTExplanation | Value of the "LUT Explanation" (0028,3003) element under the "VOI LUT Sequence" (0028,3010). The maximum length of this string is DICOM_VR_LO_LENGTH, which is defined as 64.

Comments

The members of this structure are based on the attributes of the "VOI LUT Module". Please see "VOI LUT Module Attributes" in the DICOM standard for more details.


DICOMVR

typedef struct _DICOMVR
{
GENERICLINK; /* reserved */
L_UINT16 nCode; /* code */
L_CHAR *pszName; /* name of the representation */
L_UINT32 nLength; /* length */
L_UINT16 nRestrict; /* restriction on the length */
L_UINT16 nUnitSize; /* size of the smallest item */
} DICOMVR, L_FAR * pDICOMVR;

The DICOMVR structure contains information about supported value representations.

Member | Description
GENERICLINK | Reserved.
nCode | Code that indicates the type of value stored in the data element. For a list of default values supported by DICOM, refer to Value Representation Constants.
pszName | Character string that contains the name of the Value Representation. To see the default values for the Value Representation Names, refer to the Default Value Representation Table.
nLength | The length of the value to be stored in the data element.
nRestrict | Restrictions on the length. Possible values are given below. Values may be combined using the OR ( | ) operator.
 | Value | Meaning
 | VR_FIXED | [0x00] DICOMVR.nLength is a fixed number of bytes.
 | VR_MAXIMUM | [0x01] DICOMVR.nLength is the maximum number of bytes allowed.
 | VR_MAXIMUM_GROUP | [0x02] DICOMVR.nLength is the maximum number of bytes allowed per component group
 | VR_ANY | [0x03] Any length is valid.
 | VR_NOT_APPLICABLE | [0x04] DICOMVR.nLength is not applicable
 | VR_BINARY | [0x0100] Binary value.
 | VR_STRING | [0x0200] String value (The character '\' is used as the delimiter between values for multiple data elements).
 | VR_TEXT | [0x0400] Text value. (Data elements with this VR cannot be multi-valued).
nUnitSize | The size of the smallest item that can be stored in the data element.

Comments

Internally LEADTOOLS maintains a table or list of available value representations. These value representations can include default value representations available in DICOM, as well as user defined value representations. You can access any of this information, add to the table, or delete items from the table using the LDicomVR class member functions. To see the default values, refer to the Value Representation Table.

See Also

Functions: | LDicomVR::Default, LDicomVR::Insert, LDicomVR::Delete, LDicomVR::Exists, LDicomVR::Reset, LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::GetCount, LDicomVR::Find, LDicomVR::FindIndex, LDicomVR::SetName
Topics: | Working with Value Representations


DICOMWAVEFORMANNOTATION

typedef struct tagDICOMWAVEFORMANNOTATION
{
L_UINT uStructSize; /* Structure Size */
L_CHAR * pszUnformattedTextValue; /* Unformatted Text Value */
pDICOMCODESEQUENCEITEM pCodedName; /* Pointer to the Concept Name Code Sequence */
pDICOMCODESEQUENCEITEM pCodedValue; /* Pointer to the Concept Code Sequence */
L_DOUBLE* pNumericValue; /* Pointer to the Numeric Value */
L_UINT32 uNumericValueCount; /* Numeric Value Buffer Size */
pDICOMCODESEQUENCEITEM pMeasurementUnits; /* Pointer to the Measurement Units Code Sequence */
L_UINT16 uTemporalRangeType; /* Temporal Range Type */
L_UINT32* pRefSamplePositions; /* Pointer to the Referenced Sample Positions */
L_DOUBLE* pRefTimeOffsets; /* Pointer to the Referenced Time Offsets */
pVALUEDATETIME pRefDatetime; /* Pointer to the Referenced Datetime */
L_UINT32 uTemporalPointCount; /* Buffer Sizes */
L_UINT16* puAnnGroupNumber; /* Pointer to the Annotation Group Number */
} DICOMWAVEFORMANNOTATION, * pDICOMWAVEFORMANNOTATION;

The members of this structure represent the set of attributes that describe a DICOM waveform annotation.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMWAVEFORMANNOTATION) )
pszUnformattedTextValue | Character string that contains the "Unformatted Text Value" (0070,0006) element. If this member is not NULL, then pCodedName, pCodedValue, pNumericValue and uNumericValueCount will be ignored.
pCodedName | A pointer to a structure of type DICOMCODESEQUENCEITEM which represents the single item that is included under the "Concept Name Code Sequence" (0040,A043) in the "Waveform Annotation Module". Ignored if pszUnformattedTextValue is not NULL.
pCodedValue | A pointer to a structure of type DICOMCODESEQUENCEITEM which represents the single item that is included under the "Concept Code Sequence" (0040,A168) in the "Waveform Annotation Module". Ignored if pszUnformattedTextValue is not NULL.
pNumericValue | A pointer to a buffer that represents the values under the "Numeric Value" (0040,A30A) element, the size of this buffer should be the same as uNumericValueCount. Ignored if pszUnformattedTextValue is not NULL.
uNumericValueCount | Size of the pNumericValue buffer. Ignored if pszUnformattedTextValue is not NULL.
pMeasurementUnits | A pointer to a structure of type DICOMCODESEQUENCEITEM which represents the single item that is included under the "Measurement Units Code Sequence" (0040,08EA) in the "Waveform Annotation Module".
uTemporalRangeType | Value of the "Temporal Range Type" (0040,A130) element. Possible value are:
 | Member | Description
 | DICOM_TEMPORAL_RANGE_TYPE_UNDEFINED | [0x00] Undefined.
 | DICOM_TEMPORAL_RANGE_TYPE_POINT | [0x01] POINT (a single temporal point)
 | DICOM_TEMPORAL_RANGE_TYPE_MULTIPOINT | [0x02] MULTIPOINT (multiple temporal points)
 | DICOM_TEMPORAL_RANGE_TYPE_SEGMENT | [0x03] SEGMENT (a range between two temporal points)
 | DICOM_TEMPORAL_RANGE_TYPE_MULTISEGMENT | [0x04] MULTISEGMENT (multiple segments, each denoted by two temporal points)
 | DICOM_TEMPORAL_RANGE_TYPE_BEGIN | [0x05] BEGIN (a range beginning at one temporal point, and extending beyond the end of the acquired data)
 | DICOM_TEMPORAL_RANGE_TYPE_END | [0x06] END (a range beginning before the start of the acquired data, and extending to (and including) the identified temporal point).
pRefSamplePositions | Pointer to a buffer that represents the values under the "Referenced Sample Positions" (0040,A132) element, the size of this buffer should be the same as uTemporalPointCount. This parameter is ignored if uTemporalPointCount is 0.
PRefTimeOffsets | Pointer to a buffer that represents the values under the "Referenced Time Offsets" (0040,A138) element, the size of this buffer should be the same as uTemporalPointCount. This parameter is ignored if uTemporalPointCount is 0 or if pRefSamplePositions is not NULL.
pRefDatetime | Pointer to an array of type VALUEDATETIME that represents the values under the "Referenced Datetime" (0040,A13A) element, the size of this buffer should be the same as uTemporalPointCount. This parameter is ignored if uTemporalPointCount is 0 or if either pRefSamplePositions or pRefTimeOffsets is not NULL.
uTemporalPointCount | Size of the buffers pointed to by pRefSamplePositions, pRefTimeOffsets and pRefDatetime.
puAnnGroupNumber | Pointer to a value that contains the "Annotation Group Number" (0040,A180) element. To ignore Set to NULL, to ignore.

Comments

This data type is based on the attributes of the "Waveform Annotation Module" and is mainly used with the functions LDicomWaveformChannel::GetAnnotation and LDicomWaveformChannel::AddAnnotation to support waveform annotations.


DICOMWINDOWATTRIBS

typedef struct tagDICOMWINDOWATTRIBS
{
L_UINT uStructSize;
L_DOUBLE fWindowCenter ; // Window Center
L_DOUBLE fWindowWidth; // Window Width
L_CHAR pszWindowCWExplanation[DICOM_VR_LO_LENGTH+1];
}DICOMWINDOWATTRIBS , * pDICOMWINDOWATTRIBS;

This structure is used by the functions LDicomDS::GetWindow and LDicomDS::SetWindow to get and set the attributes that describe window center and window width.

Member | Description
uStructSize | The size of the structure (use sizeof (DICOMWINDOWATTRIBS))
fWindowCenter | Value of the "Window Center" (0028,1050) element.
fWindowWidth | Value of the "Window Width" (0028,1051) element.
pszWindowCWExplanation | Value of the "Window Center & Width Explanation" (0028,1055) element. The maximum length of this string is DICOM_VR_LO_LENGTH, which is defined as 64.

Comments

The members of this structure are based on the attributes of the "VOI LUT Module". Please see "VOI LUT Module Attributes" in the DICOM standard for more details.

fWindowWidth shall always be greater than or equal to 1.


FILEJ2KOPTIONS

typedef struct _FILEJ2KOPTIONS
{
L_INT nSize;
L_BOOL bUseColorTransform;
L_BOOL bDerivedQuantization;
J2KCOMPRESSIONCONTROL uCompressionControl;
L_FLOAT fCompressionRatio;
L_UINT32 uTargetFileSize;
L_UINT32 uXOsiz;
L_UINT32 uYOsiz;
L_UINT32 uXTsiz;
L_UINT32 uYTsiz;
L_UINT32 uXTOsiz;
L_UINT32 uYTOsiz;
L_UINT32 uXRsiz [J2K_MAX_COMPONENTS_NUM];
L_UINT32 uYRsiz [J2K_MAX_COMPONENTS_NUM];
L_UINT uDecompLevel;
L_UINT uProgressOrder;
L_INT nCodBlockWidth;
L_INT nCodBlockHeight;
CODBLOCKSTYLE CodBlockStyleFlags;
L_UINT uGuardBits;
L_INT nDerived_Base_Mantissa;
L_INT nDerived_Base_Exponent;
L_BOOL bUse_SOP_Marker;
L_BOOL bUse_EPH_Marker;
J2KREGIONOFINTEREST uROIControl;
L_BOOL bUseROI;
L_FLOAT fROIWeight;
RECT rcROI;
} FILEJ2KOPTIONS, L_FAR * pFILEJ2KOPTIONS;

The FILEJ2KOPTIONS structure provides information for JPEG 2000 compression options.

Member | Description
nSize | Size of this structure.
bUseColorTransform | Flag that indicates whether to convert an RGB image to YUV space before compressing. (YUV space provides greater compression with higher image quality.) Possible values are:
 | Value | Meaning
 | TRUE | Convert to YUV space before compressing. (Default)
 | FALSE | Do not convert to YUV space before compressing.
bDerivedQuantization | Flag that indicates whether to use derived quantization or expounded quantization. Possible values are:
 | Value | Meaning
 | TRUE | Use derived quantization.
 | FALSE | Use expounded quantization.

uCompressionControl | Flag that indicates how to determine the resulting compression. The value of this member determines which structure member should be used for determining the compression. Possible values are:
 | Value | Meaning
 | J2K_COMPRESSION_RATIO | Compress the image based on the value of the fCompressionRatio member.
 | J2K_COMPRESSION_TARGETSIZE | Compress the image based on the target file size in the uTargetFileSize member.
 | J2K_COMPRESSION_QFACTOR | Compress the image based on the quality factor passed to any of the functions, which can be used to replace or insert image(s) in the Pixel Data Element.

fCompressionRatio | Value that indicates the compression ratio to use. This value is used only if the uCompressionControl member is set to J2K_COMPRESSION_RATIO.
uTargetFileSize | Value that indicates the size of the target JPEG 2000 stream, in bytes. This value is used only if the uCompressionControl member is set to J2K_COMPRESSION_TARGETSIZE.
uXOsiz | Horizontal offset from the origin of the reference grid to the left side of the image area.
uYOsiz | Vertical offset from the origin of the reference grid to the top of the image area.
uXTsiz | Width of one reference tile, with respect to the reference grid.
uYTsiz | Height of one reference tile, with respect to the reference grid.
uXTOsiz | Horizontal offset from the origin of the reference grid to the left side of the first tile.
uYTOsiz | Vertical offset from the origin of the reference grid to the top of the first tile.
uXRsiz | Reserved.
uYRsiz | Reserved.
uDecompLevel | Number of resolution levels in the compressed file. The maximum number of levels depends on the size of the image. Passing values that are too large will cause the save operation to fail. Each resolution level is one-half the size of the previous resolution, starting with the full image resolution. The default value is 5.
uProgressOrder | Indicates the order of progression. Possible values are:
 | Value | Description
 | J2K_LAYER_RESOLUTION_COMPONENT_POSITION | [0] Quality–axis order.
 | J2K_RESOLUTION_LAYER_COMPONENT_POSITION | [1] Resolution-axis order.
 | J2K_RESOLUTION_POSITION_COMPONENT_LAYER | [2] Resolution-axis order.
 | J2K_POSITION_COMPONENT_RESOLUTION_LAYER | [3] Position–axis order.
 | J2K_COMPONENT_POSITION_RESOLUTION_LAYER | [4] Color-axis order.

nCodBlockWidth | Width of the code block, following wavelet transformation. The value must be a power of 2. It must be at least 4 and less than or equal to 1024.
nCodBlockHeight | Height of the code block, following wavelet transformation. The value must be a power of 2. It must be at least 4 and less than or equal to 1024.
CodBlockStyleFlags | Bit flags that indicate the behavior of the code block. For more information, refer to the CODBLOCKSTYLE structure.
uGuardBits | Number of extra bits to consider when encoding an image. This prevents coding overflow. Possible values are 0 - 7. The default is 2.
nDerived_Base_Mantissa | The base mantissa used for derived quantization.
nDerived_Base_Exponent | The base exponent used for derived quantization.
bUse_SOP_Marker | Flag that indicates whether to use the SOP marker. Possible values are:
 | Value | Meaning
 | TRUE | Use the SOP marker.
 | FALSE | Do not use the SOP marker. (Default)

bUse_EPH_Marker | Flag that indicates whether to use the EPH marker. Possible values are:
 | Value | Meaning
 | TRUE | Use the EPH marker.
 | FALSE | Do not use the EPH marker. (Default)
bUseROI | Flag that indicates whether to use a region of interest. Possible values are:
 | Value | Meaning
 | TRUE | Use a region of interest as specified in the uROIControl member.
 | FALSE | Do not use a region of interest. If you do not want to use a region of interest, set this to FALSE. Otherwise, there may be a significant compression and speed performance loss.

fROIWeight | Reserved for future use.
rcROI | RECT structure that contains the boundaries of the region of interest within the image.
uROIControl | Flag that indicates the region of interest to use. For a list of possible values refer to J2KREGIONOFINTEREST.
 | Value | Meaning
 | J2K_USE_OPTION_RECT | Use the rectangle specified in the rcROI member of the FILEJ2KOPTIONS structure to define the region of interest.
 | J2K_USE_LEAD_REGION | Use the LEAD bitmap region to define the region of interest. (Any region shape is acceptable; it will be converted internally by the filter to a rectangle.)

Comments

The resulting stream size/ compression ratio can be determined in several ways. Depending on the value set in the uCompressionControl member, the user can set the size of the target JPEG 2000 stream, the actual compression ratio to use during compression or the quality factor to use during compression. If uCompressionControl is set to J2K_COMPRESSION_RATIO, then the compression to use is based on the compression ratio in the fCompressionRatio data member. If uCompressionControl is set to J2K_COMPRESSION_TARGETSIZE, the compression to use is based on the desired target stream size in the uTargetFileSize data member. If uCompressionControl is set to J2K_COMPRESSION_QFACTOR, then compression is used based on the QFactor passed to any of the functions which can be used to replace or insert image(s) in the Pixel Data Element.

The bUse_SOP_Marker and the bUse_EPH_Marker indicate whether to include markers at the "Start of Packet" and "End of Packet Header". These markers help detect file corruption during transmission.

There are two types of quantization for lossy compression, Scalar Derived Quantization and Scalar Expounded Quantization. In Scalar Derived Quantization mantissa and exponent values for the LL Subband only are signaled. The mantissa and exponent for the other subbands are derived from the mantissa and exponent signaled for the LL subband.

In Scalar Expounded Quantization, the mantissa and exponent values for each subband are signaled.

The quantization step size for a subband is determined based on the following equation, where R = bpp for the subband:

Quantization Step = (2 (R - Exponent) ) * [1 + (Mantissa / 2048)]

The values of the uXOsiz, uYOsiz, uXTsiz, uYTsiz, uXTOsiz and uYTOsiz structure members are used to create tiles within the image. Arbitrary tile sizes are allowed. All tiles are the same size, except for the border tiles. Each tile can be compressed individually. This can decrease memory usage while the program is running, but can also generate artifacts at the edges of the tiles. Artifacts generally increase as the size of the tile decreases. By default, there is one tile that contains the entire image.


FILMBOXPARAMETERS

typedef struct tagFILMBOXPARAMETERS
{
L_UINT uStructSize;
L_CHAR L_FAR * pszImageDisplayFormat;
L_CHAR L_FAR * pszFilmOrientation;
L_CHAR L_FAR * pszFilmSizeID;
L_CHAR L_FAR * pszMagnificationType;
L_INT32 nMaxDensity;
L_CHAR L_FAR * pszConfigurationInformation;
L_CHAR L_FAR * pszAnnotationDisplayFormatID;
L_CHAR L_FAR * pszSmoothingType;
L_CHAR L_FAR * pszBorderDensity;
L_CHAR L_FAR * pszEmptyImageDensity;
L_INT32 nMinDensity;
L_CHAR L_FAR * pszTrim;
L_INT32 nIllumination;
L_INT32 nReflectedAmbientLight;
L_CHAR L_FAR L_FAR * pszRequestedResolutionID;

} FILMBOXPARAMETERS, * pFILMBOXPARAMETERS;

The FILMBOXPARAMETERS structure is used to specify the parameters of Film Boxes.

Member | Description
uStructSize | Size of the structure.
pszImageDisplayFormat | Image Display Format (2010,0010).
pszFilmOrientation | Film Orientation (2010,0040).
pszFilmSizeID | Film Size ID (2010,0050).
pszMagnificationType | Magnification Type (2010,0060).
nMaxDensity | Max Density (2010,0130).
pszConfigurationInformation | Configuration Information (2010,0150).
pszAnnotationDisplayFormatID | Annotation Display Format ID (2010,0030).
pszSmoothingType | Smoothing Type (2010,0080).
pszBorderDensity | Border Density (2010,0100).
pszEmptyImageDensity | Empty Image Density (2010,0110).
nMinDensity | Min Density (2010,0120).
pszTrim | Trim (2010,0140).
nIllumination | Illumination (2010,015E).
nReflectedAmbientLight | Reflected Ambient Light (2010,0160).
pszRequestedResolutionID | Requested Resolution ID (2020,0050).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure is used with the functions LDicomPrintSCU::CreateFilmBox and LDicomPrintSCU::UpdateFilmBox, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetDefaultFilmBoxParameters sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::UpdateFilmBox, LDicomPrintSCU::GetDefaultFilmBoxParameters
Topics: | Print Management SCU


FILMSESSIONPARAMETERS

typedef struct tagFILMSESSIONPARAMETERS
{
L_UINT uStructSize;
L_INT32 nNumberOfCopies;
L_CHAR L_FAR * pszPrintPriority;
L_CHAR L_FAR * pszMediumType;
L_CHAR L_FAR * pszFilmDestination;
L_CHAR L_FAR * pszFilmSessionLabel;
L_INT32 nMemoryAllocation;
L_CHAR L_FAR * pszOwnerID;

} FILMSESSIONPARAMETERS, * pFILMSESSIONPARAMETERS;

The FILMSESSIONPARAMETERS structure is used to specify the parameters of Film Sessions.

Member | Description
uStructSize | Size of the structure.
nNumberOfCopies | Number of Copies (2000,0010).
pszPrintPriority | Print Priority (2000,0020).
pszMediumType | Medium Type (2000,0030).
pszFilmDestination | Film Destination (2000,0040).
pszFilmSessionLabel | Film Session Label (2000,0050).
nMemoryAllocation | Memory Allocation (2000,0060).
pszOwnerID | Owner ID (2100,0160).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure is used with the functions LDicomPrintSCU::CreateFilmSession and LDicomPrintSCU::UpdateFilmSession, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetDefaultFilmSessionParameters sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::UpdateFilmSession, LDicomPrintSCU::GetDefaultFilmSessionParameters
Topics: | Print Management SCU


HDICOMPDU

LEADTOOLS has defined the following data type for referencing a DICOM Associate:

Data Type | Definition and Usage
HDICOMPDU | Defined as L_VOID *; used as a handle to a DICOM Associate.


HDICOMNET

LEADTOOLS has defined the following data type for referencing a DICOM Network:

Data Type | Definition and Usage
HDICOMNET | Defined as L_VOID *; used as a handle to a DICOM Network.


IMAGEBOXPARAMETERS

typedef struct tagIMAGEBOXPARAMETERS
{
L_UINT uStructSize;
L_INT32 nImagePosition;
L_CHAR L_FAR * pszPolarity;
L_CHAR L_FAR * pszMagnificationType;
L_CHAR L_FAR * pszSmoothingType;
L_INT32 nMinDensity;
L_INT32 nMaxDensity;
L_CHAR L_FAR * pszConfigurationInformation;
L_DOUBLE dRequestedImageSize;
L_CHAR L_FAR * pszRequestedDecimateCropBehavior;

} IMAGEBOXPARAMETERS, * pIMAGEBOXPARAMETERS;

The IMAGEBOXPARAMETERS structure is used to specify the parameters of Image Boxes.

Member | Description
uStructSize | Size of the structure.
nImagePosition | Image Position (2020,0010).
pszPolarity | Polarity (2020,0020).
pszMagnificationType | Magnification Type (2010,0060).
pszSmoothingType | Smoothing Type (2010,0080).
nMinDensity | Min Density (2010,0120).
nMaxDensity | Max Density (2010,0130).
pszConfigurationInformation | Configuration Information (2010,0150).
dRequestedImageSize | Requested Image Size (2020,0030).
pszRequestedDecimateCropBehavior | Requested Decimate/Crop Behavior (2020,0040).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure is used with the function LDicomPrintSCU::UpdateImageBox, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetDefaultImageBoxParameters sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::UpdateImageBox, LDicomPrintSCU::GetDefaultImageBoxParameters
Topics: | Print Management SCU


J2KCOMPRESSIONCONTROL

typedef enum tagJ2KCOMPRESSIONCONTROL
{
J2K_COMPRESSION_LOSSLESS //Lossless compression.
J2K_COMPRESSION_RATIO // Use the fCompressionRatio value for compression
J2K_COMPRESSION_TARGETSIZE // Use the uTargetFileSize value for compression
J2K_COMPRESSION_QFACTOR // Use the qFactor value for compression
} J2KCOMPRESSIONCONTROL, L_FAR *p J2KCOMPRESSIONCONTROL;

This data type is used within the FILEJ2KOPTIONS structure to control the compression of JPEG 2000 files.


J2KREGIONOFINTEREST

typedef enum tagJ2KREGIONOFINTEREST
{

J2K_USE_LEAD_REGION, | // Use the LEAD bitmap region to define
 | // the region of interest
J2K_USE_OPTION_RECT | // Use the rectangle specified in the rcROI
 | // member of the FILEJ2KOPTIONS structure to
 | // define the region of interest.

} J2KREGIONOFINTEREST, L_FAR* pJ2KREGIONOFINTEREST;

The J2KREGIONOFINTEREST data type is used within the FILEJ2KOPTIONS structure to indicate how to define the region of interest.

Comments

If J2K_USE_LEAD_REGION is used, then any region shape is acceptable. It will be converted internally by the filter to a rectangle.


L_CIPHERSUITE

enum _L_CIPHERSUITE
{
TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x12,
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x13, // mandatory standard
};

The L_CIPHERSUITE data type is used by the LDicomNet::XXXTLS functions to specify the type of ciphersuite used in the TLS Security. Currently, these are the only ciphersuites supported by LEADTOOLS.


L_SSL_CTX_CREATE

typedef struct tagSSL_CTX_CREATE
{
L_UINT uStructSize;
L_UINT32 uFlags;
L_INT nMethodTypeSSL;
L_CHAR * pszCAfile;
L_UINT uVerifyMode;
L_INT nVerifyDepth;
L_INT nOptions;
L_INT nSuccess;
L_INT nReserved1;
L_INT nReserved2;

} L_SSL_CTX_CREATE, L_FAR * pL_SSL_CTX_CREATE;

The L_SSL_CTX_CREATE structure provides security information for the LDicomNet::LDicomNet(pszPath,nMode,bReserved) constructor.

Member | Description
uStructSize | Size of this structure in bytes, for versioning. Use the sizeof() macro to calculate this value.
uFlags | Flags that identify the valid fields of the L_SSL_CTX_CREATE structure. Flags may be combined using a bitwise OR (|). Possible values are:
 | Value | Meaning
 | FLAG_SSL_CTX_CREATE_METHOD_TYPE | [0x001] The nMethodTypeSSL member is valid.
 | FLAG_SSL_CTX_CREATE_VERIFY_DEPTH | [0x002] The nVerifyDepth member is valid
 | FLAG_SSL_CTX_CREATE_VERIFY_MODE | [0x004] The uVerifyMode member is valid
 | FLAG_SSL_CTX_CREATE_CAFILE | [0x008] The pszCAfile member is valid
 | FLAG_SSL_CTX_CREATE_OPTIONS | [0x010] The nOptions member is valid
 | FLAG_SSL_CTX_CREATE_ALL | [0x01F] All members are valid
nMethodTypeSSL | Value that identifies which SSL method type is to be used for security verification. This member must be filled. Only one value can be used. The default value is TYPE_TLSV1_METHOD. Possible values are:
 | Value | Meaning
 | TYPE_SSLV2_METHOD | Use Secure Sockets Layer (SSL) Version 2. Avoid using SSL Version 2 because this version is known to have security flaws.
 | TYPE_SSLV3_METHOD | Use SSL Version 3.
 | TYPE_TLSV1_METHOD | Use Transport Layer Security (TLS) Version 1.
 | TYPE_SSLV23_METHOD | Use a compatible security verification mode. This mode can handle any of the three modes (TYPE_SSLV2_METHOD, TYPE_SSLV3_METHOD, TYPE_TLSV1_METHOD)
pszCAfile | Pointer to the name of a file containing Certification Authorities (CA) certificates in Privacy Enhanced Mail (PEM) format. More than one CA certificate may be present in the file. The default value is no file.
uVerifyMode | Flags that identify the verification mode to be used. Flags may be combined using a bitwise OR (|). The default value is L_SSL_VERIFY_NONE. Possible values are:
 | Value | Meaning
 | L_SSL_VERIFY_NONE | [0x00] Server Mode: no request for a certificate is sent to the client, and the client should not send a certificate.
 |  | Client Mode: If the server sends a certificate, it will be verified, but failure will not terminate communication. This flag should not be used in conjunction with any other flag.
 | L_SSL_VERIFY_PEER | [0x01] Server mode: a request for a certificate is send to the client. The client can ignore the request, but if the client does send a certificate, it will be verified. If verification fails, communication is terminated.
 |  | Client mode: if the server sends a certificate, it is verified. If verification fails, communication is terminated.
 | L_SSL_VERIFY_FAIL_IF_NO_PEER_CERT | [0x02] Server Mode: If the client does not send a certificate, or if a certificate is sent that fails verification, then communication is terminated. This flag must be combined with L_SSL_VERIFY_PEER.
 |  | Client mode: This flag is ignored.
 | L_SSL_VERIFY_CLIENT_ONCE | [0x04] Server Mode: During initial negotiation a certificate is requested from the client. During renegotiation, no certificates are requested. This flag must be used with L_SSL_VERIFY_PEER.
 |  | Client Mode: This flag is ignored.
nVerifyDepth | Sets the maximum depth of the certificate chain to be verified. The default value is 9.
nOptions | Flags that identify additional restrictions to the verification mode (uVerifyMode), used when the uVerifyMode is TYPE_SSLV23_METHOD. The default value is (L_SSL_OP_NO_SSLv3 | L_SSL_OP_NO_SSLv2 | L_SSL_OP_ALL). Flags may be combined using a bitwise OR (|). Possible values are:
 | Value | Meaning
 | L_SSL_OP_NO_SSLv2 | [0x01000000L] Ignore SSL Version 2 protocol.
 | L_SSL_OP_NO_SSLv3 | [0x02000000L] Ignore the SSL Version 3 protocol.
 | L_SSL_OP_NO_TLSv1 | [0x04000000L] Ignore the TLS Version 1 protocol.
 | L_SSL_OP_ALL | [0x000FFFFFL] Implement all known SSL bug workarounds so that communication with peers with such SSL bugs can be established.
nSuccess | After using L_SSL_CTX_CREATE to set security options, this member will return any errors. If all options were set successfully, this will contain DICOM_SUCCESS. For information on errors, refer to Return Codes
nReserved1 | Reserved for future use. Pass 0.
nReserved2 | Reserved for future use. Pass 0.

Comments

Use this structure with LDicomNet::Initialize to change the security options from the defaults.

This toolkit uses SSL (Secure Socket Layer) and TLS (Transport Layer Security) to implement security. Developed by Netscape, the Secure Socket Layer (SSL) protocol is designed to ensure the security of data being communicated between two points over a network, and uses TCP as the communication layer. SSL provides a way for the client and server to authenticate each other, ensures the integrity of the data during a session, and ensures that the data remains private between the client and the server. The Transport Layer Security (TLS) protocol is based on the SSL protocol.

Please note that a full discussion of SSL and TLS is beyond the scope of this help topic.


OVERLAYATTRIBUTES

The OVERLAYATTRIBUTES structure contains the overlay attributes. The attributes are stored as member variables or as flags inside the uFlags member.

Member | Data Type | Description
uStructSize | L_UINT | The size of the structure (use sizeof (OVERLAYATTRIBUTES) )
ptOrigin | POINT | Origin (top left point), in pixels, of the overlay bitmap, relative to the top left point of the displayed main bitmap. This is independent of the main bitmap’s view perspective.
crColor | COLORREF | The color used to display those pixels in the overlay bitmap with a value of 1.
uFlags | L_UINT | One or more of the following flags:
 |  | OVERLAY_AUTOPAINT | [0x00000001] Paint the overlay automatically when the bitmap is painted using the LPaint::PaintDC functions.
 |  | OVERLAY_AUTOPROCESS | [0x00000002] Automatically adjust the overlay bitmap and position when the main bitmap is resized (zoomed in), scrolled, rotated, flipped, reversed, sheared, trimmed.
 |  | OVERLAY_USEBITPLANE | [0x00000004] the overlay has a corresponding bitplane in the main bitmap. uBitPosition is the index bitplane.
uBitPosition | L_UINT16 | Corresponding bit plane associated with an overlay. Valid only if OVERLAY_USEBITPLANE is set in uFlags. For more information about the bit position, refer to "Overlay Plane Module Attributes" in the DICOM standard.
uRows | L_UINT16 | Number of rows in the overlay. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
uColumns | L_UINT16 | Number of columns in the overlay. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
szType | L_CHAR | A null-terminated string that indicates whether this overlay represents a region of interest or other graphics. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
uBitsAllocated | L_UINT16 | Number of bits allocated in the overlay. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
szDescription | L_CHAR | NULL terminated string that contains user-defined comments about the overlay. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
szSubtype | L_CHAR | NULL terminated string that contains a defined term that identifies the intended purpose of the overlay type. For more information on possible values, refer to "Overlay Plane Module Attributes" in the DICOM standard.
szLabel | L_CHAR | NULL terminated string that contains user defined text, which may be used to label or name this overlay. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
nROIArea | L_INT32 | Number of pixels in the Region Of Interest area. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
fROIMean | L_DOUBLE | Average value of the pixels in the Region Of Interest. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
fROIStandardDeviation | L_DOUBLE | The standard deviation of the pixel values in the Region Of Interest. For more information, refer to "Overlay Plane Module Attributes" in the DICOM standard.
nNumFramesInOverlay | L_INT32 | Number of Frames in the overlay. For more information, refer to "Multi-frame Overlay Module Attributes" in the DICOM standard.
uImageFrameOrigin | L_UINT16 | The number of the frame of a multi-frame image to which this overlay applies. For more information, refer to "Multi-frame Overlay Module Attributes" in the DICOM standard.
szActivationLayer | L_CHAR | NULL terminated string that identifies the layer in which the overlay shall be displayed. For more information, refer to "Overlay/Curve Activation Module Attributes" in the DICOM standard.


OVERLAYBOXPARAMETERS

typedef struct tagOVERLAYBOXPARAMETERS
{
L_UINT uStructSize;
L_INT16 nOverlayOriginRow;
L_INT16 nOverlayOriginColumn;
L_CHAR L_FAR * pszOverlayOrImageMagnification;
L_INT32 nMagnifyToNumberOfColumns;
L_CHAR L_FAR * pszOverlayMagnificationType;
L_CHAR L_FAR * pszOverlayForegroundDensity;
L_CHAR L_FAR * pszOverlayBackgroundDensity;
L_CHAR L_FAR * pszOverlaySmoothingType;

} OVERLAYBOXPARAMETERS, * pOVERLAYBOXPARAMETERS;

The OVERLAYBOXPARAMETERS structure is used to specify the parameters of Image Overlay Boxes.

Member | Description
uStructSize | Size of the structure.
nOverlayOriginRow | The first Value in Overlay Origin (6000,0050).
nOverlayOriginColumn | The second Value in Overlay Origin (6000,0050).
pszOverlayOrImageMagnification | Overlay or Image Magnification (2040,0072).
nMagnifyToNumberOfColumns | Magnify to Number of Columns (2040,0074).
pszOverlayMagnificationType | Overlay Magnification Type (2040,0060).
pszOverlayForegroundDensity | Overlay Foreground Density (2040,0080).
pszOverlayBackgroundDensity | Overlay Background Density (2040,0082).
pszOverlaySmoothingType | Overlay Smoothing Type (2040,0070).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure is used with the functions LDicomPrintSCU::CreateOverlayBox and LDicomPrintSCU::UpdateOverlayBox, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetDefaultOverlayBoxParameters sets the member to the size of the structure.

If one of the Attributes Overlay or Image Magnification (2040,0072) and Magnify to Number of Columns (2040,0074) is specified without the other, they will both be ignored.

See Also

Functions: | LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::UpdateOverlayBox, LDicomPrintSCU::GetDefaultOverlayBoxParameters
Topics: | Print Management SCU


PRINTERINFO

typedef struct tagPRINTERINFO
{
L_UINT uStructSize;
L_CHAR szPrinterStatus[MAX_SIZE];
L_CHAR szPrinterStatusInfo[MAX_SIZE];
L_CHAR szPrinterName[MAX_SIZE];
L_CHAR szManufacturer[MAX_SIZE];
L_CHAR szManufacturerModelName[MAX_SIZE];
L_CHAR szDeviceSerialNumber[MAX_SIZE];
L_CHAR szSoftwareVersions[MAX_SIZE];
L_CHAR szDateOfLastCalibration[MAX_SIZE];
L_CHAR szTimeOfLastCalibration[MAX_SIZE];

} PRINTERINFO, * pPRINTERINFO;

The PRINTERINFO structure is used to specify the printer information retrieved from the Print SCP.

Member | Description
uStructSize | Size of the structure.
szPrinterStatus | Printer Status (2110,0010).
szPrinterStatusInfo | Printer Status Info (2110,0020).
szPrinterName | Printer Name (2110,0030).
szManufacturer | Manufacturer (0008,0070).
szManufacturerModelName | Manufacturer’s Model Name (0008,1090).
szDeviceSerialNumber | Device Serial Number (0018,1000).
szSoftwareVersions | Software Version(s) (0018,1020).
szDateOfLastCalibration | Date of Last Calibration (0018,1200).
szTimeOfLastCalibration | Time of Last Calibration (0018,1201).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When using the structure with the function LDicomPrintSCU::GetPrinterInfo to specify the required printer information, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetPrinterInfo which obtains the information retrieved sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::GetPrinterInfo, LDicomPrintSCU::GetPrinterInfo
Topics: | Print Management SCU


PRINTERREPORTINFO

typedef struct tagPRINTERREPORTINFO
{
L_CHAR L_FAR * pszPrinterStatusInfo;
L_CHAR L_FAR * pszFilmDestination;
L_CHAR L_FAR * pszPrinterName;

} PRINTERREPORTINFO, * pPRINTERREPORTINFO;

The PRINTERREPORTINFO structure specifies printer information when printer status reports are received from the Print SCP.

Member | Description
pszPrinterStatusInfo | Printer Status Info (2110,0020).
pszFilmDestination | Film Destination (2000,0040).
pszPrinterName | Printer Name (2110,0030).

Comments

The structure member will be NULL if the corresponding Attribute is not supplied in the report of the Print SCP.

See Also

Functions: | LDicomPrintSCU::OnPrinterReport
Topics: | Print Management SCU


PRINTJOBINFO

typedef struct tagPRINTJOBINFO
{
L_UINT uStructSize;
L_CHAR szExecutionStatus[MAX_SIZE];
L_CHAR szExecutionStatusInfo[MAX_SIZE];
L_CHAR szPrintPriority[MAX_SIZE];
L_CHAR szCreationDate[MAX_SIZE];
L_CHAR szCreationTime[MAX_SIZE];
L_CHAR szPrinterName[MAX_SIZE];
L_CHAR szOriginator[MAX_SIZE];

} PRINTJOBINFO, * pPRINTJOBINFO;

The PRINTJOBINFO structure is used for the Print Job information retrieved from the Print SCP.

Member | Description
uStructSize | Size of the structure.
szExecutionStatus | Execution Status (2100,0020).
szExecutionStatusInfo | Execution Status Info (2100,0030).
szPrintPriority | Print Priority (2000,0020).
szCreationDate | Creation Date (2100,0040).
szCreationTime | Creation Time (2100,0050).
szPrinterName | Printer Name (2110,0030).
szOriginator | Originator (2100,0070).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When using the structure with the function LDicomPrintSCU::GetPrintJobInfo to specify the required Print Job information, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetPrintJobInfo which obtains the information retrieved sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::GetPrintJobInfo
Topics: | Print Management SCU


PRINTJOBREPORTINFO

typedef struct tagPRINTJOBREPORTINFO
{
L_CHAR L_FAR * pszExecutionStatusInfo;
L_CHAR L_FAR * pszPrintJobID;
L_CHAR L_FAR * pszFilmSessionLabel;
L_CHAR L_FAR * pszPrinterName;

} PRINTJOBREPORTINFO, * pPRINTJOBREPORTINFO;

The PRINTJOBREPORTINFO structure specifies Print Job information when Print Job status reports are received from the Print SCP.

Member | Description
pszExecutionStatusInfo | Execution Status Info (2100,0030).
pszPrintJobID | Print Job ID (2100,0010).
pszFilmSessionLabel | Film Session Label (2000,0050).
pszPrinterName | Printer Name (2110,0030).

Comments

The structure member will be NULL if the corresponding Attribute is not supplied in the report of the Print SCP.

See Also

Functions: | LDicomPrintSCU::OnPrintJobReport
Topics: | Print Management SCU


PULLPRINTREQUESTPARAMETERS

typedef struct tagPULLPRINTREQUESTPARAMETERS
{
L_UINT uStructSize;
L_INT32 nNumberOfCopies;
L_CHAR L_FAR * pszPrintPriority;
L_CHAR L_FAR * pszMediumType;
L_CHAR L_FAR * pszFilmDestination;
L_CHAR L_FAR * pszColorImagePrintingFlag;
L_CHAR L_FAR * pszAnnotationFlag;
L_CHAR L_FAR * pszImageOverlayFlag;
L_CHAR L_FAR * pszPresentationLUTFlag;
L_CHAR L_FAR * pszImageBoxPresentationLUTFlag;
L_CHAR L_FAR * pszConfigurationInformation;
L_CHAR L_FAR * pszFilmSessionLabel;
L_INT32 nMemoryAllocation;
L_CHAR L_FAR * pszCollationFlag;
L_INT32 nIllumination;
L_INT32 nReflectedAmbientLight;
L_CHAR L_FAR * pszOwnerID;

} PULLPRINTREQUESTPARAMETERS, * pPULLPRINTREQUESTPARAMETERS;

The PULLPRINTREQUESTPARAMETERS structure specifies the parameters of Pull Print Request SOP Instances.

Member | Description
uStructSize | Size of the structure.
nNumberOfCopies | Number of Copies (2000,0010).
pszPrintPriority | Print Priority (2000,0020).
pszMediumType | Medium Type (2000,0030).
pszFilmDestination | Film Destination (2000,0040).
pszColorImagePrintingFlag | Color Image Printing Flag (2000,0062).
pszAnnotationFlag | Annotation Flag (2000,0065).
pszImageOverlayFlag | Image Overlay Flag (2000,0067).
pszPresentationLUTFlag | Presentation LUT Flag (2000,0069).
pszImageBoxPresentationLUTFlag | Image Box Presentation LUT Flag (2000,006A).
pszConfigurationInformation | Configuration Information (2010,0150).
pszFilmSessionLabel | Film Session Label (2000,0050).
nMemoryAllocation | Memory Allocation (2000,0060).
pszCollationFlag | Collation Flag (2000,0063).
nIllumination | Illumination (2010,015E).
nReflectedAmbientLight | Reflected Ambient Light (2010,0160).
pszOwnerID | Owner ID (2100,0160).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure is used with the function LDicomPrintSCU::CreatePullPrintRequest, the member uStructSize must specify the size of the structure. The function LDicomPrintSCU::GetDefaultPullPrintRequestParameters sets the member to the size of the structure.

See Also

Functions: | LDicomPrintSCU::CreatePullPrintRequest, LDicomPrintSCU::GetDefaultPullPrintRequestParameters
Topics: | Print Management SCU


STOREDPRINTSTORAGEINSTANCEINFO

typedef struct tagSTOREDPRINTSTORAGEINSTANCEINFO
{
L_UINT uStructSize;
L_CHAR L_FAR * pszRetrieveAETitle;
L_CHAR L_FAR * pszReferencedSOPInstanceUID;
L_CHAR L_FAR * pszStudyInstanceUID;
L_CHAR L_FAR * pszSeriesInstanceUID;
L_CHAR L_FAR * pszPatientID;

} STOREDPRINTSTORAGEINSTANCEINFO, * pSTOREDPRINTSTORAGEINSTANCEINFO;

The STOREDPRINTSTORAGEINSTANCEINFO structure is used to specify information about referenced Stored Print Storage SOP Instances when creating Pull Print Request SOP Instances.

Member | Description
uStructSize | Size of the structure.
pszRetrieveAETitle | Retrieve AE Title (0008,0054).
pszReferencedSOPInstanceUID | Referenced SOP Instance UID (0008,1155).
pszStudyInstanceUID | Study Instance UID (0020,000D).
pszSeriesInstanceUID | Series Instance UID (0020,000E).
pszPatientID | Patient ID (0010,0020).

Comments

Refer to the DICOM standard for more details about the attributes described by this structure.

When the structure pointer is passed to the function LDicomPrintSCU::CreatePullPrintRequest, the member uStructSize must specify the size of the structure.

See Also

Functions: | LDicomPrintSCU::CreatePullPrintRequest
Topics: | Print Management SCU


VALUEAGE

typedef struct _VALUEAGE
{
L_UINT16 nNumber; /* numerical value */
L_CHAR nReference; /* age reference*/
} VALUEAGE, L_FAR * pVALUEAGE;

The VALUEAGE structure contains information about age values stored in the Value Field of a Data Element.

Member | Description
nNumber | A numerical value that indicates the age.
nReference | A character that indicates whether the value in nNumber refers to days, weeks, months, or years. Possible values are:
 | Value | Meaning
 | VALUE_AGE_DAYS | ‘D’ The age is given in days.
 | VALUE_AGE_WEEKS | ‘W’ The age is given in weeks.
 | VALUE_AGE_MONTHS | ‘M’ The age is given in months.
 | VALUE_AGE_YEARS | ‘Y’ The age is given in years.

See Also

Functions: | LDicomDS::GetAgeValue, LDicomDS::SetAgeValue
Topics: | Working with Data Sets


VALUEDATE

typedef struct _VALUEDATE
{
L_UINT16 nYear; /* year */
L_UINT16 nMonth; /* month */
L_UINT16 nDay; /* day */
} VALUEDATE, L_FAR * pVALUEDATE;

The VALUEDATE structure contains information about date values stored in the Value Field of a Data Element.

Member | Description
nYear | The year.
nMonth | The month.
nDay | The day.

See Also

Functions: | LDicomDS::GetDateValue, LDicomDS::SetDateValue
Topics: | Working with Data Sets


VALUEDATETIME

typedef struct _VALUEDATETIME
{
L_UINT16 nYear; /* year */
L_UINT16 nMonth; /* month */
L_UINT16 nDay; /* day */
L_UINT16 nHours; /* hours */
L_UINT16 nMinutes; /* minutes */
L_UINT16 nSeconds; /* seconds */
L_UINT32 nFractions; /* fraction of a second */
L_INT32 nOffset; /* suffix */
} VALUEDATETIME, L_FAR * pVALUEDATETIME;

The VALUEDATETIME structure contains information about date-time values stored in the Value Field of a Data Element.

Member | Description
nYear | The year.
nMonth | The month.
nDay | The day.
nHours | The hour.
nMinutes | The minute.
nSeconds | The second.
nFractions | The fraction of a second.
nOffset | The optional suffix that indicates the offset (plus or minus) from Coordinated Universal Time.

See Also

Functions: | LDicomDS::GetDateTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets


VALUETIME

typedef struct _VALUETIME
{
L_UINT16 nHours; /* hours */
L_UINT16 nMinutes; /* minutes */
L_UINT16 nSeconds; /* seconds */
L_UINT32 nFractions; /* fraction of a second */
} VALUETIME, L_FAR * pVALUETIME;

The VALUETIME structure contains information about time values stored in the Value Field of a Data Element.

Member | Description
nHours | The hour.
nMinutes | The minute.
nSeconds | The second.
nFractions | The fraction of a second.

See Also

Functions: | LDicomDS::GetTimeValue, LDicomDS::SetTimeValue
Topics: | Working with Data Sets


WINDOWS Structures

COLORREF

COLORREF is a Windows data type. For further information concerning COLORREF, please refer to the Microsoft SDK documentation.

HCURSOR

HCURSOR is a standard Windows data type. For further information concerning HCURSOR, please refer to the Microsoft SDK documentation or your compiler's documentation.

HICON

HION is a standard Windows data type. For further information concerning HICON, please refer to the Microsoft SDK documentation or your compiler's documentation.

HWND

HWND is a standard Windows data type. For further information concerning HWND, please refer to the Microsoft SDK documentation or your compiler's documentation.

LPCSTR

LPCSTR is a standard Windows data type. For further information concerning LPCSTR, please refer to the Microsoft SDK documentation or your compiler's documentation.

LPRECT

LPRECT is a standard Windows data type. For further information concerning LPRECT, please refer to the Microsoft SDK documentation or your compiler's documentation.

OPENFILENAME

This is a Microsoft Windows structure as documented in the Microsoft SDK documentation. For complete documentation on this structure please refer to the Microsoft SDK documentation for OPENFILENAME.


Return Codes

The following are the possible return values for LEADTOOLS functions.

0 | DICOM_SUCCESS
1 | DICOM_ERROR_LOCKED - Dicom support is locked. You must unlock the Medical Support.
2 | DICOM_ERROR_MEMORY - Insufficient memory.
3 | DICOM_ERROR_OPEN - Error opening the file.
4 | DICOM_ERROR_READ - Error reading the file.
5 | DICOM_ERROR_WRITE - Error writing to a file.
6 | DICOM_ERROR_SEEK - Error during search.
7 | DICOM_ERROR_END - Error - end of file.
8 | DICOM_ERROR_FORMAT - Improper file format.
9 | DICOM_ERROR_PARAMETER - Incorrect parameter.
10 | DICOM_ERROR_IMAGE - Improper image.
11 | DICOM_ERROR_COMPRESSION - Improper compression.
12 | DICOM_ERROR_PHOTOMETRIC - Improper photometric type.
13 | DICOM_ERROR_CONVERSION - Error converting the file.
14 | DICOM_ERROR_RANGE - Out of range.
15 | DICOM_ERROR_BITSPERPIXEL - Improper bits per pixel.
16 | DICOM_ERROR_QFACTOR - Improper quality factor.
17 | DICOM_ERROR_PDU_TYPE - Improper PDU type.
18 | DICOM_ERROR_PDU_LENGTH - Improper PDU length.
19 | DICOM_ERROR_PDU_ID - Improper PDU ID.
29 | DICOM_ERROR_NET_FAILURE - Network failure.
30 | DICOM_ERROR_NET_ACCESS - The address is a broadcast address
31 | DICOM_ERROR_NET_ADDRESS_IN_USE - The address is already in use
32 | DICOM_ERROR_NET_ADDRESS_NOT_AVAILABLE - The address is not available from the local computer
33 | DICOM_ERROR_NET_ADDRESS_NOT_SUPPORTED - The address family is not supported
34 | DICOM_ERROR_NET_CONNECTION_ABORTED - The virtual circuit was aborted
35 | DICOM_ERROR_NET_CONNECTION_REFUSED - The attempt to connect was forcefully rejected
36 | DICOM_ERROR_NET_CONNECTION_RESET - The virtual circuit was reset by the remote side
37 | DICOM_ERROR_NET_DESTINATION_REQUIRED - A destination address is required
38 | DICOM_ERROR_NET_ARGUMENT_INCORRECT - The namelen argument is incorrect
39 | DICOM_ERROR_NET_IN_PROGRESS - A blocking operation is in progress
40 | DICOM_ERROR_NET_BLOCKING_CANCELED - The blocking call was canceled
41 | DICOM_ERROR_NET_INVALID - The socket has not been bound with bind
42 | DICOM_ERROR_NET_IS_CONNECTED - The socket is already connected
43 | DICOM_ERROR_NET_NO_MORE_FILE - No more file descriptors are available
44 | DICOM_ERROR_NET_MESSAGE_SIZE - The datagram is larger than the maximum supported
45 | DICOM_ERROR_NET_DOWN - The network subsystem has failed
46 | DICOM_ERROR_NET_RESET - The connection must be reset
47 | DICOM_ERROR_NET_UN_REACH - The network can't be reached from this host at this time
48 | DICOM_ERROR_NET_NO_BUFFERS - No buffer space is available
49 | DICOM_ERROR_NET_NOT_CONNECTED - The socket is not connected
50 | DICOM_ERROR_NET_NOT_SOCKET - The descriptor is not a socket
51 | DICOM_ERROR_NET_OPERATION_NOT_SUPPORTED - The type does not support connection-oriented service
52 | DICOM_ERROR_NET_PROTOCOL_NOT_SUPPORTED - The specified protocol is not supported
53 | DICOM_ERROR_NET_PROTOCOL_TYPE - The specified protocol is the wrong type
54 | DICOM_ERROR_NET_SHUTDOWN - The socket has been shut down
55 | DICOM_ERROR_NET_SOCKET_NOT_SUPPORTED - The type is not supported in this address family
56 | DICOM_ERROR_NET_TIME_OUT - Attempt to connect timed out without establishing a connection
57 | DICOM_ERROR_NET_WOULD_BLOCK - The socket is marked as nonblocking and the requested operation would block
58 | DICOM_ERROR_NET_HOST_NOT_FOUND - Authoritative Answer Host not found
59 | DICOM_ERROR_NET_NO_DATA - Valid name, no data record of requested type
60 | DICOM_ERROR_NET_NO_RECOVERY - Nonrecoverable errors
61 | DICOM_ERROR_NET_NOT_INITIALISED - The system was not initialized
62 | DICOM_ERROR_NET_SYSTEM_NOT_READY - Not ready for network communication
63 | DICOM_ERROR_NET_TRY_AGAIN - Non-Authoritative Host not found, or server failed
64 | DICOM_ERROR_NET_VERSION_NOT_SUPPORTED - The version requested is not provided by this implementation
65 | DICOM_ERROR_NET_SECURITY_BREACH - There is a cryptographic error.
66 | DICOM_ERROR_TLS - TLS internal error
67 | DICOM_ERROR_SECURITY_LOCKED - DICOM Security Features are locked
68 | DICOM_ERROR_TLS_DLL_NOT_LOADED - TLS and/or CRY DLL not loaded
69 | DICOM_ERROR_BAD_SECURE_MODE - ISCL operation attempted on TLS object
70 | DICOM_ERROR_ANN - Annotation error
71 | DICOM_ERROR_ANN_LOCKED - Annotation support is locked
72 | DICOM_ERROR_ANN_MISSING - Annotation dll is missing
73 | DICOM_ERROR_TAG_ALREADY_EXISTS - LEAD private creator element already exists
74 | DICOM_ERROR_ANN_NO_EXIST - Requested annotation file or page does not exist
100 | DICOM_ERROR_ISCL_BAD_OPTION - Bad option
101 | DICOM_ERROR_ISCL_BAD_LENGTH - Bad length
102 | DICOM_ERROR_ISCL_LOCAL_ICCARD - Error in the local IC card
103 | DICOM_ERROR_ISCL_REMOTE_ICCARD - Error in the remote IC card
104 | DICOM_ERROR_ISCL_BAD_MSGID - Bad message ID
105 | DICOM_ERROR_ISCL_BAD_VERSION - Bad version number
106 | DICOM_ERROR_ISCL_BAD_MUTUAL_AUTH_METHOD - Bad mutual authentication mode
107 | DICOM_ERROR_ISCL_BAD_COMMBLOCK_LENGTH - Bad communication block length
108 | DICOM_ERROR_ISCL_RECEIVED_NAK - Received a 'Not Acknowledged' message
109 | DICOM_ERROR_ISCL_MSG_TRANSMISSION - Error in the message transmission
110 | DICOM_ERROR_ISCL_PEER_SMALL_LENGTH - Peer small length
111 | DICOM_ERROR_ISCL_LOCAL_SMALL_LENGTH - Local small length
112 | DICOM_ERROR_ISCL_DECRYPT - Decryption error
113 | DICOM_ERROR_ISCL_BAD_MAC - Bad message authentication code
114 | DICOM_ERROR_ISCL_RND_NO_FOR_SESSION_KEY_EXPECTED - Round number for session key expected.
115 | DICOM_ERROR_ISCL_PEER_REFUSE_CLOSE - Peer refused close request
128 | DICOM_ERROR_TLS_CLOSE_NOTIFY - Error in close notification
129 | DICOM_ERROR_TLS_UNEXPECTED_MESSAGE - Unexpected message
130 | DICOM_ERROR_TLS_BAD_RECORD_MAC - Bad record message authentication code
131 | DICOM_ERROR_TLS_DECRYPT_FAILED - Decryption failed
132 | DICOM_ERROR_TLS_RECORD_OVERFLOW - Record overflow
133 | DICOM_ERROR_TLS_DECOMPRESSION_FAILURE - Decompression failed
134 | DICOM_ERROR_TLS_HANDSHAKE_FAILURE - Handshake failed
135 | DICOM_ERROR_TLS_BAD_CERTIFICATE - Bad certificate
136 | DICOM_ERROR_TLS_UNSUPPORTED_CERTIFICATE - Unsupported certificate
137 | DICOM_ERROR_TLS_CERTIFICATE_REVOKED - Certificate revoked
138 | DICOM_ERROR_TLS_CERTIFICATE_EXPIRED - Certificate Expired
139 | DICOM_ERROR_TLS_CERTIFICATE_UNKNOWN - Certificate unknown
140 | DICOM_ERROR_TLS_ILLEGAL_PARAMETER - Illegal parameter
141 | DICOM_ERROR_TLS_UNKNOWN_CA - Unknown certificate authenticator
142 | DICOM_ERROR_TLS_ACCESS_DENIED - Access denied
143 | DICOM_ERROR_TLS_DECODE_ERROR - Error decoding
144 | DICOM_ERROR_TLS_DECRYPT_ERROR - Decryption error
145 | DICOM_ERROR_TLS_EXPORT_RESTRICTION - Export restriction
146 | DICOM_ERROR_TLS_PROTOCOL_VERSION - Wrong protocol version
147 | DICOM_ERROR_TLS_INSUFFICIENT_SECURITY - Insufficient security
148 | DICOM_ERROR_TLS_INTERNAL_ERROR - Internal error Call LEAD
149 | DICOM_ERROR_TLS_USER_CANCELED - User cancelled
150 | DICOM_ERROR_TLS_NO_RENEGOTIATION - No renegotiation
151 | DICOM_ERROR_TLS_NO_KEEPALIVE - "Windows Sockets provider" does not support the use of keep-alives.
152 | DICOM_ERROR_TLS_CLOSED_CONTROLLED - An error occurred and the connection was closed gracefully.
160 | DICOM_ERROR_TLS_UNABLE_TO_GET_ISSUER_CERT - "Unable to get issuer certificate"
161 | DICOM_ERROR_TLS_UNABLE_TO_GET_CRL - "Unable to get CRL"
162 | DICOM_ERROR_TLS_UNABLE_TO_DECRYPT_CERT_SIGNATURE - "Unable to decrypt certificate signature"
163 | DICOM_ERROR_TLS_UNABLE_TO_DECRYPT_CRL_SIGNATURE - "unable to decrypt CRL signature"
164 | DICOM_ERROR_TLS_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY - "unable to decode issuer public key"
165 | DICOM_ERROR_TLS_CERT_SIGNATURE_FAILURE - "Certificate signature failure"
166 | DICOM_ERROR_TLS_CRL_SIGNATURE_FAILURE - "Error TLS CRL Signature Failure"
167 | DICOM_ERROR_TLS_CERT_NOT_YET_VALID - "Error TLS Certificate Not Yet Valid"
168 | DICOM_ERROR_TLS_CERT_HAS_EXPIRED - "Error TLS Certificate Has Expired"
169 | DICOM_ERROR_TLS_CRL_NOT_YET_VALID - "Error TLS CRL Not Yet Valid"
170 | DICOM_ERROR_TLS_CRL_HAS_EXPIRED - "Error TLS CRL Has Expired"
171 | DICOM_ERROR_TLS_ERROR_IN_CERT_NOT_BEFORE_FIELD - "Error TLS Error In Certificate Not Before Field"
172 | DICOM_ERROR_TLS_ERROR_IN_CERT_NOT_AFTER_FIELD - "Error TLS Error In Certificate Not After Field"
173 | DICOM_ERROR_TLS_ERROR_IN_CRL_LAST_UPDATE_FIELD - "Error TLS Error In CRL Last Update Field"
174 | DICOM_ERROR_TLS_ERROR_IN_CRL_NEXT_UPDATE_FIELD - "Error TLS Error In CRL Next Update Field"
175 | DICOM_ERROR_TLS_OUT_OF_MEM - "Error TLS Out Of Memory"
176 | DICOM_ERROR_TLS_DEPTH_ZERO_SELF_SIGNED_CERT - "Error TLS Depth Zero Self Signed Certificate"
177 | DICOM_ERROR_TLS_SELF_SIGNED_CERT_IN_CHAIN - "Error TLS Self Signed Certificate In Chain"
178 | DICOM_ERROR_TLS_UNABLE_TO_GET_ISSUER_CERT_LOCALLY - "Error TLS Unable To Get Issuer Certificate Locally"
179 | DICOM_ERROR_TLS_UNABLE_TO_VERIFY_LEAF_SIGNATURE - "Error TLS Unable To Verify Leaf Signature"
180 | DICOM_ERROR_TLS_CERT_CHAIN_TOO_LONG - "Error TLS Certificate Chain Too Long"
181 | DICOM_ERROR_TLS_CERT_REVOKED - "Error TLS Certificate Revoked"
182 | DICOM_ERROR_TLS_INVALID_CA - "Error TLS Invalid CA"
183 | DICOM_ERROR_TLS_PATH_LENGTH_EXCEEDED - "Error TLS Path Length Exceeded"
184 | DICOM_ERROR_TLS_INVALID_PURPOSE - "Error TLS Invalid Purpose"
185 | DICOM_ERROR_TLS_CERT_UNTRUSTED - "Error TLS Certificate Untrusted"
186 | DICOM_ERROR_TLS_CERT_REJECTED - "Error TLS Certificate Rejected"
187 | DICOM_ERROR_TLS_SUBJECT_ISSUER_MISMATCH - "Error TLS Subject Issuer Mismatch"
188 | DICOM_ERROR_TLS_AKID_SKID_MISMATCH - "Error TLS AKID SKID Mismatch"
189 | DICOM_ERROR_TLS_AKID_ISSUER_SERIAL_MISMATCH - "Error TLS AKID Issuer Serial Mismatch"
190 | DICOM_ERROR_TLS_KEYUSAGE_NO_CERTSIGN - "Error TLS Keyusage No Certsign"
191 | DICOM_ERROR_TLS_APPLICATION_VERIFICATION - "Error TLS Application Verification"
192 | DICOM_ERROR_TLS_INVALID_CTX - "Error TLS Invalid SSL Context"
193 | DICOM_ERROR_TLS_INVALID_CTX_VERIFY_DEPTH - "Error TLS Invalid SSL Context Verify Depth"
194 | DICOM_ERROR_TLS_INVALID_CTX_VERIFY_MODE - "Error TLS Invalid SSL Context Verify Mode"
195 | DICOM_ERROR_TLS_INVALID_CTX_CAFILE - "Error TLS Invalid SSL Context CA File"
196 | DICOM_ERROR_TLS_INVALID_CTX_OPTIONS - "Error TLS Invalid SSL Context Options"
200 | DICOM_ERROR_DICOMDIR_FOLDER - The destination folder of the DICOMDIR File is not specified, or the specified folder doesn’t exist.
201 | DICOM_ERROR_FILE - The file doesn’t reside in the destination folder of the DICOMDIR File or in a subfolder of it, or the file doesn’t exist.
202 | DICOM_ERROR_FILEID - The File ID of the specified file is invalid. Refer to the RejectInvalidFileID property for more information.
203 | DICOM_ERROR_J2K_LOCKED - J2K support is locked.
204 | DICOM_ERROR_LUT_DESCRIPTOR_MISSING – LUT descriptor is missing.
205 | DICOM_ERROR_MODALITY_LUT_MISSING – Modality LUT is missing.
206 | DICOM_ERROR_BAD_PIXEL_REPRESENTATION – Bad pixel representation.
207 | DICOM_ERROR_PALETTECOLORLUTDATAMISSING – Palette color LUT is missing.
208 | DICOM_ERROR_FEATURE_NOT_SUPPORTED – Feature not supported.
209 | DICOM_ERROR_VOI_LUT_MISSING – VOI LUT is missing.
210 | DICOM_ERROR_OVERLAY_ATTRIBUTES_MISSING – Overlay attributes are missing.
211 | DICOM_ERROR_OVERLAY_ACTIVATIONLAYER_MISSING – Overlay activation layer element is missing.
212 | DICOM_ERROR_OVERLAY_DATA_MISSING – Overlay data element is missing.
213 | DICOM_ERROR_INVALID_STRUCT_SIZE – Invalid structure size.
214 | DICOM_ERROR_NULL_PTR – NULL pointer.
215 | DICOM_ERROR_LTIMG_MISSING – LTIMG DLL is missing.
216 | DICOM_ERROR_CRYPTO_LIB_LOAD_FAILED - Failed to load the underlying cryptographic library
217 | DICOM_ERROR_INVALID_MAC_TRANSFER_SYNTAX -Unable to change to the MAC Calculation Transfer Syntax
218 | DICOM_ERROR_PRIVATE_KEY_LOAD_FAILED - Failed to load the private key from the specified file
219 | DICOM_ERROR_CERTIFICATE_LOAD_FAILED - Failed to load the digital certificate from the specified file
220 | DICOM_ERROR_CERTIFICATE_READ_FAILED - Failed to read the digital certificate from the Data Set
221 | DICOM_ERROR_KEYS_MISMATCH - The specified private key doesn’t match the public key in the specified digital certificate
222 | DICOM_ERROR_INVALID_MAC_ALGORITHM - The specified Digital Signature Security Profile doesn’t allow the use of the specified MAC Algorithm
223 | DICOM_ERROR_INVALID_ENCRYPTION_ALGORITHM - The specified Digital Signature Security Profile doesn’t allow the use of the encryption algorithm implied by the specified keys
224 | DICOM_ERROR_MAC_ID_NUMBER_ALLOCATE_FAILED - All possible values for the MAC ID Number are already used in the associated MAC Parameters Sequence
225 | DICOM_ERROR_CRYPTO_LIB_FAILURE - The underlying cryptographic library failed
226 | DICOM_ERROR_MAC_PARAMETER_MISSING - Failed to verify the Digital Signature because one or more of the MAC Parameters are missing
227 | DICOM_ERROR_MAC_ID_NUMBER_MISSING - Failed to verify the Digital Signature because no MAC Parameters Sequence Item is referenced
228 | DICOM_ERROR_UNKNOWN_MAC_ALGORITHM - Failed to verify the Digital Signature because the specified MAC Algorithm is unknown
229 | DICOM_ERROR_SIGNATURE_MISSING - Failed to verify the Digital Signature because the Signature is missing
230 | DICOM_ERROR_INVALID_SIGNATURE - The Digital Signature is invalid or at least one of the Digital Signatures in the Data Set is invalid
301 | DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED - The required SOP/Meta SOP Class is not supported on the Association (refer to the method itself)
302 | DICOM_ERROR_PRINTSCU_TIME_OUT - Timed out (refer to the Timeout property)
303 | DICOM_ERROR_PRINTSCU_ASSOCIATE_RQ_REJECTED - The Association request was rejected by the Print SCP (refer to the Associate method)
304 | DICOM_ERROR_PRINTSCU_FAILURE_STATUS - The response of the Print SCP specifies a Failure status code (the operation was not performed)


LDicomAssociate::LDicomAssociate

#include "ltdic.h"

L_VOID LDicomAssociate::LDicomAssociate(bRequest)

L_BOOL bRequest;

/* flag that indicates the type of association to create */

Constructs and initializes the different member variables of the LDicomAssociate object.

Parameter | Description
bRequest | Flag that indicates whether to create an Associate Request or an Associate Accept. Possible values are:
 | Value | Meaning
 | TRUE | Create an Associate Request.
 | FALSE | Create an Associate Accept.

Returns

None.

Comments

LDicomAssociate::LDicomAssociate(bRequest) creates either an Associate Accept object or an Associate Request object, based on the value of bRequest.

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

The characteristics of the DICOM Associate Connection may be set using LDicomAssociate::Default or by calling the following functions:

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::SetExtended

When the DICOM Association is no longer needed, it should be closed. For more information, refer to Closing a DICOM Association.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::~LDicomAssociate, LDicomAssociate::Default, LDicomAssociate::Reset, LDicomAssociate::SetRequest,LDicomAssociate::SetVersion, LDicomAssociate::SetCalled, LDicomAssociate::SetCalling, LDicomAssociate::SetApplication, LDicomAssociate::SetPresentation, LDicomAssociate::SetResult, LDicomAssociate::SetAbstract, LDicomAssociate::SetTransfer, LDicomAssociate::SetMaxLength, LDicomAssociate::SetImplementClass, LDicomAssociate::SetAsyncOperations, LDicomAssociate::SetRoleSelect, LDicomAssociate::SetImplementVersion, LDicomAssociate::SetUserInfo, LDicomAssociate::SetExtended
Topics: | Working with DICOM Associate Connections
 | Creating a DICOM Associate Connection
 | Closing a DICOM Associate Connection

Example

/* This example creates an Associate class */

L_VOID Test()
{
LDicomAssociate *pAssociate;

pAssociate = new LDicomAssociate(TRUE);

delete pAssociate;
}


LDicomAssociate::~LDicomAssociate

#include "ltdic.h"

L_VOID LDicomAssociate::~LDicomAssociate(L_VOID)

Destroys the object and frees any resources associated with it.

Returns

None.

Comments

This is the destructor for the LDicomAssociate class.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::LDicomAssociate
Topics: | Working with DICOM Associate Connections
 | Closing a DICOM Associate Connection

Example

/* This example creates and destroys an Associate class */

L_VOID Test()
{
LDicomAssociate *pAssociate;

pAssociate = new LDicomAssociate(TRUE);

delete pAssociate;
}


LDicomAssociate::AddPresentation

#include "ltdic.h"

L_INT LDicomAssociate::AddPresentation(nID, nResult, pszAbstract)

L_UCHAR nID; | /* presentation ID */
L_UCHAR nResult; | /* result */
L_CHAR * pszAbstract; | /* abstract */

Adds a Presentation Context to the DICOM Associate.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. The ID should be unique. It should start at 1 and it must be odd. (1, 3, 5, …)
nResult | The result value. This is only valid for Associate Accept. It will be ignored in an Associate Request. Possible values are:
 | Value | Meaning
 | PDU_ACCEPT_RESULT_SUCCESS | [0] Success
 | PDU_ACCEPT_RESULT_USER_REJECT | [1] User rejection
 | PDU_ACCEPT_RESULT_PROVIDER_REJECT | [2] No reason (provider rejection)
 | PDU_ACCEPT_RESULT_ABSTRACT_SYNTAX | [3] Abstract Syntax not supported. (provider rejection)
 | PDU_ACCEPT_RESULT_TRANSFER_SYNTAX | [4] Transfer Syntax not supported. (provider rejection)
pszAbstract | Abstract Syntax. This indicates the class type of the data. For a list of possibla values, refer to Abstract Syntax Values.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. A Presentation Context can be added by specifying a unique ID for the new Presentation Context and valid values for the Result (Associate Accept Presentation Context entries only) and the Abstract Syntax.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetPresentation, LDicomAssociate::SetPresentation, LDicomAssociate::GetPresentationCount, LDicomAssociate::DelPresentation
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelPresentation.


LDicomAssociate::AddTransfer

#include "ltdic.h"

L_INT LDicomAssociate::AddTransfer(nID, pszUID)

L_UCHAR nID; | /* presentation ID */
L_CHAR * pszUID; | /* character string */

Adds a Transfer Syntax to the specified Presentation Context.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
pszUID | Character string that contains the new Transfer Syntax to add. For a list of possible values, refer to Transfer Syntax Values.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. A Transfer Syntax can be added by specifying the ID for the appropriate Presentation Context to which to add the Transfer Syntax.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetTransfer, LDicomAssociate::SetTransfer, LDicomAssociate::GetTransferCount, LDicomAssociate::DelTransfer
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelTransfer.


LDicomAssociate::AddUserInfo

#include "ltdic.h"

L_INT LDicomAssociate::AddUserInfo(nType, pData, nLength)

L_UCHAR nType; | /* type */
L_CHAR * pData; | /* user data */
L_UINT16 nLength; | /* length */

Appends a User-defined item to the DICOM Associate.

Parameter | Description
nType | Type of the User-defined item.
pData | Buffer that contains the data for the User-defined item.
nLength | Length of the User-defined item.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

User-defined items may be included in the DICOM Associate to provide any other data the user finds necessary when establishing a DICOM Associate connection. The basic structure of the User-defined item is

where the Type, Length and User Data are all determined by the user. The values shown are the lengths, in bytes, of the elements of the User-defined item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::GetTypeUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::Default

#include "ltdic.h"

L_VOID LDicomAssociate::Default(L_VOID)

Sets the default values for the DICOM Associate object.

Returns

None.

Comments

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

The characteristics of the DICOM Associate Connection may be set using LDicomAssociate::Default or by calling the following functions:

LDicomAssociate::SetRequest

LDicomAssociate::SetVersion

LDicomAssociate::SetCalled

LDicomAssociate::SetCalling

LDicomAssociate::SetApplication

LDicomAssociate::SetPresentation

LDicomAssociate::SetResult

LDicomAssociate::SetAbstract

LDicomAssociate::SetTransfer

LDicomAssociate::SetMaxLength

LDicomAssociate::SetImplementClass

LDicomAssociate::SetAsyncOperations

LDicomAssociate::SetRoleSelect

LDicomAssociate::SetImplementVersion

LDicomAssociate::SetUserInfo

LDicomAssociate::SetExtended

When the DICOM Association is no longer needed, it should be closed. For more information, refer to Closing a DICOM Association.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::~LDicomAssociate, LDicomAssociate::LDicomAssociate, LDicomAssociate::Reset, LDicomAssociate::SetRequest,LDicomAssociate::SetVersion, LDicomAssociate::SetCalled, LDicomAssociate::SetCalling, LDicomAssociate::SetApplication, LDicomAssociate::SetPresentation, LDicomAssociate::SetResult, LDicomAssociate::SetAbstract, LDicomAssociate::SetTransfer, LDicomAssociate::SetMaxLength, LDicomAssociate::SetImplementClass, LDicomAssociate::SetAsyncOperations, LDicomAssociate::SetRoleSelect, LDicomAssociate::SetImplementVersion, LDicomAssociate::SetUserInfo, LDicomAssociate::SetExtended
Topics: | Working with DICOM Associate Connections
 | Creating a DICOM Associate Connection
 | Closing a DICOM Associate Connection

Example

For an example, refer to LDicomAssociate::SetRequest.


LDicomAssociate::DelPresentation

#include "ltdic.h"

L_VOID LDicomAssociate::DelPresentation(nID)

L_UCHAR nID;

/* presentation ID */

Deletes a presentation context in the DICOM Associate.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.

Returns

None.

Comments

A DICOM Associate can have multiple presentation contexts. Any of these can be deleted by passing the appropriate value for nID.

To determine the number of presentation contexts a DICOM Associate has, call LDicomAssociate::GetPresentationCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::AddPresentation, LDicomAssociate::SetPresentation, LDicomAssociate::GetPresentation, LDicomAssociate::GetPresentationCount
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
int i;
L_UCHAR nID, nMaxID;
CString strMsg, strTmp;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//get current ID's and display them
strMsg = "Presentation Contexts";
nMaxID = 0;
for (i = 0; i < m_pDicomAssociate->GetPresentationCount(); i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
strTmp.Format("\n[%d]", nID);
strMsg = strMsg + strTmp;

//store the highest nID
if (nID > nMaxID)
nMaxID = nID;
}
AfxMessageBox(strMsg);

//nID must be unique and odd number
nID = nMaxID + 2;

//change the some ids and then display them all
for (i = 0; i<m_pDicomAssociate->GetPresentationCount(); i++)
{
m_pDicomAssociate->SetPresentation(i, nID);
nID = nID + 2;
}

strMsg = "Presentation Contexts--new IDs";
for (i = 0; i<m_pDicomAssociate->GetPresentationCount(); i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
strTmp.Format("\n[%d]", nID);
strMsg = strMsg + strTmp;
}
AfxMessageBox(strMsg);

//add a presentation context
strMsg = "Presentation Contexts--Added 1";
m_pDicomAssociate->AddPresentation( 1, PDU_ACCEPT_RESULT_SUCCESS, UID_CT_IMAGE_STORAGE);
for (i = 0; i<m_pDicomAssociate->GetPresentationCount(); i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
strTmp.Format("\n[%d]", nID);
strMsg = strMsg + strTmp;
}
AfxMessageBox(strMsg);

//delete the one we added
strMsg = "Presentation Contexts--Deleted 1";
m_pDicomAssociate->DelPresentation(1);
for (i = 0; i<m_pDicomAssociate->GetPresentationCount(); i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
strTmp.Format("\n[%d]", nID);
strMsg = strMsg + strTmp;
}
AfxMessageBox(strMsg);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::DelTransfer

#include "ltdic.h"

L_VOID LDicomAssociate::DelTransfer(nID, nIndex)

L_UCHAR nID; | /* presentation ID */
L_INT nIndex; | /* index */

Deletes a Transfer Syntax from the specified Presentation Context.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nIndex | The index of the Transfer Syntax to delete. This index is zero-based.

Returns

None.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. A DICOM Associate Request can have multiple Transfer Syntax entries for each Presentation Context. A Transfer Syntax can be deleted by specifying the ID for the appropriate Presentation Context and the index for the appropriate Transfer Syntax.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetTransfer, LDicomAssociate::SetTransfer, LDicomAssociate::GetTransferCount, LDicomAssociate::AddTransfer
Topics: | Working with DICOM Associate Connections

Example

{
long i;
CString cStr;
L_INT nTransferSyntaxCount;
L_UCHAR nID;

//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//display each Transfer Syntax for the first Presentation Context
cStr = "Transfer Syntax";
nID = m_pDicomAssociate->GetPresentation(0);
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount(nID);
for (i = 0; i<nTransferSyntaxCount; i++)
{
cStr = cStr + "\n" + m_pDicomAssociate->GetTransfer(nID, i);
}
AfxMessageBox(cStr);

//add a transfer syntax
m_pDicomAssociate->AddTransfer(nID, UID_IMPLICIT_VR_LITTLE_ENDIAN);

//display each Transfer Syntax for the first Presentation Context
cStr = "Transfer Syntax--add a transfer syntax";
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount( nID);
for (i = 0; i<nTransferSyntaxCount; i++)
cStr = cStr + "\n" + m_pDicomAssociate->GetTransfer( nID, i);
AfxMessageBox(cStr);

//change them
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount( nID);
for (i = 0; i<nTransferSyntaxCount; i++)
m_pDicomAssociate->SetTransfer( nID, i, UID_EXPLICIT_VR_BIG_ENDIAN);

//display each Transfer Syntax for the first Presentation Context
cStr = "Transfer Syntax--changed";
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount( nID);
for (i = 0; i<nTransferSyntaxCount; i++)
{
cStr = cStr + "\n" + m_pDicomAssociate->GetTransfer( nID, i);
}
AfxMessageBox(cStr);

//delete the last one
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount( nID);
m_pDicomAssociate->DelTransfer( nID, nTransferSyntaxCount - 1);

//display each Transfer Syntax for the first Presentation Context
cStr = "Transfer Syntax--delete last one";
nTransferSyntaxCount = m_pDicomAssociate->GetTransferCount( nID);
for (i = 0; i<nTransferSyntaxCount; i++)
cStr = cStr + "\n" + m_pDicomAssociate->GetTransfer( nID, i);
AfxMessageBox(cStr);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::DelUserInfo

#include "ltdic.h"

L_VOID LDicomAssociate::DelUserInfo(nIndex)

L_INT nIndex;

/* index */

Deletes a user-defined item.

Parameter | Description
nIndex | Index of the user-defined item to delete.

Returns

None.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::GetTypeUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::FindAbstract

#include "ltdic.h"

L_UCHAR LDicomAssociate::FindAbstract(pszUID)

L_CHAR * pszUID;

/* abstract syntax */

Finds the Presentation Context with the specified Abstract Syntax.

Parameter | Description
pszUID | Character string that contains the Abstract String to find. For a list of possible values, refer to Abstract Syntax Values.

Returns

The presentation ID of the Presentation Context, within the DICOM Associate, that has the specified Abstract Syntax.

Comments

The Abstract Syntax provides information about the class type of the data that will be transferred across the DICOM Associate connection.

This function is valid only for DICOM Associate objects of type Associate Request.

To get the Abstract Syntax of a specific Presentation Context, call LDicomAssociate::GetAbstract.

To set the Abstract Syntax of a specific Presentation Context, call LDicomAssociate::SetAbstract.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetAbstract, LDicomAssociate::SetAbstract
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomNet::GetAssociate.


LDicomAssociate::GetAbstract

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetAbstract(nID)

L_UCHAR nID;

/* presentation ID */

Gets the Abstract Syntax for the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to get the abstract syntax. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The Abstract Syntax of the specified Presentation Context of the DICOM Associate. For a list of possible values, refer to Abstract Syntax Values.

Comments

The Abstract Syntax provides information about the class type of the data that will be transferred across the DICOM Associate connection.

This function is valid only for DICOM Associates of type Associate Request.

To set the Abstract Syntax of a specific Presentation Context, call LDicomAssociate::SetAbstract.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetAbstract
Topics: | Working with DICOM Associate Connections

Example

{
int i;
L_INT lCount;
L_UCHAR nID;
CString cStr;

//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//get current results for each Presentation Context
cStr = "Presentation Contexts--Results";
lCount = m_pDicomAssociate->GetPresentationCount();
for (i = 0; i<lCount; i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
cStr = cStr + '\n' + m_pDicomAssociate->GetAbstract(nID);

}
AfxMessageBox(cStr);

//change first five abstracts
for (i = 0; i<5; i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
m_pDicomAssociate->SetAbstract( nID, UID_CR_IMAGE_STORAGE);
}

//redisplay
cStr = "Presentation Contexts--Results";
for (i = 0; i<lCount; i++)
{
nID = m_pDicomAssociate->GetPresentation(i);
cStr = cStr + '\n' + m_pDicomAssociate->GetAbstract(nID);

}
AfxMessageBox(cStr);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::GetApplication

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetApplication(L_VOID)

Gets the Application Context for the DICOM Associate.

Returns

A character string that contains the Application Context for the DICOM Associate.

Comments

The default value for the Application Context is "1.2.840.10008.3.1.1.1" (UID_APPLICATION_CONTEXT_NAME).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetApplication
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
CString strMsg;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//Getthe current Application Context
strMsg.Format("Current Application Context: %s", m_pDicomAssociate->GetApplication());
AfxMessageBox(strMsg);

//change it
m_pDicomAssociate->SetApplication("9.9.999.99999.9.9.9.9");
strMsg.Format("New Application Context %s", m_pDicomAssociate->GetApplication());
AfxMessageBox(strMsg);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::GetCalled

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetCalled(L_VOID)

Returns the name of the Application Entity that was called.

Returns

The name of the Application Entity that was called.

Comments

For more information on the structure of an Associate, refer to LEADTOOLS DICOM Network Communication Support for Message Exchange.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetCalled, LDicomAssociate::GetCalling, LDicomAssociate::SetCalling
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
CString strMsg;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//set called application title
m_pDicomAssociate->SetCalled ("The Called Program");
//set calling application title
m_pDicomAssociate->SetCalling ("The Calling Program");

//display the current values
strMsg.Format( "GetCalled[%s]\nGetCalling[%s]",
m_pDicomAssociate->GetCalled(),
m_pDicomAssociate->GetCalling()
);
AfxMessageBox(strMsg);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::GetCalling

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetCalling(L_VOID)

Returns the name of the calling Application Entity of the DICOM Associate.

Returns

The name of the calling Application Entity of the DICOM Associate.

Comments

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetCalling, LDicomAssociate::GetCalled, LDicomAssociate::SetCalled
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetCalled.


LDicomAssociate::GetDataUserInfo

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetDataUserInfo(nIndex)

L_INT nIndex;

/* index */

Returns the data of the User-defined item at the specified index.

Parameter | Description
nIndex | Index of the User-defined item from which to retrieve the data.

Returns

The data of the specified User-defined item.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetTypeUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::GetExtended

#include "ltdic.h"

L_UCHAR * LDicomAssociate::GetExtended(nID)

L_UCHAR nID;

/* presentation ID */

Returns the extended data associated with the specified Presentation Context.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to retrieve the extended data. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The extended data of the specified Presentation Context of the DICOM Associate.

Comments

To retrieve the length of the extended data associated with a Presentation Context, call LDicomAssociate::GetLengthExtended.

To set extended data associated with a Presentation Context, call LDicomAssociate::SetExtended.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetLengthExtended, LDicomAssociate::SetExtended
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::GetImplementClass

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetImplementClass(L_VOID)

Returns the Implementation Class name for the DICOM Associate.

Returns

The name of the Implementation Class for the DICOM Associate.

Comments

Setting the Implementation Class can be disabled, or enabled and set using LDicomAssociate::SetImplementClass.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsImplementClass, LDicomAssociate::SetImplementClass
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsImplementClass.


LDicomAssociate::GetImplementVersion

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetImplementVersion(L_VOID)

Returns the Implementation Version for the DICOM Associate.

Returns

The Implementation Version for the DICOM Associate.

Comments

Setting the Implementation Version can be disabled, or enabled and set using LDicomAssociate::SetImplementVersion.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsImplementVersion, LDicomAssociate::SetImplementVersion
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsImplementVersion.


LDicomAssociate::GetInvokedOperations

#include "ltdic.h"

L_UINT16 LDicomAssociate::GetInvokedOperations(L_VOID)

Returns the number of Asynchronous Operations that may be invoked.

Returns

The number of Asynchronous Operations that may be invoked.

Comments

If a DICOM Associate connection does not support Asynchronous Operations, then an Application Entity must wait for the response from one message before sending another. If Asynchronous Operations are supported, multiple messages may be sent without waiting for a response. The number of messages that may be sent is set using LDicomAssociate::SetAsyncOperations.

To determine the number of Asynchronous Operations that may be invoked without a response, call LDicomAssociate::GetInvokedOperations. To determine the number of operations that have been completed, call LDicomAssociate::GetPerformedOperations.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsAsyncOperations, LDicomAssociate::GetPerformedOperations, LDicomAssociate::SetAsyncOperations
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsAsyncOperations.


LDicomAssociate::GetLengthExtended

#include "ltdic.h"

L_UINT32 LDicomAssociate::GetLengthExtended(nID)

L_UCHAR nID;

/* presentation ID */

Returns the length of the extended data associated with the specified Presentation Context.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to retrieve the length of the extended data. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The length of the extended data of the specified Presentation Context of the DICOM Associate.

Comments

To retrieve the extended data associated with a Presentation Context, call LDicomAssociate::GetExtended.

To set extended data associated with a Presentation Context, call LDicomAssociate::SetExtended.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetExtended, LDicomAssociate::SetExtended
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::GetLengthUserInfo

#include "ltdic.h"

L_UINT16 LDicomAssociate::GetLengthUserInfo(nIndex)

L_INT nIndex;

/* index */

Returns the length of the specified User-defined item.

Parameter | Description
nIndex | Index of the User-defined item for which the length should be retrieved.

Returns

The length of the specified User-defined item.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetTypeUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::GetMaxLength

#include "ltdic.h"

L_UINT32 LDicomAssociate::GetMaxLength(L_VOID)

Returns the Maximum Length for data transfer.

Returns

The Maximum Length for data transfer, in bytes.

Comments

If the Maximum Length restriction is enabled the Maximum Length must be 0, or >= 8 and it must be an even number (8, 10, 12, …).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsMaxLength, LDicomAssociate::SetMaxLength
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsMaxLength.


LDicomAssociate::GetPerformedOperations

#include "ltdic.h"

L_UINT16 LDicomAssociate::GetPerformedOperations(L_VOID)

Returns the number of completed Asynchronous Operations

Returns

The number of Asynchronous Operations that have been completed.

Comments

If a DICOM Associate connection does not support Asynchronous Operations, then an Application Entity must wait for the response from one message before sending another. If Asynchronous Operations are supported, multiple messages may be sent without waiting for a response. The number of messages that may be sent is set using LDicomAssociate::SetAsyncOperations.

To determine the number of Asynchronous Operations that may be invoked without a response, call LDicomAssociate::GetInvokedOperations. To determine the number of operations that have been completed, call LDicomAssociate::GetPerformedOperations.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsAsyncOperations, LDicomAssociate::GetInvokedOperations, LDicomAssociate::SetAsyncOperations
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsAsyncOperations.


LDicomAssociate::GetPresentation

#include "ltdic.h"

L_UCHAR LDicomAssociate::GetPresentation(nIndex)

L_INT nIndex;

/* index */

Returns the Presentation Context ID of the Presentation Context at the specified index, for the DICOM Associate.

Parameter | Description
nIndex | Index of the Presentation Context ID to get.

Returns

The Presentation Context ID for the specified Presentation Context.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. The Presentation ID can be retrieved by passing the appropriate value for nIndex.

To determine the number of presentation contexts a DICOM Associate has, call LDicomAssociate::GetPresentationCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::AddPresentation, LDicomAssociate::SetPresentation, LDicomAssociate::DelPresentation, LDicomAssociate::GetPresentationCount
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelPresentation.


LDicomAssociate::GetPresentationCount

#include "ltdic.h"

L_INT LDicomAssociate::GetPresentationCount(L_VOID)

Returns the number of Presentation Context entries for the specified DICOM Associate.

Returns

The number of Presentation Context entries for the specified DICOM Associate.

Comments

A DICOM Associate can have multiple Presentation Context entries. This function returns the number of Presentation Context entries in the DICOM Associate.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetPresentation, LDicomAssociate::SetPresentation, LDicomAssociate::AddPresentation, LDicomAssociate::DelPresentation
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelPresentation.


LDicomAssociate::GetProviderRole

#include "ltdic.h"

L_UCHAR LDicomAssociate::GetProviderRole(nID)

L_UCHAR nID;

/* presentation ID */

Returns the value for the Provider Role of the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to retrieve the Provider Role. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The value for the Provider Role of the specified Presentation Context of the DICOM Associate. Possible values are:

Value | Meaning
PDU_ROLE_NON_SUPPORT | [0] User role not supported.
PDU_ROLE_SUPPORT | [1] User role supported.

Comments

Support for the Provider Role allows the Application Entity to act as an SCP for that Presentation Context.

To enable Role Selection, call LDicomAssociate::SetRoleSelect.

To set the User and Provider Roles, call LDicomAssociate::SetRoleSelect.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsRoleSelect, LDicomAssociate::GetUserRole, LDicomAssociate::SetRoleSelect
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::GetResult

#include "ltdic.h"

L_UCHAR LDicomAssociate::GetResult(nID)

L_UCHAR nID;

/* Presentation ID */

Returns the result of the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to get the result. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The result of the specified Presentation Context of the DICOM Associate. Possible values are:

Value | Meaning
PDU_ACCEPT_RESULT_SUCCESS | [0] Success
PDU_ACCEPT_RESULT_USER_REJECT | [1] User rejection
PDU_ACCEPT_RESULT_PROVIDER_REJECT | [2] No reason (provider rejection)
PDU_ACCEPT_RESULT_ABSTRACT_SYNTAX | [3] Abstract Syntax not supported. (provider rejection)
PDU_ACCEPT_RESULT_TRANSFER_SYNTAX | [4] Transfer Syntax not supported. (provider rejection)

Comments

This function is only valid for DICOM Associates of type Associate Accept.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetResult
Topics: | Working with DICOM Associate Connections

Example

/* This example displays the result of the first Presentation Context */

L_VOID Test(LDicomAssociate *pAssociate)
{
L_CHAR szText[10];
L_UCHAR nID;

nID = pAssociate->GetPresentation(0);
sprintf(szText, "%u", pAssociate->GetResult(nID));
MessageBox(NULL, szText, "Notice", MB_OK);
}


LDicomAssociate::GetTransfer

#include "ltdic.h"

L_CHAR * LDicomAssociate::GetTransfer(nID, nIndex)

L_UCHAR nID; | /* presentation ID */
L_INT nIndex; | /* index */

Returns the Transfer Syntax for the specified Presentation Context and index.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nIndex | Index of the Transfer Syntax to return.

Returns

The Transfer Syntax of the specified Presentation Context, at the specified index.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. A DICOM Associate Request can have multiple Transfer Syntax entries for each Presentation Context. A Transfer Syntax can be retrieved by specifying the ID for the appropriate Presentation Context and the index for the appropriate Transfer Syntax.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::DelTransfer, LDicomAssociate::SetTransfer, LDicomAssociate::GetTransferCount, LDicomAssociate::AddTransfer
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelTransfer.


LDicomAssociate::GetTransferCount

#include "ltdic.h"

L_INT LDicomAssociate::GetTransferCount(nID)

L_UCHAR nID;

/* presentation ID */

Returns the number of Transfer Syntax entries for the specified Presentation Context.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.

Returns

The number of Transfer Syntax entries for the specified Presentation Context.

Comments

A DICOM Associate can have more than one Presentation Context. The nID parameter identifies which Presentation Context to use when getting the number of Transfer Syntax entries.

A Presentation Context for an Associate Accept has only one Transfer Syntax. Therefore if you call this function for the Presentation Context of a DICOM Associate Accept, it will return 1.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetTransfer, LDicomAssociate::SetTransfer, LDicomAssociate::AddTransfer, LDicomAssociate::DelTransfer
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelTransfer.


LDicomAssociate::GetTypeUserInfo

#include "ltdic.h"

L_UCHAR LDicomAssociate::GetTypeUserInfo(nIndex)

L_INT nIndex;

/* index */

Returns the type of the User-defined item.

Parameter | Description
nIndex | Index of the User-defined item from which the type should be retrieved.

Returns

The type of the specified User-defined item.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::GetUserInfoCount

#include "ltdic.h"

L_INT LDicomAssociate::GetUserInfoCount(L_VOID)

Returns the number of User-defined items in the DICOM Associate.

Returns

The number of User-defined items in the DICOM Associate.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetTypeUserInfo, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::SetUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
int i;
int nType;
int nLen;
CString cStr;

//create the Associate Class as Request, and set to default
m_pDicomAssociate = new LDicomAssociate(TRUE);
m_pDicomAssociate->Default();

//get current user info types, lengths, and data then display them
cStr = "Current user:";
if (m_pDicomAssociate->GetUserInfoCount() > 0)
{
for (i = 0; i<m_pDicomAssociate->GetUserInfoCount(); i++)
{
nType = m_pDicomAssociate->GetTypeUserInfo( i);
nLen = m_pDicomAssociate->GetLengthUserInfo( i);
CString strData = m_pDicomAssociate->GetDataUserInfo( i);
CString strTmp;
strTmp.Format("Type[%d]\nLength[%d]\nData[%s]", nType, nLen,strData);
cStr = cStr + "\n" + strTmp;
}
}
else
cStr = cStr + "\nNone";
AfxMessageBox(cStr);

//add a user info item item
cStr = "Add user info item";
CString strTest = "Just a test";

m_pDicomAssociate->AddUserInfo( 99, (L_CHAR *)(LPCTSTR)strTest, strTest.GetLength());
if (m_pDicomAssociate->GetUserInfoCount() > 0)
{
for (i = 0; i<m_pDicomAssociate->GetUserInfoCount(); i++)
{
nType = m_pDicomAssociate->GetTypeUserInfo( i);
nLen = m_pDicomAssociate->GetLengthUserInfo( i);
CString strData = m_pDicomAssociate->GetDataUserInfo( i);
CString strTmp;
strTmp.Format("Type[%d]\nLength[%d]\nData[%s]", nType, nLen,strData);
cStr = cStr + "\n" + strTmp;
}
}
else
cStr = cStr + "\nNone";
AfxMessageBox(cStr);

//for each user info item, change the data
strTest = "a second test";
for (i = 0; i<m_pDicomAssociate->GetUserInfoCount(); i++)
{
nType = m_pDicomAssociate->GetTypeUserInfo( i);
m_pDicomAssociate->SetUserInfo( i, nType, (L_CHAR *)(LPCTSTR)strTest, strTest.GetLength());
}

cStr = "Change user data";
if (m_pDicomAssociate->GetUserInfoCount() > 0)
{
for (i = 0; i<m_pDicomAssociate->GetUserInfoCount(); i++)
{
nType = m_pDicomAssociate->GetTypeUserInfo( i);
nLen = m_pDicomAssociate->GetLengthUserInfo( i);
CString strData = m_pDicomAssociate->GetDataUserInfo( i);
CString strTmp;
strTmp.Format("Type[%d]\nLength[%d]\nData[%s]", nType, nLen,strData);
cStr = cStr + "\n" + strTmp;
}
}
else
cStr = cStr + "\nNone";
AfxMessageBox(cStr);

//delete the one we added
m_pDicomAssociate->DelUserInfo( m_pDicomAssociate->GetUserInfoCount() - 1);
cStr = "Delete the added user";
if (m_pDicomAssociate->GetUserInfoCount() > 0)
{
for (i = 0; i<m_pDicomAssociate->GetUserInfoCount(); i++)
{
nType = m_pDicomAssociate->GetTypeUserInfo( i);
nLen = m_pDicomAssociate->GetLengthUserInfo( i);
CString strData = m_pDicomAssociate->GetDataUserInfo( i);
CString strTmp;
strTmp.Format("Type[%d]\nLength[%d]\nData[%s]", nType, nLen,strData);
cStr = cStr + "\n" + strTmp;
}
}
else
cStr = cStr + "\nNone";
AfxMessageBox(cStr);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::GetUserRole

#include "ltdic.h"

L_UCHAR LDicomAssociate::GetUserRole(nID)

L_UCHAR nID;

/* presentation ID */

Returns the value for the User Role of the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context from which to retrieve the User Role. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

The value for the User Role of the specified Presentation Context of the DICOM Associate. Possible values are:

Value | Meaning
PDU_ROLE_NON_SUPPORT | [0] User role not supported.
PDU_ROLE_SUPPORT | [1] User role supported.

Comments

Support for the User Role allows the Application Entity to act as an SCU for that Presentation Context.

To enable Role Selection, call LDicomAssociate::SetRoleSelect.

To set the User and Provider Roles, call LDicomAssociate::SetRoleSelect.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsRoleSelect, LDicomAssociate::GetProviderRole, LDicomAssociate::SetRoleSelect
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::GetVersion

#include "ltdic.h"

L_UINT16 LDicomAssociate::GetVersion(L_VOID)

Returns the version of the DICOM Associate.

Returns

The version of the DICOM Associate.

Comments

The default value is 1.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetVersion
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as follows:
// LDicomAssociate *m_pDicomAssociate;
CString strMsg;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//check the Associate Class version
L_UINT16 uVersion = m_pDicomAssociate->GetVersion();

strMsg.Format("Version[%d]", uVersion);
AfxMessageBox(strMsg);

//set the version
m_pDicomAssociate->SetVersion(99);
uVersion = m_pDicomAssociate->GetVersion();

strMsg.Format("Version[%d]", uVersion);
AfxMessageBox(strMsg);

//Free associate
delete m_pDicomAssociate;
}


LDicomAssociate::IsAsyncOperations

#include "ltdic.h"

L_BOOL LDicomAssociate::IsAsyncOperations(L_VOID)

Determines whether Asynchronous Operations are supported.

Returns

TRUE | The DICOM Associate supports Asynchronous Operations.
FALSE | The DICOM Associate does not support Asynchronous Operations.

Comments

If a DICOM Associate connection does not support Asynchronous Operations, then an Application Entity must wait for the response from one message before sending another. If Asynchronous Operations are supported, multiple messages may be sent without waiting for a response. The number of messages that may be sent is set using LDicomAssociate::SetAsyncOperations.

To determine the number of Asynchronous Operations that may be invoked without a response, call LDicomAssociate::GetInvokedOperations. To determine the number of operations that have been completed, call LDicomAssociate::GetPerformedOperations.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetInvokedOperations, LDicomAssociate::GetPerformedOperations, LDicomAssociate::SetAsyncOperations
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
CString cStr;

//...Assume associate object has been created
if (m_pDicomAssociate->IsAsyncOperations() )
{
//get the operations counts
L_UINT16 lInvoked = m_pDicomAssociate->GetInvokedOperations();
L_UINT16 lPerformed = m_pDicomAssociate->GetPerformedOperations();

//now disable it
m_pDicomAssociate->SetAsyncOperations( FALSE, 0, 0);
cStr.Format("AsyncOperations Disabled:\n\tInvoked[%d]\n\tPerformed[%d]", lInvoked, lPerformed);
AfxMessageBox(cStr);
}
else
{
m_pDicomAssociate->SetAsyncOperations( TRUE, 0, 0);
AfxMessageBox("AsyncOperations enabled");
}
}


LDicomAssociate::IsImplementClass

#include "ltdic.h"

L_BOOL LDicomAssociate::IsImplementClass(L_VOID)

Determines whether setting the Implementation Class is enabled for the DICOM Associate.

Returns

TRUE | Setting the Implementation Class is enabled.
FALSE | Setting the Implementation Class is disabled.

Comments

If setting the Implementation Class is enabled, the name may be retrieved using LDicomAssociate::GetImplementClass, or set using LDicomAssociate::SetImplementClass.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetImplementClass, LDicomAssociate::SetImplementClass
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
CString szUID;

//...Assume associate object has been created

//is implement enabled?
if (m_pDicomAssociate->IsImplementClass())
{
//disable it
//display old value
szUID = m_pDicomAssociate->GetImplementClass();
AfxMessageBox("Implement Class Disabled: " + szUID);
m_pDicomAssociate->SetImplementClass( FALSE, (L_CHAR *)(LPCTSTR)szUID);
}
else
{
//enable it
m_pDicomAssociate->SetImplementClass( TRUE, UID_RT_DOSE_STORAGE);
szUID = m_pDicomAssociate->GetImplementClass();
AfxMessageBox("Implement Class Enabled: " + szUID);
}
}


LDicomAssociate::IsImplementVersion

#include "ltdic.h"

L_BOOL LDicomAssociate::IsImplementVersion(L_VOID)

Determines whether setting the Implementation Version is enabled for the DICOM Associate.

Returns

TRUE | Setting the Implementation Version is enabled.
FALSE | Setting the Implementation Version is disabled.

Comments

If setting the Implementation Version is enabled, the name may be retrieved using LDicomAssociate::GetImplementVersion, or set using LDicomAssociate::SetImplementVersion.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetImplementVersion, LDicomAssociate::SetImplementVersion
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
CString strVersion, strMsg;
int nRet;

//...Assume associate object has been created

if (m_pDicomAssociate->IsImplementVersion())
{
//disable it and display old value
strVersion = m_pDicomAssociate->GetImplementVersion();
nRet = m_pDicomAssociate->SetImplementVersion( FALSE, (L_CHAR *)(LPCTSTR)strVersion);
strMsg = "ImplementVersion Disabled: \n" + strVersion;
AfxMessageBox(strMsg);
}
else
{
//enable it
nRet = m_pDicomAssociate->SetImplementVersion( TRUE, "v13.0");
strVersion = m_pDicomAssociate->GetImplementVersion();
strMsg = "ImplementVersion Enabled: \n" + strVersion;
AfxMessageBox(strMsg);
}
}


LDicomAssociate::IsMaxLength

#include "ltdic.h"

L_BOOL LDicomAssociate::IsMaxLength(L_VOID)

Determine whether the Maximum Length restriction is enabled or disabled for the DICOM Associate.

Returns

TRUE | The Maximum Length restriction is enabled.
FALSE | The Maximum Length restriction is disabled.

Comments

A Maximum Length restriction can be placed on the data transport across a DICOM Associate connection. If the restriction is enabled, the value may be retrieved using LDicomAssociate::GetMaxLength, or set using LDicomAssociate::SetMaxLength.

To enable or disable the Maximum Length restriction, call LDicomAssociate::SetMaxLength.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetMaxLength, LDicomAssociate::SetMaxLength
Topics: | Working with DICOM Associate Connections

Example

{
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;
long lLen;
CString cStr;

//...Assume associate object has been created

//is max len enabled?
if (m_pDicomAssociate->IsMaxLength())
{
//disable it and display old value
lLen = m_pDicomAssociate->GetMaxLength();
cStr.Format("Maximum Length Disabled: %d", lLen);
AfxMessageBox(cStr);
m_pDicomAssociate->SetMaxLength( FALSE, lLen);
}
else
{
//enable it
long lNewLen = 8;
m_pDicomAssociate->SetMaxLength( TRUE, lNewLen);
cStr.Format("Maximum Length Enabled: %d", lNewLen);
AfxMessageBox(cStr);
}
}


LDicomAssociate::IsRequest

#include "ltdic.h"

L_BOOL LDicomAssociate::IsRequest(L_VOID)

Returns a value that indicates the type of the DICOM Associate (Request or Accept).

Returns

TRUE | The DICOM Associate is of type Associate Request.
FALSE | The DICOM Associate is of type Associate Accept.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::SetRequest
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::SetRequest.


LDicomAssociate::IsRoleSelect

#include "ltdic.h"

L_BOOL LDicomAssociate::IsRoleSelect(nID)

L_UCHAR nID;

/* presentation ID */

Determines whether Role Selection is enabled for the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context for which you wish to check Role Selection. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.

Returns

TRUE | Role Selection is enabled for the specified Presentation Context of the DICOM Associate.
FALSE | Role Selection is disabled for the specified Presentation Context of the DICOM Associate.

Comments

If Role Selection is enabled, the role of the specified Presentation Context can be retrieved using LDicomAssociate::GetUserRole and LDicomAssociate::GetProviderRole. To set the role of the specified Presentation Context, use LDicomAssociate::SetRoleSelect.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserRole, LDicomAssociate::GetProviderRole, LDicomAssociate::SetRoleSelect
Topics: | Working with DICOM Associate Connections

Example

{
//This example builds an associate request (pointed to by pAssociateAll)
//that contains all the abstract syntaxes
//present in m_pDicomAssociate, and adds all the abstract syntaxes not present in m_pDicomAssociate.
//Each abstract syntax that was not in m_pDicomAssociate is given a default presentation context
//
//m_pDicomAssociate is a member variable declared as:
// LDicomAssociate *m_pDicomAssociate;

L_UCHAR nID, nIDtemp;
pDICOMUID pUID;
CString strAbstractSyntax;
L_INT i, j;
LDicomAssociate *pAssociateAll;
CString strMsg;
CString strTmp;

//Create the new associate object
pAssociateAll =new LDicomAssociate(TRUE);

nIDtemp = 1;
pUID = LDicomUID::GetFirst();
while (pUID != NULL)
{
if ((pUID->nType == UID_TYPE_CLASS) || (pUID->nType == UID_TYPE_META_CLASS))
{
pAssociateAll->AddPresentation(nIDtemp, 0, pUID->pszCode);
nIDtemp += 2;
}
pUID = LDicomUID::GetNext(pUID);
}

for (i = 0; i < pAssociateAll->GetPresentationCount(); i++)
{
nIDtemp = pAssociateAll->GetPresentation(i);
strAbstractSyntax = pAssociateAll->GetAbstract(nIDtemp);
nID = m_pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strAbstractSyntax);

//if abstract not found in m_pDicomAssociate, add default transfer syntaxes so that
//the abstract syntax will not be rejected by the server
if (nID == 0)
{
pUID = LDicomUID::GetFirst();
while (pUID != NULL)
{
if (pUID->nType == UID_TYPE_TRANSFER1)
{
pAssociateAll->AddTransfer(nIDtemp, pUID->pszCode);
}

pUID = LDicomUID::GetNext(pUID);
}
}

//abstract found in hAssociateRequest
//add transfer syntaxes for the abstract syntax found in hAssociateRequest
else
{
for (j = 0; j < m_pDicomAssociate->GetTransferCount(nID); j++)
{
CString strTransferSyntax = m_pDicomAssociate->GetTransfer(nID, j);
pAssociateAll->AddTransfer(nIDtemp, (L_CHAR *)(LPCTSTR)strTransferSyntax);
}

pAssociateAll->SetRoleSelect(
nIDtemp,
m_pDicomAssociate->IsRoleSelect(nID),
m_pDicomAssociate->GetUserRole(nID),
m_pDicomAssociate->GetProviderRole(nID)
);

pAssociateAll->SetExtended(
nIDtemp,
m_pDicomAssociate->GetExtended(nID),
m_pDicomAssociate->GetLengthExtended(nID)
);
}
}

//Display each abstract syntax (and some presentation context info) for pAssociateAll object
strMsg = "AssociateAll:";
for (i=0; i<pAssociateAll->GetPresentationCount(); i++)
{
nIDtemp = pAssociateAll->GetPresentation(i);
strAbstractSyntax = pAssociateAll->GetAbstract(nIDtemp);
pUID = LDicomUID::Find((L_CHAR *)(LPCTSTR)strAbstractSyntax);
strMsg = strMsg + "\n" + pUID->pszName;
if (pAssociateAll->IsRoleSelect(nIDtemp))
{
L_UCHAR uUserRole = pAssociateAll->GetUserRole(nIDtemp);
L_UCHAR uProviderRole = pAssociateAll->GetProviderRole(nIDtemp);
strTmp.Format("UserRole[%d] ProviderRole[%d]", uUserRole, uProviderRole);
strMsg = strMsg + strTmp;
}
}
AfxMessageBox(strMsg);
}


LDicomAssociate::Reset

#include "ltdic.h"

L_VOID LDicomAssociate::Reset(bRequest)

L_BOOL bRequest;

/* flag that indicates the type */

Removes all elements from the DICOM Associate and resets it to the specified type.

Parameter | Description
bRequest | Flag that indicates the type of Associate to which the DICOM Associate should be reset. Possible values are:
 | Value | Meaning
 | TRUE | Reset the DICOM Associate to type Associate Request.
 | FALSE | Reset the DICOM Associate to type Associate Accept.

Returns

None.

Comments

For more information about the structure of a DICOM Associate, refer to LEADTOOLS DICOM Network Communication Support for Message Exchange.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::LDicomAssociate
Topics: | Working with DICOM Associate Connections

Example

/* This example deletes all information in the Associate class */

L_VOID Test(LDicomAssociate *pAssociate)
{
pAssociate->Reset(FALSE);
}


LDicomAssociate::SetAbstract

#include "ltdic.h"

L_INT LDicomAssociate::SetAbstract(nID, pszUID)

L_UCHAR nID; | /* presentation ID */
L_CHAR * pszUID; | /* abstract syntax */

Sets the Abstract Syntax of the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context to which to set the abstract syntax. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.
pszUID | Character string that contains the Abstract Syntax to set. For a list of possible values, refer to Abstract Syntax Values. This parameter cannot exceed PDU_MAX_UID_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

The Abstract Syntax provides information about the class type of the data that will be transferred across the DICOM Associate connection.

This function is valid only for DICOM Associates of type Associate Request.

To get the Abstract Syntax of a specific Presentation Context, call LDicomAssociate::GetAbstract.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetAbstract
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetAbstract.


LDicomAssociate::SetApplication

#include "ltdic.h"

L_INT LDicomAssociate::SetApplication(pszUID)

L_CHAR * pszUID;

/* Application Context to set */

Sets the Application Context of the DICOM Associate.

Parameter | Description
pszUID | Character string that contains the new Application Context to set. This parameter cannot exceed PDU_MAX_UID_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

The default value for the Application Context is "1.2.840.10008.3.1.1.1" (UID_APPLICATION_CONTEXT_NAME).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetApplication
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetApplication.


LDicomAssociate::SetAsyncOperations

#include "ltdic.h"

L_INT LDicomAssociate::SetAsyncOperations(bEnabled, nInvoked, nPerformed)

L_BOOL bEnabled; | /* flag that indicates whether to enable Asynchronous Operations */
L_UINT16 nInvoked; | /* number of operations to invoke */
L_UINT16 nPerformed; | /* number of operations performed */

Enables or disables Asynchronous Operation support. It also sets the number of operations that can be invoked if enabled.

Parameter | Description
bEnabled | Flag that indicates whether to enable or disable Asynchronous Operations. Possible values are:
 | Value | Meaning
 | TRUE | Enable Asynchronous Operations.
 | FALSE | Disable Asynchronous Operations.
nInvoked | The number of operations (messages) that can be sent without a response.
nPerformed | The number of Asynchronous Operations performed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If a DICOM Associate connection does not support Asynchronous Operations, then an Application Entity must wait for the response from one message before sending another. If Asynchronous Operations are supported, multiple messages may be sent without waiting for a response. The number of messages that may be sent is set using LDicomAssociate::SetAsyncOperations.

To determine the number of Asynchronous Operations that may be invoked without a response, call LDicomAssociate::GetInvokedOperations. To determine the number of operations that have been completed, call LDicomAssociate::GetPerformedOperations.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsAsyncOperations, LDicomAssociate::GetPerformedOperations, LDicomAssociate::GetInvokedOperations
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsAsyncOperations.


LDicomAssociate::SetCalled

#include "ltdic.h"

L_INT LDicomAssociate::SetCalled(pszName)

L_CHAR * pszName;

/* name of the called Application Entity to set*/

Sets the name of the called Application Entity in the DICOM Associate.

Parameter | Description
pszName | Character string that contains the name of the called Application Entity to set for the specified DICOM Associate. This parameter cannot exceed PDU_MAX_TITLE_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetCalled, LDicomAssociate::GetCalling, LDicomAssociate::SetCalling
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetCalled.


LDicomAssociate::SetCalling

#include "ltdic.h"

L_INT LDicomAssociate::SetCalling(pszName)

L_CHAR * pszName;

/* name of the calling AE to set */

Sets the name of the calling Application Entity of the DICOM Associate.

Parameter | Description
pszName | Character string that contains tha name of the calling Application Entity to set for the DICOM Associate. This parameter cannot exceed PDU_MAX_TITLE_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetCalling, LDicomAssociate::GetCalled, LDicomAssociate::SetCalled
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetCalled.


LDicomAssociate::SetExtended

#include "ltdic.h"

L_INT LDicomAssociate::SetExtended(pPDU, nID, pData, nLength)

LDicomAssociate *pPDU; | /* a DICOM Associate object */
L_UCHAR nID; | /* presentation ID */
L_UCHAR *pData; | /* extended data */
L_UINT32 nLength; | /* length of the extended data */

Sets the extended data associated with the specified Presentation Context.

Parameter | Description
pPDU | A DICOM Associate object.
nID | Presentation ID of the Presentation Context to which to set the extended data. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.
pData | Buffer that contains the data to set.
nLength | Length of pData.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

To retrieve the length of the extended data associated with a Presentation Context, call LDicomAssociate::GetLengthExtended.

To get extended data associated with a Presentation Context, call LDicomAssociate::GetExtended.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetLengthExtended, LDicomAssociate::GetExtended
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::SetImplementClass

#include "ltdic.h"

L_INT LDicomAssociate::SetImplementClass(bEnabled, pszUID)

L_BOOL bEnabled; | /* flag that indicates whether to enable setting the implementation class */
L_CHAR * pszUID; | /* new implementation class */

Enables or disables setting the Implementation Class. It also sets the Implementation Class if enabled.

Parameter | Description
bEnabled | Flag that indicates whether to enable or disable setting the Implementation Class. Possible values are:
 | Value | Meaning
 | TRUE | Enable setting the Implementation Class.
 | FALSE | Disable setting the Implementation Class.
pszUID | Character string that contains the new name for the Implementation Class. This parameter cannot exceed PDU_MAX_UID_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If setting the Implementation Class is enabled, you can get the name of the Implementation Class by calling LDicomAssociate::GetImplementClass.

To determine whether the Implementation Class can be set, call LDicomAssociate::IsImplementClass.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsImplementClass, LDicomAssociate::GetImplementClass
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsImplementClass.


LDicomAssociate::SetImplementVersion

#include "ltdic.h"

L_INT LDicomAssociate::SetImplementVersion(bEnabled, pszVersion)

L_BOOL bEnabled; | /* flag that indicates whether to enable setting the implementation version */
L_CHAR * pszVersion; | /* the new version */

Enables or disables setting the Implementation Version. It also sets the Implementation Version if enabled.

Parameter | Description
bEnabled | Flag that indicates whether to enable or disable setting the Implementation Version. Possible values are:
 | Value | Meaning
 | TRUE | Enable setting the Implementation Version.
 | FALSE | Disable setting the Implementation Version.
pszVersion | Character string that contains the new Implementation Version. This parameter cannot exceed PDU_MAX_VERSION_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If setting the Implementation Version is enabled, you can get the Implementation Version by calling LDicomAssociate::GetImplementVersion.

To determine whether the Implementation Version can be set, call LDicomAssociate::IsImplementVersion.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsImplementVersion, LDicomAssociate::GetImplementVersion
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsImplementVersion.


LDicomAssociate::SetMaxLength

#include "ltdic.h"

L_INT LDicomAssociate::SetMaxLength(bEnabled, nLength)

L_BOOL bEnabled; | /* flag that indicates whether to enable the max length */
L_UINT32 nLength; | /* maximum length */

Enables or disables the Maximum Length restriction for data transfer. It also sets the maximum length value if the restriction is enabled.

Parameter | Description
bEnabled | Flag that indicates whether to enable or disable the Maximum Length restriction. Possible values are:
 | Value | Meaning
 | TRUE | Enable the Maximum Length restriction for data transfer.
 | FALSE | Disable the Maximum Length restriction for data transfer.
nLength | The maximum length value to set. This value is only valid if bEnabled is TRUE.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If the Maximum Length restriction is enabled the Maximum Length must be 0, or >= 8 and it must be an even number (8, 10, 12, …).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsMaxLength, LDicomAssociate::GetMaxLength
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsMaxLength.


LDicomAssociate::SetPresentation

#include "ltdic.h"

L_INT LDicomAssociate::SetPresentation(nIndex, nID)

L_INT nIndex; | /* index */
L_UCHAR nID; | /* presentation ID */

Sets the ID for a Presentation Context.

Parameter | Description
nIndex | Index of the Presentation Context to set.
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It must be unique. It should start at 1 and it must be odd. (1, 3, 5, …)

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. The ID for each of these Presentation Contexts must be unique. The IDs for the Presentation Context entries for the specified DICOM Associate should start at 1, and must be odd.

For example, a DICOM Associate may have three Presentation Context entries. One of those entries should have an ID of 1. The IDs must be unique. (Having two Presentation Context entries with an ID of 3 is not valid.) Therefore the IDs may be 1 for the first Presentation Context, 3 for the next one and 5 for the last one.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::DelPresentation, LDicomAssociate::GetPresentation, LDicomAssociate::GetPresentationCount, LDicomAssociate::AddPresentation
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelPresentation.


LDicomAssociate::SetRequest

#include "ltdic.h"

L_VOID LDicomAssociate::SetRequest(bRequest)

L_BOOL bRequest;

/* flag that indicates the type of Associate to set */

Sets the type of DICOM Associate (Request or Accept).

Parameter | Description
bRequest | Flag that indicates the type of DICOM Associate to set. Possible values are:
 | Value | Meaning
 | TRUE | Sets the DICOM Associate to Associate Request.
 | FALSE | Sets the DICOM Associate to Associate Accept.

Returns

None.

Comments

For more information about Associate Connections, refer to Creating a DICOM Associate Connection.

To determine what type of Associate a DICOM Associate is, use LDicomAssociate::IsRequest.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsRequest
Topics: | Working with DICOM Associate Connections

Example

L_VOID Test()
{
//m_pDicomAssociate is a member variable declared as follows:
// LDicomAssociate *m_pDicomAssociate;

//create the Associate Class as Request
m_pDicomAssociate = new LDicomAssociate(TRUE);

//set the Associate to the default
m_pDicomAssociate->Default();

//Get presentations here
if (m_pDicomAssociate->IsRequest())
AfxMessageBox ("Associate Request? TRUE");
else
AfxMessageBox ("Associate Request? FALSE");

//reset the Associate class to Accept
m_pDicomAssociate->SetRequest(FALSE);

//set the Associate to the default
m_pDicomAssociate->Default();

if (m_pDicomAssociate->IsRequest())
AfxMessageBox ("Associate Request? TRUE");
else
AfxMessageBox ("Associate Request? FALSE");

//free the Associate class (destructor gets called)
delete m_pDicomAssociate;
}


LDicomAssociate::SetResult

#include "ltdic.h"

L_INT LDicomAssociate::SetResult(nID, nResult)

L_UCHAR nID; | /* presentation ID */
L_UCHAR nResult; | /* result */

Sets the result of the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context in which to set the result. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.
nResult | The result to set. Possible values are:
 | Value | Meaning
 | PDU_ACCEPT_RESULT_SUCCESS | [0] Success
 | PDU_ACCEPT_RESULT_USER_REJECT | [1] User rejection
 | PDU_ACCEPT_RESULT_PROVIDER_REJECT | [2] No reason (provider rejection)
 | PDU_ACCEPT_RESULT_ABSTRACT_SYNTAX | [3] Abstract Syntax not supported. (provider rejection)
 | PDU_ACCEPT_RESULT_TRANSFER_SYNTAX | [4] Transfer Syntax not supported. (provider rejection)

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function is only valid for DICOM Associates of type Associate Accept.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetResult
Topics: | Working with DICOM Associate Connections

Example

/* This example sets the result for the first Presentation Context */

L_VOID Test(LDicomAssociate *pAssociate)
{
L_UCHAR nID;

nID = pAssociate->GetPresentation(0);
pAssociate->SetResult(nID, 0);
}


LDicomAssociate::SetRoleSelect

#include "ltdic.h"

L_INT LDicomAssociate::SetRoleSelect(nID, bEnabled, nUser, nProvider)

L_UCHAR nID; | /* presentation ID */
L_BOOL bEnabled; | /* flag that indicates whether to enable role selection */
L_UCHAR nUser; | /* flag that indicates whether to support the user role */
L_UCHAR nProvider; | /* flag that indicates whether to support the provider role */

Enables or disables Role Selection. It also sets the User Role and Provider Role, if enabled, for the specified Presentation Context of the DICOM Associate.

Parameter | Description
nID | Presentation ID of the Presentation Context in which to set the User Role and Provider Role. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data. It also identifies a specific Presentation Context within an Associate.
bEnabled | Flag that indicates whether to enable or disable Role Selection. Possible values are:
 | Value | Meaning
 | TRUE | Enable Role Selection.
 | FALSE | Disable Role Selection.
nUser | Flag that indicates whether or not to support the User Role for the specified Presentation Context. Possible values are:
 | Value | Meaning
 | PDU_ROLE_NON_SUPPORT | [0] Do not support the User Role.
 | PDU_ROLE_SUPPORT | [1] Support the User Role.
nProvider | Flag that indicates whether or not to support the Provider Role for the specified Presentation Context. Possible values are:
 | Value | Meaning
 | PDU_ROLE_NON_SUPPORT | [0] Do not support the Provider Role.
 | PDU_ROLE_SUPPORT | [1] Support the Provider Role.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If Role Selection is enabled for a specific Presentation Context, that Application Entity can act as an SCU, an SCP or both for that Presentation Context.

For example, suppose a DICOM Associate Request has three Presentation Contexts. One Presentation Context is for the transfer of X-RAY data, another Presentation Context is for the transfer of CT data, and the third Presentation Context is for the transfer of Nuclear Medicine data.

To serve as an SCU only for the X-RAY data transfer, the User Role for the first Presentation Context should be PDU_ROLE_SUPPORT, while the Provider Role should be PDU_ROLE_NON_SUPPORT.

To serve as both an SCU and an SCP for the CT data transfer, the User Role and the Provider Role should both be PDU_ROLE_SUPPORT for the second Presentation Context.

To serve as an SCU only for the Nuclear Medicine data transfer, the User Role for the third Presentation Context should be PDU_ROLE_SUPPORT, while the Provider Role should be PDU_ROLE_NON_SUPPORT.

If Role Selection is enabled, the User Role and Provider Role settings can be retrieved using LDicomAssociate::GetUserRole and LDicomAssociate::GetProviderRole.

To determine whether Role Selection is enabled, use LDicomAssociate::IsRoleSelect.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::IsRoleSelect, LDicomAssociate::GetUserRole, LDicomAssociate::GetProviderRole
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::IsRoleSelect.


LDicomAssociate::SetTransfer

#include "ltdic.h"

L_INT LDicomAssociate::SetTransfer(nID, nIndex, pszUID)

L_UCHAR nID; | /* presentation ID */
L_INT nIndex; | /* index */
L_CHAR * pszUID; | /* character string */

Sets a Transfer Syntax for the specified Presentation Context.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nIndex | Index of the Transfer Syntax to set.
pszUID | Character string that contains the new Transfer Syntax to set. For a list of possible values, refer to Transfer Syntax Values. This parameter cannot exceed PDU_MAX_UID_SIZE + 1, including the null character at the end.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

A DICOM Associate (Request or Accept) can have multiple Presentation Contexts. A DICOM Associate Request can have multiple Transfer Syntax entries for each Presentation Context. A Transfer Syntax can be retrieved by specifying the ID for the appropriate Presentation Context and the index for the appropriate Transfer Syntax.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::DelTransfer, LDicomAssociate::GetTransfer, LDicomAssociate::GetTransferCount, LDicomAssociate::AddTransfer
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::DelTransfer.


LDicomAssociate::SetUserInfo

#include "ltdic.h"

L_INT LDicomAssociate::SetUserInfo(nIndex, nType, pData, nLength)

L_INT nIndex; | /* index */
L_UCHAR nType; | /* type */
L_CHAR * pData; | /* user data */
L_UINT16 nLength; | /* length */

Sets the specified User-defined item using the specified parameters.

Parameter | Description
nIndex | Index of the User-defined item to be set.
nType | Type of the User-defined item.
pData | Buffer that contains the data for the specified User-defined item.
nLength | Length of the specified User-defined item.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

For more information about User-defined items, refer to LDicomAssociate::AddUserInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetUserInfoCount, LDicomAssociate::GetLengthUserInfo, LDicomAssociate::GetDataUserInfo, LDicomAssociate::GetTypeUserInfo, LDicomAssociate::AddUserInfo, LDicomAssociate::DelUserInfo
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetUserInfoCount.


LDicomAssociate::SetVersion

#include "ltdic.h"

L_INT LDicomAssociate::SetVersion(nVersion)

L_UINT16 nVersion;

/* version number to set */

Sets the version of the DICOM Associate.

Parameter | Description
nVersion | The version number to set.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

The default version number is 1.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomAssociate::GetVersion
Topics: | Working with DICOM Associate Connections

Example

For an example, refer to LDicomAssociate::GetVersion.


LDicomContextGroup::Default

#include "ltdic.h"

static L_BOOL LDicomContextGroup::Default(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Restores the specified Context Group to the default values as stored in the internal table maintained by LEADTOOLS.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group to be restored. If this parameter is set to NULL, the function restores all the Context Groups in the Context Group Table.

Returns

TRUE | The specified Context Group was restored successfully.
FALSE | The function failed to allocate memory.

Comments

LEADTOOLS maintains an internal table of the Context Groups defined by the DICOM Content Mapping Resource (DCMR). Use the LDicomContextGroup::Load function to load Context Groups from this table into the Context Group Table. After a Context Group is loaded, its Coded Concepts can be deleted, their Code Meanings can be modified, and new Concepts can be added to the Group. Use the Default function to discard all the changes made to the Context Group.

If the internal table doesn’t contain a Context Group with the same Context ID as that of the specified Context Group, the function will just return successfully without affecting the Context Group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Reset, LDicomContextGroup::Delete, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::InsertCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomContextGroup::Delete

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::Delete(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Deletes the specified Context Group from the Context Group Table.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group to be deleted.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies an adjacent Context Group in the Context Group Table. This Group is the one immediately following the Group being deleted or the one immediately preceding it if no Groups follow the Group being deleted.
NULL | No Context Groups are left in the Context Group Table.

Comments

Use the Delete function to delete a Context Group from the table. To delete all the Context Groups at one time, use the LDicomContextGroup::Reset function.

Use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions to add Context Groups to the Context Group Table.

Use the LDicomContextGroup::DeleteCodedConcept function to delete a Coded Concept in a Context Group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::Reset, LDicomContextGroup::Exists, LDicomContextGroup::Default, LDicomContextGroup::DeleteCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomContextGroup::DeleteCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::DeleteCodedConcept(pCodedConcept)

pDICOMCODEDCONCEPT pCodedConcept;

/* pointer to a Coded Concept */

Deletes the specified Coded Concept from the Context Group to which it belongs.

Parameter | Description
pCodedConcept | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept to be deleted.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies an adjacent Coded Concept in the same Context Group. This Concept is the one immediately following the Concept being deleted or the one immediately preceding it if no Concepts follow the Concept being deleted.
NULL | No Coded Concepts are left in the Context Group of the deleted Coded Concept.

Comments

If a Context Group in the Context Group Table has a corresponding Group in the internal table maintained by LEADTOOLS, then you can use the LDicomContextGroup::Default function to discard any changes made to the Context Group, including the deletions of any Coded Concepts that originally belong to the Context Group, as stored in the internal table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::InsertCodedConcept, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::ExistsCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::Default, LDicomContextGroup::Delete, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomContextGroup::Exists

#include "ltdic.h"

static L_BOOL LDicomContextGroup::Exists(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Determines whether the specified pointer is valid, that is, whether it points to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table.

Parameter | Description
pContextGroup | Pointer to the DICOMCONTEXTGROUP structure pointer to be tested.

Returns

TRUE | pContextGroup is a valid pointer.
FALSE | pContextGroup is not a valid pointer.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirst, LDicomContextGroup::FindIndex, LDicomContextGroup::Delete, LDicomContextGroup::ExistsCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::ExistsCodedConcept

#include "ltdic.h"

static L_BOOL LDicomContextGroup::ExistsCodedConcept(pCodedConcept)

pDICOMCODEDCONCEPT pCodedConcept;

/* pointer to a Coded Concept */

Determines whether the specified pointer is valid: that is, whether it points to a DICOMCODEDCONCEPT structure that specifies a Coded Concept that exists in one of the Context Groups in the Context Group Table.

Parameter | Description
pCodedConcept | The DICOMCODEDCONCEPT structure pointer to be tested.

Returns

TRUE | pCodedConcept is a valid pointer.
FALSE | pCodedConcept is not a valid pointer.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::Exists, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetContextGroup.


LDicomContextGroup::Find

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::Find(pszContextID)

L_CHAR * pszContextID;

/* Context ID */

Returns a pointer to the Context Group in the Context Group Table that has the specified Context Identifier (CID).

Parameter | Description
pszContextID | Character string that contains a Context Identifier (CID). For a list of the Context Identifiers of the Context Groups maintained internally, refer to Context Identifier Values. The function Returns a pointer to the DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table for the specified Context ID.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table for the specified Context ID.
NULL | None of the Context Groups in the Context Group Table has the specified Context ID.

Comments

A Context Group is identified by its Context Identifier (CID). For a list of the Context Identifiers of the Context Groups maintained internally, refer to Context Identifier Values.

Notice that only the Context Groups in the Context Group Table are searched by the function. To add Context Groups to the table, use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions.

To search for a specific Coded Concept in a Context Group, use the LDicomContextGroup::FindCodedConcept function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirst, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindCodedConcept, Class Members
Topics: | Working with Context Groups

Example

L_VOID ModifyContextGroup()
{
LDicomContextGroup::Reset ();
LDicomContextGroup::Load ();

pDICOMCONTEXTGROUP pGroup;
pDICOMCODEDCONCEPT pConcept;

// Look for a Context Group
pGroup = LDicomContextGroup::Find(CID_6019);
if (!pGroup)
{
return;
}

// Look for a Coded Concept in the Context Group
pConcept = LDicomContextGroup::FindCodedConcept(pGroup, "SRT", "F-01781");
if (!pConcept)
{
return;
}

// Set the Code Meaning of the Coded Concept (French translation)
if (!LDicomContextGroup::SetCodeMeaning(pConcept, "Situé à 1 heure"))
{
return;
}
// Refer to the example of LDicomContextGroup::GetContextGroup for
// the function DisplayCodedConcept
DisplayCodedConcept(pConcept, FALSE);

// Delete the Coded Concept
LDicomContextGroup::DeleteCodedConcept(pConcept);

// Add a (testing) Coded Concept to the Context Group
pConcept = LDicomContextGroup::InsertCodedConcept(pGroup,
"CSD",
NULL,
"CV",
"CM");
if (!pConcept)
{
return;
}
DisplayCodedConcept(pConcept, FALSE);

// Restore the Context Group (discard all the changes made to the Group)
LDicomContextGroup::Default(pGroup);
// Refer to the example of LDicomContextGroup::GetFirstCodedConcept for
// the function EnumCodedConcepts
EnumCodedConcepts(pGroup);

// Delete the Context Group
LDicomContextGroup::Delete(pGroup);
}


LDicomContextGroup::FindCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::FindCodedConcept(pContextGroup, pszCodingSchemeDesignator, pszCodeValue)

pDICOMCONTEXTGROUP pContextGroup; | /* pointer to a Context Group */
L_CHAR * pszCodingSchemeDesignator; | /* Coding Scheme Designator */
L_CHAR * pszCodeValue; | /* Code Value */

Returns a pointer to the Coded Concept, in the specified Context Group, which has the specified Coding Scheme Designator and Code Value.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group to be searched for the Coded Concept.
pszCodingSchemeDesignator | Character string that contains the Coding Scheme Designator (0008,0102) of the Coded Concept.
pszCodeValue | Character string that contains the Code Value (0008,0100) of the Coded Concept.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept in the specified Context Group that has the specified Coding Scheme Designator and Code Value.
NULL | The specified Context Group doesn’t contain a Coded Concept with the specified Coding Scheme Designator and Code Value.

Comments

A Coded Concept is identified in its Context Group by its Coding Scheme Designator (0008,0102) and Code Value (0008,0100). Use the FindCodedConcept function to search a Context Group for a specific Coded Concept.

To search for a specific Context Group in the Context Group Table, use the LDicomContextGroup::Find function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::Find, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomContextGroup::FindIndex

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::FindIndex(uIndex)

L_UINT32 uIndex;

/* index of Context Group */

Returns a pointer to the Context Group located at the specified index in the Context Group Table.

Parameter | Description
uIndex | An unsigned 32-bit integer that represents the index of the required Context Group. Valid values range from 0 to the count of Context Groups in the table minus 1. This count is returned by the LDicomContextGroup::GetCount function.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table that is located at the specified index.
NULL | The index specified is invalid.

Comments

The following functions can also be used to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

Use the following functions to investigate the Coded Concepts of a Context Group:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetCount, LDicomContextGroup::GetFirst, LDicomContextGroup::FindIndexCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::FindIndexCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::FindIndexCodedConcept(pContextGroup, uIndex)

pDICOMCONTEXTGROUP pContextGroup; | /* pointer to a Context Group */
L_UINT32 uIndex; | /* index of a Coded Concept */

Returns a pointer to the Coded Concept at the specified index in the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group that contains the specified Coded Concept.
uIndex | The index of the required Coded Concept in the specified Context Group. Valid values range from 0 to the count of Coded Concepts in the Context Group minus 1. This count is returned by the LDicomContextGroup::GetCountCodedConcept function.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept for the specified index in the specified Context Group.
NULL | The specified index is invalid.

Comments

The following functions can also be used to maneuver through the Coded Concepts:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetCountCodedConcept, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndex, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::GetContextGroup

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::GetContextGroup(pCodedConcept)

pDICOMCODEDCONCEPT pCodedConcept;

/* pointer to a Coded Concept */

Returns a pointer to the Context Group in the Context Group Table to which the specified Coded Concept belongs.

Parameter | Description
pCodedConcept | Pointer to a DICOMCODEDCONCEPT structure that specifies a Coded Concept. The function Returns a pointer to the DICOMCONTEXTGROUP structure that specifies the Context Group to which this Coded Concept belongs.

Returns

Pointer to the DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table to which the specified Coded Concept belongs.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::FindCodedConcept, LDicomContextGroup::InsertCodedConcept, Class Members
Topics: | Working with Context Groups

Example

L_BOOL DisplayCodedConcept(pDICOMCODEDCONCEPT pConcept, L_BOOL bYesNo)
{
// Is it a valid pointer?
if (!LDicomContextGroup::ExistsCodedConcept (pConcept))
{
return FALSE;
}

L_CHAR szMsg[256], szTitle[32];

pDICOMCONTEXTGROUP pGroup = LDicomContextGroup::GetContextGroup(pConcept);
wsprintf(szTitle, "Coded Concept (%s)", pGroup->pszContextIdentifier);

if (pConcept->pszCodingSchemeVersion)
{
wsprintf(szMsg,
bYesNo ? "%s\n%s\n%s\n%s\n\nContinue?" : "%s\n%s\n%s\n%s",
pConcept->pszCodingSchemeDesignator,
pConcept->pszCodingSchemeVersion,
pConcept->pszCodeValue,
pConcept->pszCodeMeaning);
}
else
{
wsprintf(szMsg,
bYesNo ? "%s\n%s\n%s\n\nContinue?" : "%s\n%s\n%s",
pConcept->pszCodingSchemeDesignator,
pConcept->pszCodeValue,
pConcept->pszCodeMeaning);
}

if (bYesNo)
{
return (::MessageBox(NULL, szMsg, szTitle, MB_YESNO) == IDYES);
}
else
{
::MessageBox(NULL, szMsg, szTitle, MB_OK);
return TRUE;
}
}


LDicomContextGroup::GetCount

#include "ltdic.h"

static L_UINT32 LDicomContextGroup::GetCount()

Returns the number of Context Groups in the Context Group Table.

Returns

The number of Context Groups in the Context Group Table.

Comments

Use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions to add Context Groups to the Context Group Table.

Using this function along with the function LDicomContextGroup::FindIndex, you can enumerate the Context Groups in the table.

You can maneuver through the Context Groups in the table by using the following functions:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

Use the LDicomContextGroup::GetCountCodedConcept function to obtain the number of Coded Concepts in a Context Group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::FindIndex, LDicomContextGroup::GetFirst, LDicomContextGroup::GetCountCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::GetCountCodedConcept

#include "ltdic.h"

static L_UINT32 LDicomContextGroup::GetCountCodedConcept(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Returns the number of Coded Concepts in the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table. The function Returns the number of Coded Concepts in this Group.

Returns

The number of Coded Concepts in the specified Context Group.

Comments

Using this function along with the LDicomContextGroup::FindIndexCodedConcept function you can enumerate the Coded Concepts in a Context Group.

You can maneuver through the Coded Concepts by using the following functions:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

Use the LDicomContextGroup::GetCount function to obtain the number of Context Groups in the Context Group Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::GetCount, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::GetFirst

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::GetFirst()

Returns a pointer to the first Context Group in the Context Group Table.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the first Context Group in the Context Group Table.
NULL | The Context Group Table is empty.

Comments

Use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions to add Context Groups to the Context Group Table.

Along with this function, the following functions can be used to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

You can also use the LDicomContextGroup::GetCount and LDicomContextGroup::FindIndex functions to enumerate the Context Groups in the table.

The Coded Concepts of a Context Group can be investigated using the following functions:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetLast, LDicomContextGroup::GetNext, LDicomContextGroup::GetPrev, LDicomContextGroup::GetCount, LDicomContextGroup::FindIndex, LDicomContextGroup::Find, LDicomContextGroup::GetFirstCodedConcept, Class Members
Topics: | Working with Context Groups

Example

L_VOID EnumContextGroups()
{
LDicomContextGroup::Reset ();

// Load all the Context Groups
LDicomContextGroup::Load ();

pDICOMCONTEXTGROUP pGroup;
L_CHAR szMsg[256];
L_INT nRet;

// Enumerate them (3 possible ways)
#if 1

// One possible way to enumerate the Context Groups
pGroup = LDicomContextGroup::GetFirst();
while (pGroup)
{
wsprintf(szMsg, "%s\n%s\n\nEnumerate Coded Concepts?",
pGroup->pszContextIdentifier,
pGroup->pszName);

nRet = ::MessageBox(NULL, szMsg, "Context Group", MB_YESNOCANCEL);
if (nRet == IDYES)
{
// Refer to the example of LDicomContextGroup::GetFirstCodedConcept
// for the function EnumCodedConcepts
EnumCodedConcepts(pGroup);
}
else if (nRet == IDCANCEL)
{
break;
}

pGroup = LDicomContextGroup::GetNext(pGroup);
}

#elif 0

// Another way to enumerate the Context Groups
L_UINT32 uGroupsCount = LDicomContextGroup::GetCount();
for (L_UINT32 i = 0; i < uGroupsCount; i++)
{
pGroup = LDicomContextGroup::FindIndex(i);

wsprintf(szMsg, "%s\n%s\n\nEnumerate Coded Concepts?",
pGroup->pszContextIdentifier,
pGroup->pszName);

nRet = ::MessageBox(NULL, szMsg, "Context Group", MB_YESNOCANCEL);
if (nRet == IDYES)
{
EnumCodedConcepts(pGroup);
}
else if (nRet == IDCANCEL)
{
break;
}
}

#elif 0

// A third way to enumerate the Context Groups
pGroup = LDicomContextGroup::GetLast();
while (pGroup)
{
wsprintf(szMsg, "%s\n%s\n\nEnumerate Coded Concepts?",
pGroup->pszContextIdentifier,
pGroup->pszName);

nRet = ::MessageBox(NULL, szMsg, "Context Group", MB_YESNOCANCEL);
if (nRet == IDYES)
{
EnumCodedConcepts(pGroup);
}
else if (nRet == IDCANCEL)
{
break;
}

pGroup = LDicomContextGroup::GetPrev(pGroup);
}

#endif
}


LDicomContextGroup::GetFirstCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::GetFirstCodedConcept(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Returns a pointer to the first Coded Concept in the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table. The function Returns a pointer to the first Coded Concept in this Group, if it contains any.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the first Coded Concept in the specified Context Group.
NULL | The specified Context Group does not contain any Coded Concepts.

Comments

Along with this function, the following functions can be used to maneuver through the Coded Concepts of a Context Group in the Context Group Table:

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

You can also use the LDicomContextGroup::GetCountCodedConcept and LDicomContextGroup::FindIndexCodedConcept functions to enumerate the Coded Concepts.

Use the LDicomContextGroup::GetContextGroup function to obtain the Context Group to which a Coded Concept belongs.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetLastCodedConcept, LDicomContextGroup::GetNextCodedConcept, LDicomContextGroup::GetPrevCodedConcept, LDicomContextGroup::GetCountCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetFirst, Class Members
Topics: | Working with Context Groups

Example

L_VOID EnumCodedConcepts(pDICOMCONTEXTGROUP pGroup)
{
// Is it a valid pointer?
if (!LDicomContextGroup::Exists(pGroup))
{
return;
}

pDICOMCODEDCONCEPT pConcept;

// Enumerate the Coded Concepts in the Context Group (3 possible ways)
#if 1

// One possible way to enumerate the Coded Concepts
pConcept = LDicomContextGroup::GetFirstCodedConcept(pGroup);
while (pConcept)
{
// Refer to the example of LDicomContextGroup::GetContextGroup for
// the function DisplayCodedConcept
if (!DisplayCodedConcept(pConcept, TRUE))
{
break;
}

pConcept = LDicomContextGroup::GetNextCodedConcept(pConcept);
}

#elif 0

// Another way to enumerate the Coded Concepts
L_UINT32 uConceptsCount;
uConceptsCount = LDicomContextGroup::GetCountCodedConcept(pGroup);
for (L_UINT32 i = 0; i < uConceptsCount; i++)
{
pConcept = LDicomContextGroup::FindIndexCodedConcept (pGroup, i);
if (!DisplayCodedConcept(pConcept, TRUE))
{
break;
}
}

#elif 0

// A third way to enumerate the Coded Concepts
pConcept = LDicomContextGroup::GetLastCodedConcept(pGroup);
while (pConcept)
{
if (!DisplayCodedConcept(pConcept, TRUE))
{
break;
}

pConcept = LDicomContextGroup::GetPrevCodedConcept(pConcept);
}

#endif
}


LDicomContextGroup::GetLast

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::GetLast()

Returns a pointer to the last Context Group in the Context Group Table.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the last Context Group in the Context Group Table.
NULL | The Context Group Table is empty.

Comments

Use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions to add Context Groups to the Context Group Table.

Along with this function, the following functions can be used to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetNext

LDicomContextGroup::GetPrev

You can also use the LDicomContextGroup::GetCount and LDicomContextGroup::FindIndex functions to enumerate the Context Groups in the table.

The Coded Concepts of a Context Group can be investigated using the following functions:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirst, LDicomContextGroup::GetNext, LDicomContextGroup::GetPrev, LDicomContextGroup::GetCount, LDicomContextGroup::FindIndex, LDicomContextGroup::Find, LDicomContextGroup::GetLastCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::GetLastCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::GetLastCodedConcept(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Returns a pointer to the last Coded Concept in the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table. The function Returns a pointer to the last Coded Concept in this Group, if it contains any.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the last Coded Concept in the specified Context Group.
NULL | The specified Context Group does not contain any Coded Concepts.

Comments

Along with this function, the following functions can be used to maneuver through the Coded Concepts of a Context Group in the Context Group Table:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

You can also use the LDicomContextGroup::GetCountCodedConcept and LDicomContextGroup::FindIndexCodedConcept functions to enumerate the Coded Concepts.

Use the LDicomContextGroup::GetContextGroup function to obtain the Context Group to which a Coded Concept belongs.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::GetNextCodedConcept, LDicomContextGroup::GetPrevCodedConcept, LDicomContextGroup::GetCountCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetLast, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::GetNext

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::GetNext(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Returns a pointer to the Context Group in the Context Group Table that immediately follows the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table. The function Returns a pointer to the structure that specifies the Group that immediately follows this Group, if there is one.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table that immediately follows the Group specified by pContextGroup.
NULL | No Context Group follows the one specified by pContextGroup. (pContextGroup is the last Context Group in the table.)

Comments

Along with this function, the following functions can be used to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetPrev

You can also use the functions LDicomContextGroup::GetCount and LDicomContextGroup::FindIndex to enumerate the Context Groups in the table.

The Coded Concepts of a Context Group can be investigated using the following functions:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetFirst, LDicomContextGroup::GetLast, LDicomContextGroup::GetPrev, LDicomContextGroup::GetCount, LDicomContextGroup::FindIndex, LDicomContextGroup::GetNextCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::GetNextCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::GetNextCodedConcept(pCodedConcept)

pDICOMCODEDCONCEPT pCodedConcept;

/* pointer to a Coded Concept */

Returns a pointer to the Coded Concept in the same Context Group that immediately follows the specified Coded Concept.

Parameter | Description
pCodedConcept | Pointer to a DICOMCODEDCONCEPT structure that specifies a Coded Concept. The function Returns a pointer to the structure that specifies the Concept that immediately follows this Concept (in their Context Group), if there is one.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept which immediately follows the Concept specified by pCodedConcept.
NULL | No Coded Concept follows the one specified by pCodedConcept. (pCodedConcept is the last Coded Concept in its Context Group.)

Comments

Along with this function, the following functions can be used to maneuver through the Coded Concepts of a Context Group in the Context Group Table:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetPrevCodedConcept

You can also use the LDicomContextGroup::GetCountCodedConcept and LDicomContextGroup::FindIndexCodedConcept functions to enumerate the Coded Concepts.

Use the LDicomContextGroup::GetContextGroup function to obtain Context Group to which a Coded Concept belongs.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::GetLastCodedConcept, LDicomContextGroup::GetPrevCodedConcept, LDicomContextGroup::GetCountCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetNext, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::GetPrev

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::GetPrev(pContextGroup)

pDICOMCONTEXTGROUP pContextGroup;

/* pointer to a Context Group */

Returns a pointer to the Context Group in the Context Group Table that immediately precedes the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies a Context Group in the Context Group Table. The function will return a pointer to the structure that specifies the Group that immediately precedes this Group, if there is one.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group in the Context Group Table that immediately precedes the Group specified by pContextGroup.
NULL | No Context Group precedes the one specified by pContextGroup. (pContextGroup is the first Context Group in the table.)

Comments

Along with this function, the following functions can be used to maneuver through the Context Groups in the Context Group Table:

LDicomContextGroup::GetFirst

LDicomContextGroup::GetLast

LDicomContextGroup::GetNext

You can also use the LDicomContextGroup::GetCount and LDicomContextGroup::FindIndex functions to enumerate the Context Groups in the table.

The Coded Concepts of a Context Group can be investigated using the following functions:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

LDicomContextGroup::GetPrevCodedConcept

LDicomContextGroup::GetCountCodedConcept

LDicomContextGroup::FindIndexCodedConcept

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::GetFirst, LDicomContextGroup::GetLast, LDicomContextGroup::GetNext, LDicomContextGroup::GetCount, LDicomContextGroup::FindIndex, LDicomContextGroup::GetPrevCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::GetPrevCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::GetPrevCodedConcept(pCodedConcept)

pDICOMCODEDCONCEPT pCodedConcept;

/* pointer to a Coded Concept */

Returns a pointer to the Coded Concept, in the same Context Group, that immediately precedes the specified Coded Concept.

Parameter | Description
pCodedConcept | Pointer to a DICOMCODEDCONCEPT structure that specifies a Coded Concept. The function Returns a pointer to the structure that specifies the Concept that immediately precedes this Concept (in their Context Group), if there is one.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept which immediately precedes the Concept specified by pCodedConcept.
NULL | No Coded Concept precedes the one specified by pCodedConcept. (pCodedConcept is the first Coded Concept in its Context Group.)

Comments

Along with this function, the following functions can be used to maneuver through the Coded Concepts of a Context Group in the Context Group Table:

LDicomContextGroup::GetFirstCodedConcept

LDicomContextGroup::GetLastCodedConcept

LDicomContextGroup::GetNextCodedConcept

You can also use the LDicomContextGroup::GetCountCodedConcept and LDicomContextGroup::FindIndexCodedConcept functions to enumerate the Coded Concepts.

Use the LDicomContextGroup::GetContextGroup function to obtain the Context Group to which a Coded Concept belongs.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::GetLastCodedConcept, LDicomContextGroup::GetNextCodedConcept, LDicomContextGroup::GetCountCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::GetContextGroup, LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetPrev, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirstCodedConcept.


LDicomContextGroup::Insert

#include "ltdic.h"

static pDICOMCONTEXTGROUP LDicomContextGroup::Insert(pszContextIdentifier, pszName, bExtensible, pContextGroupVersion, uFlags = 0)

L_CHAR * pszContextIdentifier; | /* Context Identifier */
L_CHAR * pszName; | /* name of the Context Group */
L_BOOL bExtensible; | /* extensibility */
pVALUEDATETIME pContextGroupVersion; | /* pointer to Context Group Version */
L_UINT16 uFlags; | /* flags */

Adds a new Context Group to the Context Group Table.

Parameter | Description
pszContextIdentifier | Character string that contains the Context Identifier (0008,010F) of the new Context Group. For a list of values, refer to Context Identifier Values.
pszName | Character string that contains the name of the new Context Group.
bExtensible | Value that specifies whether the new Context Group is Extensible. Possible values are:
 | Value | Meaning
 | TRUE | The new Context Group is Extensible.
 | FALSE | The new Context Group is Non-extensible.

pContextGroupVersion | Pointer to a VALUEDATETIME structure that specifies the Context Group Version (0008,0106) of the new Context Group.
uFlags | Flags that control the behavior of this function. This can be set to 0 or one of the following values:
 | Value | Meaning
 | DICOM_CONTEXTGROUP_DISALLOW_DUPLICATES | [0x01] The function should fail if a Context Group with the same specified Context Identifier already exists in the Context Group Table.

Returns

!NULL | Pointer to a DICOMCONTEXTGROUP structure that specifies the newly inserted Context Group.
NULL | The function failed to allocate memory.

Comments

Please note that if the Context Identifier, Name, and Context Group Version of the new Context Group are not specified, the function fails and Returns NULL.

A Context Group can be added to the Context Group Table either by loading it from the internal table maintained by LEADTOOLS or by inserting it into the Context Group Table directly. Use the Insert function to insert a new Context Group to the Context Group Table. To load Context Groups from the internal table, use the LDicomContextGroup::Load function.

Use the function LDicomContextGroup::InsertCodedConcept to add Coded Concepts to a Context Group in the Context Group Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Delete, LDicomContextGroup::Reset, LDicomContextGroup::Find, LDicomContextGroup::GetFirst, LDicomContextGroup::InsertCodedConcept, LDicomContextGroup::GetFirstCodedConcept, Class Members
Topics: | Working with Context Groups

Example

L_VOID InsertContextGroup()
{
pDICOMCONTEXTGROUP pGroup;

VALUEDATETIME Version = { 2004, 3, 22, 0, 0, 0, 0, 0 };

// Insert a (testing) Context Group
pGroup = LDicomContextGroup::Insert("CID XXXX",
"New Context Group",
TRUE,
&Version);
if (!pGroup)
{
return;
}

// Fill the Context Group with some (testing) Coded Concepts
LDicomContextGroup::InsertCodedConcept(pGroup,
"CSD1", NULL, "CV1", "CM1");
LDicomContextGroup::InsertCodedConcept(pGroup,
"CSD2", NULL, "CV2", "CM2");
LDicomContextGroup::InsertCodedConcept(pGroup,
"CSD3", NULL, "CV3", "CM3");

// Refer to the example of LDicomContextGroup::GetFirstCodedConcept for
// the function EnumCodedConcepts
EnumCodedConcepts(pGroup);

// Delete the Context Group
LDicomContextGroup::Delete(pGroup);
}


LDicomContextGroup::InsertCodedConcept

#include "ltdic.h"

static pDICOMCODEDCONCEPT LDicomContextGroup::InsertCodedConcept(pContextGroup, pszCodingSchemeDesignator, pszCodingSchemeVersion, pszCodeValue, pszCodeMeaning, pContextGroupLocalVersion = NULL, pszContextGroupExtensionCreatorUID = NULL, uFlags = 0)

pDICOMCONTEXTGROUP pContextGroup; | /* pointer to a Context Group */
L_CHAR * pszCodingSchemeDesignator; | /* Coding Scheme Designator */
L_CHAR * pszCodingSchemeVersion; | /* Coding Scheme Version */
L_CHAR * pszCodeValue; | /* Code Value */
L_CHAR * pszCodeMeaning; | /* Code Meaning */
pVALUEDATETIME pContextGroupLocalVersion; | /* pointer to the Context Group Local Version */
L_CHAR * pszContextGroupExtensionCreatorUID; | /* Context Group Extension Creator UID */
L_UINT16 uFlags; | /* flags */

Adds a new Coded Concept to the specified Context Group.

Parameter | Description
pContextGroup | Pointer to a DICOMCONTEXTGROUP structure that specifies the Context Group to which the new Coded Concept is to be added.
pszCodingSchemeDesignator | Character string that contains the Coding Scheme Designator (0008,0102) for the new Coded Concept.
pszCodingSchemeVersion | Character string that contains the Coding Scheme Version (0008,0103) for the new Coded Concept. Set this to NULL if no Coding Scheme Version is to be defined for the new Coded Concept.
pszCodeValue | Character string that contains the Code Value (0008,0100) for the new Coded Concept.
pszCodeMeaning | Character string that contains the Code Meaning (0008,0104) for the new Coded Concept.
pContextGroupLocalVersion | Pointer to a VALUEDATETIME structure that specifies the Context Group Local Version (0008,0107) for the new Coded Concept. Set this to NULL if no Context Group Local Version is to be defined for the new Coded Concept.
pszContextGroupExtensionCreatorUID | Character string that contains the Context Group Extension Creator UID (0008,010D) for the new Coded Concept. Set this to NULL if no Context Group Extension Creator UID is to be defined for the new Coded Concept.
uFlags | Flags that control the behavior of this function. This can be set to 0 or one of the following values:
 | Value | Meaning
 | DICOM_CONTEXTGROUP_DISALLOW_DUPLICATES | [0x01] The function should fail if a Coded Concept with the same specified Coding Scheme Designator and Code Value already exists in the specified Context Group.

Returns

!NULL | Pointer to a DICOMCODEDCONCEPT structure that specifies the newly inserted Coded Concept.
NULL | The function failed to allocate memory.

Comments

Please note that if the Coding Scheme Designator, the Code Value, and the Code Meaning of the new Coded Concept are not specified, the function fails and Returns NULL.

If a Context Group in the Context Group Table has a corresponding Group in the internal table maintained by LEADTOOLS, then you can use the LDicomContextGroup::Default function to discard any changes made to the Context Group, including any additions of new Coded Concepts.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::SetCodeMeaning, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::Default, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomContextGroup::Load

#include "ltdic.h"

static L_UINT16 LDicomContextGroup::Load(pszContextID = NULL)

L_CHAR * pszContextID;

/* Context ID */

Loads the specified Context Group from the internal table into the Context Group Table.

Parameter | Description
pszContextID | Character string that contains the Context Identifier (CID) of the Context Group to be loaded from the internal table. For a list of possible values, refer to Context Identifier Values. If this parameter is set to NULL, the function loads all the Context Groups that are currently unloaded.

Returns

0 | The function was successful.
>0 | An error occurred. Refer to Return Codes.

Comments

You can add a Context Group to the Context Group Table either by loading it from the internal table maintained by LEADTOOLS or by inserting it directly into the Context Group Table. The Context Groups in the internal table are those defined by the DICOM Content Mapping Resource (DCMR). For a list of possible values, refer to Context Identifier Values. Use the Load function to load the desired Context Groups from this table into the Context Group Table. To insert a Context Group, use the LDicomContextGroup::Insert function.

If the Context Group Table already contains a Context Group with the specified Context ID, the function will just return successfully. If the parameter pszContextID is set to NULL, the function will load all the Context Groups that are not loaded currently, without affecting any Context Group that is already in the Context Group Table. (Therefore, to load all of the Context Groups in the internal table from the beginning, call the function with the pszContextID parameter set to NULL.)

A return value of DICOM_ERROR_PARAMETER indicates that the internal table doesn’t contain a Context Group with the specified Context ID.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Insert, LDicomContextGroup::Delete, LDicomContextGroup::Reset, LDicomContextGroup::Find, LDicomContextGroup::GetFirst, LDicomContextGroup::GetFirstCodedConcept, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::Reset

#include "ltdic.h"

static L_VOID LDicomContextGroup::Reset()

Deletes all the Context Groups from the Context Group Table.

Returns

None.

Comments

Use the LDicomContextGroup::Load and LDicomContextGroup::Insert functions to add Context Groups to the Context Group Table. Use the Reset function to delete all the Context Groups in the table. To delete a single Context Group from the table, use the LDicomContextGroup::Delete function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::Load, LDicomContextGroup::Insert, LDicomContextGroup::Delete, LDicomContextGroup::Default, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::GetFirst.


LDicomContextGroup::SetCodeMeaning

#include "ltdic.h"

static L_BOOL LDicomContextGroup::SetCodeMeaning(pCodedConcept, pszCodeMeaning)

pDICOMCODEDCONCEPT pCodedConcept; | /* pointer to a Coded Concept */
L_CHAR * pszCodeMeaning; | /* Code Meaning */

Sets the Code Meaning (0008,0104) for the specified Coded Concept.

Parameter | Description
pCodedConcept | Pointer to a DICOMCODEDCONCEPT structure that specifies the Coded Concept whose Code Meaning is to be set.
pszCodeMeaning | Character string that contains the new Code Meaning (0008,0104).

Returns

TRUE | The Code Meaning was set successfully.
FALSE | The function failed to allocate memory.

Comments

If a Context Group in the Context Group Table has a corresponding Group in the internal table maintained by LEADTOOLS, then you can use the LDicomContextGroup::Default function to discard any changes made to the Context Group, including those made to the Code Meanings of its Coded Concepts, and to revert to the values stored in the internal table. For a list of the Context Identifiers (CIDs) of the Context Groups in the internal table, along with their names, refer to Context Identifier Values.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomContextGroup::InsertCodedConcept, LDicomContextGroup::DeleteCodedConcept, LDicomContextGroup::GetFirstCodedConcept, LDicomContextGroup::FindIndexCodedConcept, LDicomContextGroup::Default, Class Members
Topics: | Working with Context Groups

Example

For an example, refer to LDicomContextGroup::Find.


LDicomDir::LDicomDir

#include "Ltdic.h"

L_VOID LDicomDir::LDicomDir(pszDICOMDIRDstFolder = NULL, pszPath = NULL)

L_CHAR * pszDICOMDIRDstFolder; | /* destination folder of the DICOMDIR File */
L_CHAR * pszPath; | /* temporary files folder */

Constructs and initializes the different member variables of the LDicomDir object.

Parameter | Description
pszDICOMDIRDstFolder | Character string that contains the name of an existing destination folder in which to save the DICOMDIR File.
pszPath | Character string that contains the name of the temporary files location. This is passed to the constructor of the base class LDicomDS. Refer to the constructor LDicomDS::LDicomDS for more information.

Returns

None.

Comments

If the destination folder of the DICOMDIR File is not specified at the construction time, it can be specified later on using the function LDicomDir::ResetDicomDir. Please note that no DICOM file can be added to the Dicom Directory unless this folder is specified.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::~LDicomDir, LDicomDir::ResetDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::~LDicomDir

#include "Ltdic.h"

virtual L_VOID LDicomDir::~LDicomDir()

Destroys the object and frees any resources associated with it.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::LDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::GetOptions

#include "Ltdic.h"

L_UINT16 LDicomDir::GetOptions(pOptions, nSize) const

pDICOMDIROPTIONS pOptions; | /* pointer to a DICOMDIROPTIONS structure */
L_INT nSize; | /* size of the structure */

Gets the DICOM Directory options.

Parameter | Description
pOptions | Pointer to a DICOMDIROPTIONS structure to be updated with the options.
nSize | Size of the structure pointed to by pOptions.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::SetOptions, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::InsertDicomDS

#include "Ltdic.h"

L_UINT16 LDicomDir::InsertDicomDS(DataSet, pszFileName)

LDicomDS & DataSet; | /* LDicomDS object */
L_CHAR * pszFileName; | /* DICOM file name */

Adds a DICOM Data Set to the Dicom Directory.

Parameter | Description
DataSet | The LDicomDS object that holds the Data Set to be added to the Dicom Directory.
pszFileName | Character string that contains the name of the DICOM file referenced by the object "DataSet".

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

If the name of a DICOM file is to be specified, then before using this function, a destination folder must have been specified, either at the construction time or by the function LDicomDir::ResetDicomDir. Otherwise, the function will fail.

The DICOM filename must refer to an existing file that resides in the destination folder or in a subfolder of the destination folder. Otherwise, the function will fail and the Data Set will not be added to the Dicom Directory. Please notice that the filename passed to the function must specify the absolute path of the file, not the relative one.

If the parameter pszFileName is set to NULL, a Data Set can still be added, even if no destination folder is specified. (That is, if pszFileName is set to NULL and the destination folder has not been set, a Data Set can still be added.) In this case, no DICOM file will be referenced for this Data Set (i.e., the corresponding Referenced File ID (0004,1500) will have an empty value).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::InsertDicomFile, LDicomDir::LDicomDir, LDicomDir::ResetDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

L_VOID CreateDicomDirectory()
{
LDicomDir DicomDir;

// Set the destination folder
DicomDir. ResetDicomDir ("C:\\Medical Images\\Patient 1");

// Set the File-set Identifier
DicomDir. SetFileSetID ("SOME ID");

// Don't allow invalid File IDs
DICOMDIROPTIONS Options;
DicomDir. GetOptions (&Options, sizeof(DICOMDIROPTIONS));
Options.uFlags |= DICOMDIR_REJECT_INVALID_FILEID;
DicomDir. SetOptions (&Options);

// Set the File-set descriptor file
DicomDir. SetDescriptorFile ("C:\\Medical Images\\Patient 1\\ReadMe", NULL);

// Load a Data Set and add it to the Directory
LDicomDS DicomDS;
DicomDS. LoadDS ("C:\\Medical Images\\Patient 1\\Image1", DS_LOAD_CLOSE);
DicomDir.InsertDicomDS(DicomDS, "C:\\Medical Images\\Patient 1\\Image1");

// Add some DICOM files to the Directory
DicomDir. InsertDicomFile ("C:\\Medical Images\\Patient 1\\Image2");
DicomDir.InsertDicomFile("C:\\Medical Images\\Patient 1\\Image3");
DicomDir.InsertDicomFile("C:\\Medical Images\\Patient 1\\Image4");

// Save the DICOMDIR File
DicomDir. SaveDicomDir ();
}


LDicomDir::InsertDicomFile

#include "Ltdic.h"

L_UINT16 LDicomDir::InsertDicomFile(pszFileName)

L_CHAR * pszFileName;

/* DICOM file name */

Adds a DICOM file to the Directory.

Parameter | Description
pszFileName | Character string that contains the name of the DICOM file to be added to the Dicom Directory.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Before using this function to add a DICOM file to the Directory, a destination folder must have been specified, either at the construction time or by the function LDicomDir::ResetDicomDir. Otherwise, the function will fail.

The DICOM file to be added must reside in the destination folder or in a subfolder of the destination folder. Otherwise, the function will fail and the file will not be added to the Directory. For example, if the destination folder is specified as "C:\DICOM Images\", then the DICOM file "C:\DICOM Images\Patient 1\Brain" can be added to the Directory, while the DICOM file "C:\Images\Knee" cannot be added. Please notice that the filename passed to the function must specify the absolute path of the file, not the relative one.

If the parameter pszFileName is set to NULL, the function will add all the DICOM files contained in the destination folder to the Dicom Directory. In this case, the callback function LDicomDir::OnInsertDicomFile will be called for each file, so that the progress can be monitored. To add all the DICOM files in the destination folder and all the Dicom files in the subfolders of the destination folder, set the bIncludeSubfolders member of a DICOMDIROPTIONS structure to TRUE, set this new option by calling LDicomDir::SetOptions and then call this function with pszFileName set to NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::InsertDicomDS, LDicomDir::OnInsertDicomFile, LDicomDir::LDicomDir, LDicomDir::ResetDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::LoadDS

#include "Ltdic.h"

L_UINT16 LDicomDir::LoadDS(pszName, nFlags)

L_CHAR * pszName; | /* DICOMDIR filename */
L_UINT16 nFlags; | /* flags that indicate the file characteristics */

Loads the DICOM Directory Data Set from the specified file.

Parameter | Description
pszName | Character string that contains the name of the DICOMDIR File.
nFlags | Meta-header flags and Transfer Syntax flags that indicate the file characteristics to use when loading the file. Possible values for the Meta-header flags are:
 | Value | Meaning
 | 0 | [0x0000] LEADTOOLS will automatically determine the presence or absence of the Meta-header.
 | DS_METAHEADER_PRESENT | [0x0001] The header is present.
 | DS_METAHEADER_ABSENT | [0x0002] The header is absent.
 | Possible values and combinations for the Transfer Syntax flags are:
 | 0 | [0x0000] LEADTOOLS will automatically determine the Transfer Syntax.
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit.
 | DS_LITTLE_ENDIAN | DS_IMPLICIT_VR |
 | DS_LITTLE_ENDIAN | DS_EXPLICIT_VR |
 | DS_BIG_ENDIAN | DS_EXPLICIT_VR |
 | DS_LOAD_CLOSE | [0x0200] The file will be loaded and closed.
 | Any of the available Meta-header flags given above may be combined with any of the available values or combinations of values for the Transfer Syntax flags given above. For example, you may combine DS_METAHEADER_ABSENT with DS_EXPLICIT_VR, or you may combine DS_METAHEADER_PRESENT with DS_LITTLE_ENDIAN | DS_EXPLICIT_VR, etc.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

In addition to loading the DICOM Directory Data Set, the function also sets the destination folder to the folder in which the specified DICOMDIR File resides. Additional DICOM files in this folder (and subfolders) can be added to the loaded Directory.

If DS_LOAD_CLOSE is not specified, the file will remain open until one of the following functions is called: LDicomDir::ResetDicomDir, LDicomDir::LoadDS (again), LDicomDS::ResetDS, LDicomDS::InitDS, or LDicomDS::LoadDS.

For more information, refer to the overridden function LDicomDS::LoadDS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::SaveDicomDir, Class Members
Topics: | Creating DICOM Directories

Example

L_VOID TestLoadingDicomDir()
{
LDicomDir DicomDir;

// Load a DICOMDIR File. Note: It is necessary to specify
// DS_LOAD_CLOSE so that we can save the Directory later.
DicomDir.LoadDS("C:\\Medical Images\\DICOMDIR", DS_LOAD_CLOSE);

// Add some additional DICOM files to the loaded Directory
DicomDir.InsertDicomFile("C:\\Medical Images\\Image");
DicomDir.InsertDicomFile("C:\\Medical Images\\Patient 2\\Image1");

// Save the DICOMDIR File
DicomDir.SaveDicomDir();
}


LDicomDir::OnInsertDicomFile

#include "Ltdic.h"

virtual L_UINT16 LDicomDir::OnInsertDicomFile(pszFileName, pDataSet, uStatus);

const L_CHAR * pszFileName; | /* name of the file being processed */
LDicomDS * pDataSet; | /* pointer to an LDicomDS object */
L_UINT16 uStatus; | /* status code */

Called for each DICOM file enumerated by LDicomDir::InsertDicomFile.

Parameter | Description
pszFileName | Character string that contains the name of the file being added to the DICOM Directory.
pDataSet | Pointer to an LDicomDS object that specifies the Data Set contained by the DICOM file being processed. If the Data Set wasn’t loaded successfully, this parameter is set to NULL.
uStatus | The status code. Possible values are:
 | Value | Meaning
 | DICOMDIR_INSERTDICOMFILE_PREADD | [300] The Data Set in the file was loaded successfully and the file is about to be added to the DICOM Directory.
 | DICOM_SUCCESS | [0] The file has been added successfully to the DICOM Directory.
 | Any other value | [> 0] An error occurred. Refer to Return Codes.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

If the parameter passed to LDicomDir::InsertDicomFile is NULL, then all files in the destination folder will be enumerated. If the bIncludeSubfolders member of a DICOMDIROPTIONS structure is set to TRUE and set using LDicomDir::SetOptions, and then LDicomDir::InsertDicomFile is called with pszFileName set to NULL, then all files in the destination folder and all files in all of the subfolders of the destination folder will be enumerated. For each file, the callback function OnInsertDicomFile is called once or twice:

The callback function is called just after trying to load the Data Set in the file and before actually adding the file to the Dicom Directory. If the Data Set was loaded successfully, the parameter pDataSet specifies the loaded Data Set and the parameter uStatus is set to DICOMDIR_INSERTDICOMFILE_PREADD. To skip the addition of the file, the callback function should return DICOM_ERROR_FORMAT. If the Data Set wasn’t loaded successfully, the parameter pDataSet is set to NULL and the parameter uStatus is set to an error code.

The callback function is called the second time just after trying to add the loaded Data Set to the DICOM Directory. The parameter pDataSet specifies the loaded Data Set. If the Data Set was added successfully, the parameter uStatus is set to DICOM_SUCCESS. Otherwise, it is set to an error code. This call to the callback function is not made if a loading failure was reported in the first call to the callback function, or the file addition was skipped in the first call to the callback function.

If the callback function returned a value other than DICOM_SUCCESS or DICOM_ERROR_FORMAT, the function LDicomDir::InsertDicomFile will stop adding new files and will return the same value returned by the callback function. Therefore, to keep adding the DICOM files, the callback function should return DICOM_SUCCESS, or DICOM_ERROR_FORMAT if only the current file is to be skipped (which can be done during the first call).

The function LDicomDir::InsertDicomFile will stop adding new files if an error occurred and it will return an error value.

The implementation of the LDicomDir class for the function OnInsertDicomFile simply returns DICOM_SUCCESS. In order to make use of this callback function, you should create a new class derived from the LDicomDir class and override the function OnInsertDicomFile providing the desired implementation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::InsertDicomFile, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

class LUserDicomDir : public LDicomDir
{
public:
LUserDicomDir(L_CHAR* pszDICOMDIRDstFolder = NULL, L_CHAR* pszPath = NULL) :
LDicomDir(pszDICOMDIRDstFolder, pszPath) { }

L_UINT16 OnInsertDicomFile(const L_CHAR* pszFileName, LDicomDS* pDataSet, L_UINT16 uStatus)
{
L_CHAR szBuffer[512];

if (uStatus == DICOMDIR_INSERTDICOMFILE_PREADD)
{
wsprintf(szBuffer, "About to add the file \"%s\".\n\nProceed?", pszFileName);
switch (MessageBox(NULL, szBuffer, "DICOM Directory Sample", MB_YESNOCANCEL))
{
case IDYES: // Add the file
break;

case IDNO: // Skip the file
return DICOM_ERROR_FORMAT;

case IDCANCEL: // Abort
return DICOM_ERROR_END;
}
}
else if (uStatus == DICOM_SUCCESS)
{
wsprintf(szBuffer, "The file \"%s\" has been added successfully." \ "\n\nContinue?", pszFileName);
switch (MessageBox(NULL, szBuffer, "DICOM Directory Sample", MB_YESNO))
{
case IDYES: // Continue
break;

case IDNO: // Abort
return DICOM_ERROR_END;
}
}

return DICOM_SUCCESS;
}
};

L_VOID CreateDicomDir()
{
LUserDicomDir DicomDir("C:\\Medical Images");

// Add all the DICOM files to the Directory
DicomDir.InsertDicomFile(NULL);

// Save the DICOMDIR File
DicomDir.SaveDicomDir();
}


LDicomDir::ResetDicomDir

#include "Ltdic.h"

L_UINT16 LDicomDir::ResetDicomDir(pszDICOMDIRDstFolder)

const L_CHAR * pszDICOMDIRDstFolder;

/* destination folder of the DICOMDIR File */

Removes the contents of the Directory and reinitializes it.

Parameter | Description
pszDICOMDIRDstFolder | Character string that contains the name of an existing destination folder in which to save the DICOMDIR File.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

When an object of the LDicomDir class is created, the Dicom Directory, as specified by the object, is empty. To revert to this case at any time, call the function LDicomDir::ResetDicomDir. If the same object is to be used to create the Dicom Directory of a new file-set, this function must be called first.

This function also sets the destination folder of the DICOMDIR File. Please note that although the function can be passed a NULL, no DICOM file can be added to the Dicom Directory unless this folder is specified.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::LDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::SaveDicomDir

#include "Ltdic.h"

L_UINT16 LDicomDir::SaveDicomDir(uFlags = 0)

L_UINT16 uFlags;

/* reserved */

Creates the DICOMDIR File and stores the Dicom Directory information in it.

Parameter | Description
uFlags | Reserved. Must be set to zero.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

The DICOMDIR File created by this function is named "DICOMDIR" and is placed in the destination folder specified at the construction time or by the function LDicomDir::ResetDicomDir. If no destination folder is specified, the function will fail.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::LoadDS, LDicomDir::LDicomDir, LDicomDir::ResetDicomDir, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::SetDescriptorFile

#include "Ltdic.h"

L_UINT16 LDicomDir::SetDescriptorFile(pszFileName, pszCharSet)

L_CHAR * pszFileName; | /* descriptor file name */
L_CHAR * pszCharSet; | /* character set used in the file */

Sets the descriptor file (non-DICOM file) used for comments related to the file-set for which the Dicom Directory is created.

Parameter | Description
pszFileName | Character string that contains the name of the file-set descriptor file.
pszCharSet | Character string that contains the name of the character set used in the descriptor file. For information on the possible character set names, refer to "Specific Character Set of File-set Descriptor File" (0004, 1142) element in the DICOM Standard.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function sets the values of the File-set Descriptor File ID (0004,1141) and the Specific Character Set of File-set Descriptor File (0004,1142) elements. If the parameter pszCharSet is set to NULL, the latter element will be deleted (if it exists). If the parameter pszFileName is set to NULL, both elements will be deleted.

If the name of a descriptor file is to be specified, then before using this function, a destination folder must have been specified, either at construction time or later, using the function LDicomDir::ResetDicomDir. Otherwise, the function will fail.

The descriptor filename must refer to an existing file that resides in the destination folder or in a subfolder of the destination folder. Otherwise, the function will fail. Please notice that the filename passed to the function must specify the absolute path of the file, not the relative one.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::SetFileSetID

#include "Ltdic.h"

L_UINT16 LDicomDir::SetFileSetID(pszFileSetID)

L_CHAR * pszFileSetID;

/* file-set ID */

Sets the identifier of the file-set for which the Dicom Directory is created.

Parameter | Description
pszFileSetID | Character string that contains the ID of the file-set.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function sets the value of the File-set ID (0004,1130) element. Since the VR of this element is CS (Code String), the identifier of the File-set shouldn’t exceed 16 characters. The characters allowed are the uppercase characters, "0" – "9", the SPACE character, and the underscore "_", of the Default Character Repertoire.

The identifier of a file-set provides a simple, humanly readable reference. However, the identifier might not be globally unique. For example, a File-set ID can be set to be identical to a disk label.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDir::SetOptions

#include "Ltdic.h"

L_UINT16 LDicomDir::SetOptions(pOptions)

const pDICOMDIROPTIONS pOptions;

/* pointer to a DICOMDIROPTIONS structure */

Sets the DICOM Directory options.

Parameter | Description
pOptions | Pointer to a DICOMDIROPTIONS structure that specifies the options to be set.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, the nSize member of the passed structure must be set.

If the parameter pOptions is set to NULL, all the options will be set to the default values. For more information, refer to the DICOMDIROPTIONS structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDir::GetOptions, Class Members
Topics: | Creating DICOM Directories
 | Dicom Directories

Example

For an example, refer to LDicomDir::InsertDicomDS.


LDicomDS::LDicomDS

#include "Ltdic.h"

L_VOID LDicomDS::CreateDS(pszPath=NULL)

L_CHAR * pszPath;

/* character string */

Allocates the memory for the data set and sets the site of the temporary files.

Parameter | Description
pszPath | Character string containing the location of the temporary files. DICOM uses temporary files during the course of creating a file. If this parameter is NULL, the DICOM temporary files are kept in the directory Windows places its own temporary files. If this parameter is not NULL, the temporary files are placed in the specified directory.

Returns

None.

Comments

This function is the constructor for the LDicomDS class.

The allocated memory is freed by calling LDicomDS::~LDicomDS.

To initialize the newly created Data Set to contain elements of a specific class, call LDicomDS::InitDS.

This function must be called before calling either LDicomDS::LoadDS or LDicomDS::InitDS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::~LDicomDS, LDicomDS::InitDS, LDicomDS::LoadDS
Topics: | Working with Data Sets

Example

/* This example creates and frees the Data Set */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS("c:\\windows\\temp");

delete pDS;
}


LDicomDS::~LDicomDS

#include "ltdic.h"

L_VOID LDicomDS::~LDicomDS(L_VOID)

Destroys the data set object and frees the memory.

Returns

None.

Comments

This is the destructor for the LDicomDS class.

This function destroys the data set object and frees the memory allocated by LDicomDS::LDicomDS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::LDicomDS, LDicomDSInitDS
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::LDicomDS.


LDicomDS::AddLayerImageRef

#include "Ltdic.h"

L_UINT16 LDicomDS::AddLayerImageRef(pGraphicAnnSQItem, pszImageSOPInstanceUID)

PDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_CHAR* pszImageSOPInstance; | /* SOP Instance UID of the image to be removed*/

Adds a new item under the "Referenced Image Sequence" for the specified item under the "Graphic Annotation Sequence".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pszImageSOPInstance | SOP Instance UID of the image to be added.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function adds a referenced image to the "Referenced Image Sequence" (0008,1140) in the specified "Graphic Annotation Sequence" (0070,0001) item in the "Graphic Annotation Module". This image should be defined previously in the "Presentation State Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID AddReferencedImageToAnnSequence(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();

L_CHAR* pszSOPInstanceUID = PresStateDS.GetPresStateImageRefSOPInstance(PresStateDS.FindFirstPresStateRefSeriesItem(),0);
L_UINT16 nRet = PresStateDS.AddLayerImageRef(pGraphicAnnSQItem,
pszSOPInstanceUID);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Referenced Image has been added successfully to the Graphic Annotation Sequence item.",
"Note",
MB_OK);
}
}


LDicomDS::AddPresStateImageRefByDS

#include "Ltdic.h"

L_UINT16 LDicomDS::AddPresStateImageRefByDS(hRefImageDS, pFrameNumbers = NULL, uFramesCount = 0)

LDicomDS pDS; | /* data set to be referenced */
L_INT32* pFrameNumbers; | /* array of frame numbers */
L_UINT uFramesCount; | /* size of the array */

Adds a new item to the "Referenced Image Sequence" under the "Presentation State Module"

Parameter | Description
pDS | Dataset which represents the image(SOP Instance) to be referenced.
pFrameNumbers | An array which represents the frame numbers inside the image (SOP Instance) to which the presentation state will be applied.
uFramesCount | Number of frames being set.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will add a new item into the "Referenced Image Sequence" (0008,1140) under the "Presentation State Module", by passing a dataset, which represents the image (SOP Instance) to be referenced.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID AddReferencedImage(LDicomDS& PresStateDS, LDicomDS& ImageDS)
{
L_UINT uFramesCount = 2;
L_INT32* FrameNumbers = new L_INT32[uFramesCount];
L_CHAR* pszImageFileName = NULL;

FrameNumbers[0] = 1;
FrameNumbers[1] = 12;
L_UINT16 nRet = PresStateDS.AddPresStateImageRefByDS( &ImageDS,
FrameNumbers,
uFramesCount);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Image was successfully added to the referenced image sequence.",
"Success",
MB_OK);
}
if (FrameNumbers)
{
delete [] FrameNumbers;
}
}


LDicomDS::AddPresStateImageRefByFileName

#include "Ltdic.h"

L_UINT16 LDicomDS::AddPresStateImageRefByFileName(pszImageFileName, pFrameNumbers = NULL, uFramesCount = 0)

L_CHAR* pszImageFileName; | /* file name of the Image to be added */
L_INT32* pFrameNumbers ; | /* array of frame numbers */
L_UINT uFramesCount; | /* size of the array */

Parameter | Description
pszImageFileName | File name of the image(SOP Instance) to be referenced.
pFrameNumbers | An array which represents the frame numbers inside the image (SOP Instance) to which the presentation state will be applied.
uFramesCount | Number of frames being set.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will add a new item into the "Referenced Image Sequence" (0008,1140) under the "Presentation State Module", by passing the file name of the image (SOP Instance) to be referenced.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID AddReferencedImage(LDicomDS& PresStateDS)
{
L_UINT uFramesCount = 2;
L_INT32* FrameNumbers = new L_INT32[uFramesCount];
L_CHAR* pszImageFileName = NULL;

FrameNumbers[0] = 1;
FrameNumbers[1] = 12;
pszImageFileName = "E:\\Patient-1.dcm";
L_UINT16 nRet = PresStateDS.AddPresStateImageRefByFileName (pszImageFileName,
FrameNumbers,
uFramesCount);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Image was successfully added to the referenced image sequence.",
"Success",
MB_OK);
}
if (FrameNumbers)
{
delete [] FrameNumbers;
}
}


LDicomDS::AddWaveformGroup

#include "Ltdic.h"

L_UINT16 LDicomDS::AddWaveformGroup(pWaveformGroup, uFlags, uIndex = ELEMENT_INDEX_MAX)

LDicomWaveformGroup* pWaveformGroup; | /* pointer to new waveform group */
L_UINT16 uFlags; | /* reserved for future use */
L_UINT32 uIndex; | /* index*/

Adds a new waveform group to the dataset.

Parameter | Description
pWaveformGroup | Pointer to a structure that contains the new waveform group. This parameter cannot be NULL.
uFlags | Reserved for future use. Pass 0.
uIndex | Zero-based index of the new waveform group. This parameter defaults to ELEMENT_INDEX_MAX, which adds the new group at the end.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

In DICOM, a waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). Use this function to add a new multiplex group to the dataset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWaveformGroupCount, LDicomDS::GetWaveformGroup, LDicomDS::DeleteWaveformGroup, LDicomWaveformGroup class members, LDicomWaveformChannel class members
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomDS::AnnCount

#include "ltdic.h"

L_UINT16 LDicomDS::AnnCount(pFileIndices, pnPrivateCreatorTag)

L_INT *pFileIndices; | /* pointer to an array */
L_UINT32 *pnPrivateCreatorTag; | /* pointer to the private creator tag */

Gets information about the annotations stored in a DICOM data set. This function is available in the Medical Toolkits.

Parameter | Description
pFileIndices | Pointer to an array of integers to be updated with the indices of the annotation files that exist in the DICOM data set.
pnPrivateCreatorTag | Pointer to a variable to be updated with the private creator tag. Pass NULL if you do not wish to retrieve this information.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LEAD Annotation files can be saved as private data in a DICOM data set (LEAD native format or binary encoded format). There can be up to 256 private data tags for LEAD annotation files. Specify one of the 256 possible files by setting the nIndex parameter to be a value from 0 to 255.

Before calling this function, you must declare an array of 256 integers (L_INT). Then, pass the address of the array for the pFileIndices parameter. This function will update the array to indicate which of the possible 256 annotation files exist.

For example, suppose that a Dicom data set contains three LEAD annotation files at indices 0,1, and 4.

Executing the following

LDicomDS DicomDS;
L_INT FileIndices[256];

DicomDS.LoadDS("d:\\work\\images\\a.dic", 0);
DicomDS.AnnCount(FileIndices, NULL);

will set the FileIndices as follows:

FileIndices[0] = 1
FileIndices[1] = 1
FileIndices[2] = 0
FileIndices[3] = 0
FileIndices[4] = 1
FileIndices[5..255] = 0

You can obtain the private creator tag used to allocate tags for the LEAD annotation files by declaring a variable of type L_UINT32 and passing the address for the pnPrivateCreatorTag argument. Pass NULL for this argument if you do not wish to retrieve this information.

Please note that both the DICOM capabilities and the DOCUMENT capabilities must be unlocked in order to work with DICOM annotations. For more information on unlocking these capabilities, refer to LSettings::UnlockSupport .

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AnnLoad, LDicomDS::AnnSave, LDicomDS::AnnDelete
Topics: | Working with DICOM Annotations

Example

// This example
// 1. Opens a dataset with annotations
// 2. Finds the location of one of the annotation files
// 3. Loads the annotations
// 4. Changes the foreground color of the annotations to blue
// 5. Saves the annotations to index to slots 250 through 255
// 6. Deletes the annotation files from slot 253

void  ClassLibDicomAnnotationExample()
{
L_UINT16      nRet;
L_INT         FileIndices[256];
L_UINT32      nPrivateCreatorTag;
int           i;
HANNOBJECT    hAnnContainer;
char          szMsg[800];
char          szTmp[100];
int           nIndexAnn = -1;
LAnnotation   AnnContainer;

LSettings::UnlockSupport
 (L_SUPPORT_DOCUMENT, L_KEY_DOCUMENT);
LSettings::UnlockSupport (L_SUPPORT_DICOM, L_KEY_DICOM);

// Open the dataset with annotations
LDicomDS DicomDS;
nRet = DicomDS.LoadDS("d:\\work\\images\\DicomAnn.dic", 0);
if (nRet != DICOM_SUCCESS) return;

// Find the location of one of the annotation files
nRet = DicomDS.AnnCount(FileIndices, &nPrivateCreatorTag);
if (nRet != DICOM_SUCCESS) return;

wsprintf(szMsg, "Private Creator Tag: %x\n\nFiles:\n", nPrivateCreatorTag);
for (i=0; i<255; i++)
{
if (FileIndices[i])
{
nIndexAnn = i;
wsprintf(szTmp, "\t%d\n", i);
strcat(szMsg, szTmp);
}
}
MessageBox(NULL, szMsg, "", MB_OK);

// Loads the annotations
DicomDS.AnnLoad(&hAnnContainer, nIndexAnn, NULL);

// Change the foreground color of the annotations to blue
AnnContainer.SetHandle (hAnnContainer);
AnnContainer.SetForeColor (RGB(0,0,0xFF), ANNFLAG_RECURSE);

// Save the annotations to index to slots 250 through 255
for (i=250; i<=255; i++)
nRet = DicomDS.AnnSave(hAnnContainer,ANNFMT_NATIVE,FALSE,NULL,i,NULL);

// Delete the annotation files from slot 253
DicomDS.AnnDelete(253, -1);

// Display file info
nRet = DicomDS.AnnCount(FileIndices, &nPrivateCreatorTag);
if (nRet != DICOM_SUCCESS) return;

wsprintf(szMsg, "Private Creator Tag: %x\n\nFiles:\n",
nPrivateCreatorTag);
for (i=0; i<255; i++)
{
if (FileIndices[i])
{
wsprintf(szTmp, "\t%d\n", i);
strcat(szMsg, szTmp);
}
}
MessageBox(NULL, szMsg, "", MB_OK);

// Save the data set
DicomDS.SaveDS("d:\\erase\\dicom.dic", 0);
}


LDicomDS::AnnDelete

#include "ltdic.h"

L_UINT16 LDicomDS::AnnDelete (nIndex, nPage)

L_INT nIndex; | /* index of an annotation file */
L_INT nPage; | /* page to delete */

Deletes a page from an annotation file, deletes the entire annotation file, or deletes all annotation files stored in a DICOM data set. This function is available in the Medical Toolkits.

Parameter | Description
nIndex | Index into an array of annotation files stored in the DICOM data set. Each DICOM data set can store up to 256 annotation files. This is a zero-based index. Valid values are between 0 and 255. Pass –1 to delete ALL annotation files and the private creator data element.
nPage | Number of the page to delete. The page number is 1-based. Therefore, the first page is page 1, the second page is page 2, etc. Pass –1 to delete the entire file specified by the nIndex parameter.

Returns

0 | SUCCESS.
> 0 | An error occurred. Refer to Return Codes.

Comments

LEAD Annotation files can be saved as private data in a DICOM data set (LEAD native format or binary encoded format). There can be up to 256 private data tags for LEAD annotation files. LDicomDS::AnnDelete can delete a page from an annotation file, delete the entire annotation file, or delete all annotation files in a DICOM data set.

To delete the third page of the annotation file at index 1:

LDicomDS DicomDS;
DicomDS.LoadDS("d:\\work\\images\\a.dic", 0);
DicomDS.AnnDelete(1, 3);

To delete the annotation file at index 1

LDicomDS DicomDS;
DicomDS.LoadDS ("d:\\work\\images\\a.dic", 0);
DicomDS.AnnDelete(1, -1);

To delete all annotation files and the private creator data element

LDicomDS DicomDS;
DicomDS.LoadDS ("d:\\work\\images\\a.dic", 0);
DicomDS.AnnDelete(-1, 0);

Please note that both the DICOM capabilities and the DOCUMENT capabilities must be unlocked in order to work with DICOM annotations. For more information on unlocking these capabilities, refer to LSettings::UnlockSupport .

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AnnLoad, LDicomDS::AnnSave, LDicomDS::AnnCount
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::AnnCount.


LDicomDS::AnnLoad

#include "ltdic.h"

L_UINT16 LDicomDS::AnnLoad(phAnnContainer, nIndex, pLoadOptions)

pHANNOBJECT phAnnContainer; | /* address of the variable to be updated */
L_INT nIndex; | /* index of an annotation file */
pLOADFILEOPTION pLoadOptions; | /* pointer to optional extended load options */

Loads the specified annotation file from a DICOM data set. This function is available in the Medical Toolkits.

Parameter | Description
phAnnContainer | Address of the variable to be updated with the handle to the container object of the loaded annotations.
nIndex | Index of the annotation file to load. This is an index into an array of annotation files stored in the DICOM data set. Each DICOM data set can store up to 256 annotation files. This is a zero-based index. Valid values are between 0 and 255.
pLoadOptions | Pointer to optional extended load options. Pass NULL to use the default load options.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LEAD Annotation files can be saved as private data in a DICOM data set (LEAD native format or binary encoded format). There can be up to 256 private data tags for LEAD annotation files. Specify one of the 256 possible files by setting the nIndex parameter to be a value from 0 to 255.

Before calling this function, you must declare a variable of data type HANNOBJECT. Then, pass the address of the variable in the phAnnContainer parameter. This function will update the variable with the handle of the container object of the loaded annotations.

The 256 annotation files can hold one or more pages. To load the first page of an annotation file, pass NULL for the pLoadOptions argument. To load any page of an annotation file, use the LOADFILEOPTION structure. For example, to load the 3rd page of an annotation file number 2, do the following:

LDicomDS DicomDS;
HANNOBJECT hAnnContainer;
LOADFILEOPTION LoadOption;

DicomDS.LoadDS("d:\\work\\images\\a.dic", 0);
memset(&LoadOption, 0, sizeof(LOADFILEOPTION));
LoadOption.PageNumber = 3;
DicomDS.AnnLoad(&hAnnContainer, 2, &LoadOption);

To delete a page from an annotation multi-page file, or to delete the entire annotation file, call LDicomDS::AnnDelete.

Please note that both the DICOM capabilities and the DOCUMENT capabilities must be unlocked in order to work with DICOM annotations. For more information on unlocking these capabilities, refer to LSettings::UnlockSupport .

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AnnSave, LDicomDS::AnnCount, LDicomDS::AnnDelete
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::AnnCount.


LDicomDS::AnnSave

#include "ltdic.h"

L_UINT16 LDicomDS::AnnSave(hAnnContainer, uFormat, bSelected, pSaveOptions, nIndex, pnPrivateCreatorTag)

HANNOBJECT hAnnContainer; | /* handle to the root annotation */
L_UINT uFormat; | /* file format for saving annotation data */
L_BOOL bSelected; | /* flag that indicates which objects to save*/
pSAVEFILEOPTION pSaveOptions; | /* pointer to optional extended save options */
L_INT nIndex; | /* index of an annotation file */
L_UINT32 pnPrivateCreatorTag; | /* pointer to the private creator tag */

Saves annotations as private data in a DICOM data set. This function is available in the Medical Toolkits.

Parameter | Description
hAnnContainer | Handle to the root annotation object that includes all objects to save in the file. This typically is a container object.
uFormat | Format for saving annotation data. Possible values are:
 | Value | Meaning
 | ANNFMT_NATIVE | Use LEAD's own format for annotations.
 | ANNFMT_ENCODED | Save as a binary format. This file size is smaller and is upward compatible. It also provides better security.
bSelected | Flag that indicates which objects to save. Possible values are:
 | Value | Meaning
 | TRUE | Save all objects that have the selected property set to TRUE. For setting the selected property, use the LAnnotation::SetSelected function.
 | FALSE | Save only the specified object.
pSaveOptions | Pointer to a SAVEFILEOPTION structure that contains optional extended save options. This information is used to add annotation pages or replace annotation pages in a multi-page annotation file. Pass NULL to save a one page annotation file.
nIndex | Index of the annotation file to save. This is an index into an array of annotation files stored in the DICOM data set. Each DICOM data set can store up to 256 annotation files. This is a zero-based index. Valid values are between 0 and 255.
pnPrivateCreatorTag | Pointer to a private creator tag. You can specify a private creator tag, or pass NULL to have the tag automatically created.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LEAD Annotation files can be saved as private data in a DICOM data set (LEAD native format or binary encoded format). There can be up to 256 private data tags for LEAD annotation files. Specify one of the 256 possible files by setting the nIndex parameter to be a value from 0 to 255.

You can select the private creator tag (and therefore the private tags) or have the private creator tag automatically chosen.

To choose a private creator tag, do the following:

1.

Declare a variable of type L_UINT32. For example

L_UINT32 uPrivateCreatorElement

2.

Set the value to the desired tag and element. Note that private creator tags must follow the following format:

(gggg, 0010-00FF) where gggg is odd

This reserves 256 private data elements. For example,

uPrivateCreatorElement = 0x00710043

This particular private creator tag reserves the following elements:

0x00714300 through 0x007143FF

3.

Pass the address of uPrivateCreatorElement as the last argument (pnPrivateCreatorTag)

To choose the group but not the element of a private creator tag, do the following:

1.

Declare a variable of type L_UINT32. For example

L_UINT32 uPrivateCreatorElement

2.

Set uPrivateCreatorElement as follows:

(gggg0000) where gggg is odd

3. | Pass the address of uPrivateCreatorElement as the last argument (pnPrivateCreatorTag)
4. | If successful, the private creator tag (group and element) will be returned in uPrivateCreatorElement

To have the private creator tag automatically chosen and returned, do the following:

1.

Declare a variable of type L_UINT32. For example

L_UINT32 uPrivateCreatorElement

2. | Set uPrivateCreatorElement = 0:
3. | Pass the address of uPrivateCreatorElement as the last argument (pnPrivateCreatorTag)
4. | If successful, the private creator tag (group and element) will be returned in uPrivateCreatorElement

To have the private creator tag automatically chosen but not returned, do the following:

1.

Pass the NULL as the last argument (pnPrivateCreatorTag)

To insert new pages to an annotation multi-page file:

1. | Declare a variable of type SAVEFILEOPTION.
2. | Set the uFlags field of the SAVEFILEOPTION structure to ESO_INSERTPAGE.
3. | Set the PageNumber field of the SAVEFILEOPTION structure to the location for insertion. The new page will be inserted in front of the page specified in the PageNumber field.

To replace an existing page in an annotation multi-page file:

1. | Declare a variable of type SAVEFILEOPTION.
2. | Set the uFlags field of the SAVEFILEOPTION structure to ESO_REPLACEPAGE.
3. | Set the PageNumber field of the SAVEFILEOPTION structure to the page to replace.

To delete a page from an annotation multi-page file, or to delete the entire annotation file, use LDicomDS::AnnDelete.

Please note that both the DICOM capabilities and the DOCUMENT capabilities must be unlocked in order to work with DICOM annotations. For more information on unlocking these capabilities, refer to LSettings::UnlockSupport .

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AnnLoad, LDicomDS::AnnCount, LDicomDS::AnnDelete
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::AnnCount.


LDicomDS::ChangeTransferSyntax

#include "Ltdic.h"

L_UINT16 LDicomDS::ChangeTransferSyntax(pszUID, nQFactor, uFlags)

L_CHAR * pszUID; | /* character string */
L_INT32 nQFactor; | /* quality factor */
L_UINT16 uFlags; | /* reserved */

Changes the transfer syntax of the data set.

Parameter | Description
pszUID | Character string that contains the UID of the new Transfer Syntax. Possible values are:
 | Value | Meaning
 | UID_IMPLICIT_VR_LITTLE_ENDIAN | "1.2.840.10008.1.2"
 | UID_EXPLICIT_VR_LITTLE_ENDIAN | "1.2.840.10008.1.2.1"
 | UID_EXPLICIT_VR_BIG_ENDIAN | "1.2.840.10008.1.2.2"
 | UID_JPEG_BASELINE_1 | "1.2.840.10008.1.2.4.50"
 | UID_JPEG_EXTENDED_2_4 | "1.2.840.10008.1.2.4.51"
 | UID_JPEG_LOSSLESS_NONHIER_14 | "1.2.840.10008.1.2.4.57"
 | UID_JPEG_LOSSLESS_NONHIER_14B | "1.2.840.10008.1.2.4.70"
 | UID_JPEG2000_LOSSLESS_ONLY | "1.2.840.10008.1.2.4.90"
 | UID_JPEG2000 | "1.2.840.10008.1.2.4.91"
 | UID_RLE_LOSSLESS | "1.2.840.10008.1.2.5"
nQFactor | The quality factor (Q factor) is a number that determines the degree of loss in the compression process. You can set a value from 2 to 255, where 2 is the highest quality and 255 is the most compression. This parameter only applies when the new transfer syntax will involve compressing pixel data using a lossy compression.
uFlags | Flag that indicates how the compression will be performed. Possible values are:
 | Value | Meaning
 | DICOM_CHANGETRAN_MINIMIZE_JPEG_SIZE | [0x00000001] If set, and the new transfer syntax uses JPEG compression, the JPEG compression engine will use optimized Huffman tables, which results in better compression, but slower speed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will convert the data set's transfer syntax to the transfer syntax specified in pszUID, maintaining all elements and values in the data set.

After this function is called all previous references to data elements in the data set will no longer be valid.

This function is especially useful when sending a C_STORE_REQ message using the LDicomNet::SendCStoreRequest function. The user can match the data set transfer syntax with the transfer syntax of the SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCStoreRequest, Class Members
Topics: | Working with Data Sets

Example

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

// Change transfer syntax to explicit VR Big Endian
pDS->ChangeTransferSyntax(UID_EXPLICIT_VR_BIG_ENDIAN,0,0);
// Save the new dataset
pDS->SaveDS("c:\\ltwin13\\images\\temp.dic", 0);
delete pDS;
}


LDicomDS::ConformanceDS

#include "Ltdic.h"

L_BOOL LDicomDS::ConformanceDS(pfnCallback, pUserData)

CONFORMANCECALLBACK pfnCallback; | /* pointer to a callback function */
L_VOID * pUserData; | /* pointer to additional parameters */

Verifies the comformance of the Data Set.

Parameter | Description
pfnCallback | Optional callback function. If you do not provide a callback function, use NULL as the value of this parameter. If you do provide a callback function, use the function pointer as the value of this parameter. The callback function must adhere to the function prototype described in CONFORMANCECALLBACK Function.
pUserData | Void pointer that you can use to pass one or more additional parameters that the callback function needs.
 | To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.
 | If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

TRUE | The Data Set conforms.
FALSE | The Data Set does not conform.

Comments

This function is called to test the conformance of the Data Set to the DICOM standard. For each Data Element in the Data Set, this function calls the CONFORMANCECALLBACK function. If any consistency is found, nFlags should be set with the appropriate error and False returned from the callback function.

Information from the Value Representation Table, the Data Element Tag Table and the IOD Table is used when analyzing the Data Element for conformance.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | CONFORMANCECALLBACK
Topics: | Working with Data Sets

Example

/* This example displays all the elements that not respect the standard */

L_BOOL L_EXPORT EXT_CALLBACK fnCallback(pDICOMELEMENT pElement, L_UINT16 nFlags,
L_VOID *pUserData)
{
CListBox *pDlg;
L_CHAR szText[30];

pDlg = (CListBox *)pUserData;

wsprintf(szText, "%04X:%04X", GETGROUP(pElement->nTag), GETELEMENT(pElement->nTag));
pDlg->AddString(szText);

return TRUE;
}

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS(CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pDS->ConformanceDS(fnCallback, pDlg);

delete pDS;
}


LDicomDS::ConvertDicomAnnObjToLEADAnnObj

#include "Ltdic.h"

L_UINT16 LDicomDS::ConvertDicomAnnObjToLEADAnnObj(phAnnObject, pGraphicObject, pTextObject)

pHANNOBJECT phAnnObject; | /* address of the variable to be updated */
pDICOMGRAPHICOBJECT pGraphicObject; | /* pointer to a DICOM graphic annotation object */
pDICOMTEXTOBJECT pTextObject; | /* pointer to a DICOM text annotation object */

Converts a DICOM graphic or text annotation object into a LEAD annotation object.

Parameter | Description
phAnnObject | Address of the variable to be updated with the handle to the LEAD annotation object.
pGraphicObject | Pointer to a DICOMGRAPHICOBJECT structure, which holds the attributes of a DICOM graphic annotation object to be converted. Pass NULL if you are converting a DICOM text annotation object.
pTextObject | Pointer to a DICOMTEXTOBJECT structure, which holds the attributes of a DICOM text annotation object to be converted. Pass NULL if you are converting a DICOM graphic annotation object.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will convert a DICOM Annotation object into a LEAD annotation object.

If you are converting a DICOM graphic object, pGraphicObject should be valid and pTextObject should be set to NULL.

If you are converting a DICOM text object, pTextObject should be valid and pGraphicObject should be set to NULL.

pGraphicObject and pTextObject cannot both be valid or both be NULL at the same time.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID ConvertDICOMIntoLEAD (LDicomDS& PresStateDS, pDICOMGRAPHICOBJECT pGraphicObject,pHANNOBJECT phAnnObject)
{
L_UINT16 nRet = PresStateDS.ConvertDicomAnnObjToLEADAnnObj(phAnnObject, pGraphicObject, NULL);
if (nRet = DICOM_SUCCESS)
{
MessageBox( NULL,
"DICOM annotation object has been successfully converted into LEAD object.",
"Note",
MB_OK);
}
}


LDicomDS::ConvertLEADAnnObjToDicomAnnObjs

#include "Ltdic.h"

L_UINT16 LDicomDS::ConvertLEADAnnObjToDicomAnnObjs(hAnnObject, pGraphicAnnSQItem, uFlags)

HANNOBJECT hAnnObject; | /* handle to the LEAD annotation object to convert */
pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uFlags; | /* reserved for future use */

Converts a LEAD Annotation object into one or more DICOM annotation objects, and (optionally) adds the new DICOM annotation objects into the dataset.

Parameter | Description
hAnnObject | Handle to the LEAD annotation object to be converted, cannot be NULL.
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".If this parameter is not NULL then the resulting DICOM annotation objects will be added to the dataset under the item pointed to by this parameter. Pass NULL, if you don’t want the resulting objects to be added to the dataset.
uFlags | Reserved for future use. Pass 0.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will convert a LEAD Annotation object into one or more DICOM annotation objects (text and graphic). For each resulting DICOM annotation object the callback function pConversionProc will be called.

If the parameter pGraphicAnnSQItem is not NULL, then the function will automatically add the resulting DICOM annotation objects into the dataset. If the resulting DICOM annotation object is a "Text Object" then it will be added under the "Text Object Sequence" under the item pointed to by pGraphicAnnSQItem. If the resulting DICOM annotation object is a "Graphic Object" then it will be added under the "Graphic Object Sequence" under the item pointed to by pGraphicAnnSQItem.

Currently, a subset of the LEADTOOLS annotation objects can be converted (mapped) into DICOM objects, this includes:

Line object

Rectangle object

Ellipse object

Poly-line object

Polygon object

Pointer object

Freehand object

Text object

Protractor object

Point object

Curve object (Interpolated lines)

Curve Closed Object

Text Pointer Object

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID ConvertLEADIntoDICOM(LDicomDS& PresStateDS, pDICOMELEMENT pGraphicAnnSQItem, HANNOBJECT hAnnObject)
{
L_UINT16 nRet = PresStateDS.ConvertLEADAnnObjToDicomAnnObjs(hAnnObject, pGraphicAnnSQItem, 0);
if (nRet = DICOM_SUCCESS)
{
MessageBox( NULL,
"LEAD annotation object has been successfully converted.",
"Note",
MB_OK);
}
}


LDicomDS::CopyDS

#include "ltdic.h"

L_UINT16 LDicomDS::CopyDS(pDstParent, pSrcDS, pSrcParent)

pDICOMELEMENT pDstParent; | /* pointer to a DICOMELEMENT structure */
LDicomDS *pSrcDS; | /* a DICOM object */
pDICOMELEMENT pSrcParent; | /* pointer to a DICOMELEMENT structure */

Copies the data elements from one data set to another.

Parameter | Description
pDstParent | A pointer to a DICOMELEMENT structure that contains a Data element within the destination data set. A copy of the source data set will be inserted as the child of this data element.
pSrcDS | A DICOM object that contains the data set to be copied (the source data set).
pSrcParent | A pointer to a DICOMELEMENT structure that contains a Data element within the source data set. All children, grandchildren, etc. of this element will be added to the destination data set.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If both pSrcParent and pDstParent are NULL, the source data set will be inserted at the root level of the destination data set. Therefore the highest level elements of the source data set will be added as siblings to the highest level elements of the destination data set. This can be seen in the diagram below.

If pSrcParent is not NULL and pDstParent is NULL, the children of pSrcParent will be added at the root level of the destination data set (i.e. as siblings to elements at the highest level). This can be seen in the diagram below. Note that the source elements to be added are in blue.

If pScrParent is NULL and pDstParent is not NULL, the entire source data set will be added as children to pDstParent. This can be seen in the diagram below.

If pSrcParent and pDstParent are both not NULL, then the children of pSrcParent are added as the children of pDstParent. This can be seen in the diagram below. The original children of pDstParent are in red and the source elements to be added are in blue.

If an inserted element has the same tag value as a destination element at the same level and with the same parent, then the value from the source element is copied into the destination element and any child elements are added accordingly. For example, the diagram below shows the result of a call to LDicomDS::CopyDS. If the two elements indicated by the arrows have the same tag value, the value from the source element is copied into the destination element and the structure on the right results. This is shown by the red outline of the destination element with the blue center of the source element.

To make the destination data set an exact copy of the source data set, instead of inserting it within the destination data set, you must call LDicomDS::ResetDS with the destination data set as the parameter, before calling LDicomDS::CopyDS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::LDicomDS, LDicomDS::InitDS, LDicomDS::GetInfoDS
Topics: | Working with Command Sets

Example

/* This example copies the elements from a Data Set to another Data Set */

L_VOID Test()
{
L_UINT32 nClass;
L_UINT16 uFlags;
L_CHAR buf[180];
LDicomDS DS1(NULL);
LDicomDS DS2(NULL);

DS1.InitDS( CLASS_CR_IMAGE_STORAGE, DS_LITTLE_ENDIAN | DS_IMPLICIT_VR);
DS1.GetInfoDS(&nClass, &uFlags);
wsprintf(buf, "Data Set #1\nClass = %d\nFlags = %d", nClass, uFlags);
::MessageBox(NULL, buf, "Test", MB_OK);
DS2.CopyDS(NULL, &DS1, NULL);
DS2.GetInfoDS(&nClass, &uFlags);
wsprintf(buf, "Data Set #2\nClass = %d\nFlags = %d", nClass, uFlags);
::MessageBox(NULL, buf, "Test", MB_OK);
}


LDicomDS::CreateGraphicAnnSQItem

#include "Ltdic.h"

L_UINT16 LDicomDS::CreateGraphicAnnSQItem(nIndex, pszLayerName)

L_UINT32 nIndex; | /* index value */
L_CHAR* pszLayerName; | /* layer name */

Adds a new item under the "Graphic Annotation Sequence".

Parameter | Description
nIndex | Index value that indicates where to insert a TAG_ITEM data element in a sequence. The index is zero based, so if you want to insert a TAG_ITEM data element as the first item in the sequence, set this to 0. The value ELEMENT_INDEX_MAX indicates to add the TAG_ITEM data element to the end of the sequence.
pszLayerName | Value of the attribute "Graphic Layer " (0070, 0002), under the newly created item.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will add a new item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module". If the sequence doesn’t already exist, then this function will create it first and then add the new item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindNextGraphicAnnSQItem, LDicomDS::GetLayerName, LDicomDS::SetLayerName, LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID CreateAnnSequenceItem (LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.CreateGraphicAnnSQItem (0,"New Layer");
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"The Item has been created successfully.",
"Note",
MB_OK);
}
}


LDicomDS::CreateGraphicObject

#include "Ltdic.h"

L_UINT16 LDicomDS::CreateGraphicObject(pGraphicAnnSQItem, pGraphicObject, bCheckLayer)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
pDICOMGRAPHICOBJECT pGraphicObject; | /* pointer to the graphic object attributes structure */
L_BOOL bCheckLayer; | /* flag that indicates whether to verify that the layer (to which the graphic object will be added) exists or not */

Creates a new graphic annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pGraphicObject | Pointer to the graphic object attributes structure.
bCheckLayer | Flag that indicates whether to verify that the layer (to which the graphic object will be added) exists or not.
 | Value | Meaning
 | TRUE | Check if the layer exists before adding the object. If it does not exist, then return an error.
 | FALSE | Add the new object without checking the existence of the layer.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pDICOMGRAPHICOBJECT->uStructSize to be sizeof(DICOMGRAPHICOBJECT) and initialize all the structure members.

When the parameter bCheckLayer is set to TRUE, then this function checks if the layer specified in the member variable pszLayerName exists or not. If it does not exist, an error will be returned.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID CreateNewGraphicObject(LDicomDS& PresStateDS)
{
DICOMGRAPHICOBJECT GraphicObject;
L_UINT nCount = 5;

memset(&GraphicObject, 0, sizeof(DICOMGRAPHICOBJECT));

GraphicObject.pAnnPoints = new DICOMANNPOINT[nCount];
GraphicObject.pAnnPoints [0].fX = (L_FLOAT)480.00;
GraphicObject.pAnnPoints [0].fY = (L_FLOAT)226.00;
GraphicObject.pAnnPoints [1].fX = (L_FLOAT)480.00;
GraphicObject.pAnnPoints [1].fY = (L_FLOAT)418.00;
GraphicObject.pAnnPoints [2].fX = (L_FLOAT)488.00;
GraphicObject.pAnnPoints [2].fY = (L_FLOAT)418.00;
GraphicObject.pAnnPoints [3].fX = (L_FLOAT)488.00;
GraphicObject.pAnnPoints [3].fY = (L_FLOAT)226.00;
GraphicObject.pAnnPoints [4].fX = (L_FLOAT)480.00;
GraphicObject.pAnnPoints [4].fY = (L_FLOAT)226.00;

GraphicObject.bFilled = TRUE;
GraphicObject.uType = DICANN_TYPE_POLYLINE;
GraphicObject.pszLayerName = "First Layer";
GraphicObject.nPointCount = nCount;
GraphicObject.uUnits = DICANN_UNIT_PIXEL;
GraphicObject.uStructSize = sizeof(DICOMGRAPHICOBJECT);

L_UINT16 nRet = PresStateDS.CreateGraphicObject(PresStateDS.FindFirstGraphicAnnSQItem(),
&GraphicObject);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Object has been successfully created.",
"Note",
MB_OK);
}
if (GraphicObject.pAnnPoints)
{
delete [] GraphicObject.pAnnPoints;
}
}


LDicomDS::CreateLayer

#include "Ltdic.h"

L_UINT16 LDicomDS::CreateLayer(pGraphicLayer, pLayerIndex)

pDICOMGRAPHICLAYER pGraphicLayer; | /* pointer to a Graphic Layer attributes structure */
L_UINT * pLayerIndex; | /* pointer to a variable, which will be updated with the index of the newly created layer.*/

Adds a new item under the "Graphic Layer Sequence" (0070,0060) in the Graphic Layer Module".

Parameter | Description
pGraphicLayer | Pointer to a Graphic Layer attributes structure, which holds the attributes of the layer to be created.
pLayerIndex | Pointer to a variable, which will be updated with the index of the newly created layer.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pDICOMGRAPHICLAYER->uStructSize to be sizeof(DICOMGRAPHICLAYER) and initialize all the structure members.

If for example there are already 2 items under the "Graphic Layer Sequence" (0070,0060) and we call this function, then the index of the new layer will be 2.

This function will fail and return DICOM_ERROR_PARAMETER if a layer with the same name as the new layer already exists in the dataset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID CreateNewLayer(LDicomDS& PresStateDS)
{
DICOMGRAPHICLAYER Layer;

memset(&Layer, 0, sizeof(DICOMGRAPHICLAYER));

L_CHAR szText[256] = "\0";
L_INT16 RGBColors[3];
L_INT16 pGrayScle[1];

pGrayScle[0] = 32767;

RGBColors[0] = 255;
RGBColors[1] = 255;
RGBColors[2] = 255;

Layer.nLayerOrder = 1;
Layer.pszLayerDescription = "First Layer";
Layer.pszLayerName = "LAYER0";
Layer.puGrayscale = pGrayScle;
Layer.pRGBLayerColors = NULL;
Layer.uStructSize = sizeof(DICOMGRAPHICLAYER);
L_UINT uLayerIndex;
L_UINT16 nRet = PresStateDS.CreateLayer(&Layer, &uLayerIndex);
if (nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Index of the new layer is: %u ", uLayerIndex);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::CreateSignature

#include "ltdic.h"

L_UINT16 LDicomDS::CreateSignature(pItem, pszPrivateKeyFile, pszCertificateFile, pszPassword, ppSignatureItem = NULL, pszMacTransferSyntax = NULL, uMacAlgorithm = DICOM_MAC_ALGORITHM_RIPEMD160, pElementsToSign = NULL, uCount = 0, uSecurityProfile = DICOM_SECURITY_PROFILE_NONE, uReserved = 0)

pDICOMELEMENT pItem; | /* pointer to an Item in the Data Set */
const L_CHAR* pszPrivateKeyFile; | /* character string that contains the private key file name */
const L_CHAR* pszCertificateFile; | /* character string that contains the digital certificate file name */
const L_CHAR* pszPassword; | /* character string that contains the password */
pDICOMELEMENT * ppSignatureItem; | /* pointer to a pointer to the new Digital Signatures Sequence Item */
const L_CHAR* pszMacTransferSyntax; | /* character string that contains the Message Authentication Code (MAC) Calculation Transfer Syntax UID */
L_UINT16 uMacAlgorithm; | /* value that specifies the MAC Algorithm */
L_UINT32* pElementsToSign; | /* pointer to the Data Elements to be signed */
L_UINT32 uCount; | /* value that specifies the number of Data Elements to be signed */
L_UINT16 uSecurityProfile; | /* value that specifies the Digital Signature Security Profile */
L_UINT16 uReserved; | /* reserved */

Creates a Digital Signature in the Data Set.

Parameter | Description
pItem | Pointer to a DICOMELEMENT structure that specifies an Item of a Sequence of Items in the Data Set. The Digital Signature will be created in this Item. If this parameter is set to NULL, the Digital Signature will be created in the main Data Set.
pszPrivateKeyFile | Character string that contains the name of the file that stores the private key which will be used to encrypt the Message Authentication Code (MAC). The function accepts private keys from files in any of the following formats:
 | Privacy Enhanced Mail (PEM)
 | Distinguished Encoding Rules (DER)
 | Public Key Cryptography Standard (PKCS) #8 PEM
 | PKCS#8 DER
 | PKCS#12
 | Use the parameter pszPassword to specify the password if the private key is stored encrypted.
pszCertificateFile | Character string that contains the name of the file that stores the digital certificate of the signer. This will be the Certificate of Signer (0400,0115). The function accepts X.509 digital certificates from files in any of the following formats:
 | PEM | (usually .pem, .cer, or .crt)
 | DER | (usually .cer or .crt)
 | PKCS#7 PEM | (usually .pem)
 | PKCS#7 DER | (usually .p7b or .spc)
 | PKCS#12 | (usually .pfx or .p12)
 | If more than one digital certificate is stored in the file, the first one will be used.
 | For the last format (PKCS#12), use the parameter pszPassword to specify the password if the digital certificate is stored encrypted. This parameter is ignored for the rest of the formats.
 | The function will fail if the specified private key doesn’t match the public key of the digital certificate.
pszPassword | Character string that contains the password to be used if the private key is stored encrypted. The password will also be used for the PKCS#12 digital certificates. Set this parameter to NULL if no password is required.
ppSignatureItem | Pointer to a pointer to a DICOMELEMENT structure. In case of success, *ppSignatureItem is updated with a pointer to the new Digital Signatures Sequence Item that corresponds to the newly created Digital Signature. This parameter can be set to NULL.
pszMacTransferSyntax | Character string that contains the MAC Calculation Transfer Syntax UID (0400,0010). This is the Transfer Syntax in which the Data Elements included in the MAC calculation should be encoded. This parameter can be set to NULL. See the Comments for more details.
uMacAlgorithm | Value that specifies the MAC Algorithm (0400,0015). This is the algorithm that should be used to generate the MAC. Possible values are:

 | Value | Meaning
 | DICOM_MAC_ALGORITHM_RIPEMD160 | [0] Use the RACE Integrity Primitives Evaluation (RIPEMD-160) hash function (recommended).
 | DICOM_MAC_ALGORITHM_SHA1 | [1] Use the Secure Hash Algorithm (SHA-1) hash function.
 | DICOM_MAC_ALGORITHM_MD5 | [2] Use the Message Digest – 5 (MD5) hash function.
pElementsToSign | Pointer to an array that contains the Tags of the Data Elements to be signed. The number of Tags in the array is given by the parameter uCount. If the Digital Signature is being created in the main Data Set (pItem is NULL), only Data Elements on the root of the Data Set may be referenced by the Tags. Similarly, if the Digital Signature is being created in an Item of a Sequence of Items, only Data Elements under this Item may be referenced by the Tags. This parameter can be set to NULL. See the Comments for more details.
uCount | Value that specifies the number of Tags in the array specified by the parameter pElementsToSign.
uSecurityProfile | Value that specifies the Digital Signature Security Profile with which to conform when creating the Digital Signature. Possible values are:

 | Value | Meaning
 | DICOM_SECURITY_PROFILE_NONE | [0] Don’t conform to any Digital Signature Security Profile.
 | DICOM_SECURITY_PROFILE_BASE_RSA | [1] Conform to the Base Rivest-Shamir-Adleman (RSA) Digital Signature Profile.
 | DICOM_SECURITY_PROFILE_CREATOR_RSA | [2] Conform to the Creator RSA Digital Signature Profile.
 | DICOM_SECURITY_PROFILE_AUTHORIZATION_RSA | [3] Conform to the Authorization RSA Digital Signature Profile.
 | See the Comments for more details.
uReserved | Reserved for future use. This must be set to 0.

Returns

DICOM_SUCCESS | The function was successful.
<> DICOM_SUCCESS | An error occurred. Refer to Return Codes.

Comments

A Digital Signature can be created in the main Data Set as well as in an Item of a Sequence of Items. Pass NULL for the parameter pItem if you want to create the Digital Signature in the main Data Set or specify an Item in the Data Set to create the Digital Signature in that Item.

The parameter pszMacTransferSyntax specifies the Transfer Syntax in which the Data Elements included in the Message Authentication Code (MAC) calculation should be encoded. This Transfer Syntax must explicitly include the Value Representation (Explicit VR) and it must use the Little Endian Byte ordering. If the specified Transfer Syntax doesn’t fulfill this condition, the function will behave as if the parameter were set to NULL.

If pszMacTransferSyntax is set to NULL, the function will use the Transfer Syntax in which the Data Set is currently encoded if this Transfer Syntax fulfills the condition mentioned in the previous paragraph. If it doesn’t, the function will use the Explicit VR Little Endian Transfer Syntax.

You can use the parameters pElementsToSign and uCount to specify the Data Elements to be covered by the new Digital Signature. These Data Elements, which are indicated by their Tags, must be on the root of the Data Set if pItem is set to NULL. If pItem specifies an Item, then they must be located immediately under that Item. Any Tag that doesn’t specify an existing Data Element in the expected location will be ignored. Also, any Tag that specifies a Data Element that cannot be signed according to the standard will be ignored as well.

If pElementsToSign is set to NULL, or if uCount is set to 0, the function will sign all the Data Elements that can be signed according to the standard and that exist on the root of the Data Set, if pItem is set to NULL, or immediately under the Item specified by pItem.

Digital Signature Security Profiles put restrictions and add specifications. For example, the Rivest-Shamir-Adleman (RSA) Security Profiles require the use of RSA encryption. Therefore, the function will fail if one of these Security Profiles is used while the specified keys are DSA keys. Another example is that the Creator and Authorization RSA Digital Signature Profiles require that, as a minimum, certain Data Elements must be signed if they exist. Therefore, if one of these Security Profiles is used, the function will sign any existing Data Element that is required, even if this Data Element is not included in the array specified by pElementsToSign.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::VerifySignature, LDicomDS::DeleteSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetSignature, Class Members
Topics: | Working with Digital Signatures

Example

L_VOID CreateSignature(LDicomDS& DataSet)
{
pDICOMELEMENT pSignatureItem;

// Create a Digital Signature in the main Data Set
L_UINT16 uRet = DataSet.CreateSignature(NULL,
"C:\\PrivateKey",
"C:\\Certificate.cer",
NULL,
&pSignatureItem);
if (uRet == DICOM_SUCCESS)
{
::MessageBox(NULL,
"The Digital Signature was created successfully.",
"Sample",
MB_OK);
}
else
{
L_CHAR szMsg[64];

wsprintf(szMsg, "An error occurred [Error: %hu].", uRet);
::MessageBox(NULL, szMsg, "Sample", MB_OK);
return;
}

// Save the signed Data Set
DataSet.SaveDS("C:\\Signed.dic", 0);

// Examine the Digital Signature we just created
// Refer to the example of LDicomDS::VerifySignature for the
// function ExamineSignature
ExamineSignature(DataSet, pSignatureItem);
}


LDicomDS::CreateTextObject

#include "Ltdic.h"

L_UINT16 LDicomDS::CreateTextObject(pGraphicAnnSQItem, pTextObject, bCheckLayer=FALSE)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
pDICOMTEXTOBJECT pTextObject; | /* pointer to the text object attributes structure */
L_BOOL bCheckLayer; | /* flag */

Creates a new text annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pTextObject | Pointer to the text object attributes structure.
bCheckLayer | Flag that indicates whether to verify that the layer (to which the text object will be added) exists or not.
 | Value | Meaning
 | TRUE | Check if the layer exists before adding the object. If it does not existed, then return an error.
 | FALSE | Add the new object without checking the existence of the layer.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pTextObject-> uStructSize to be sizeof(DICOMTEXTOBJECT) and initialize all the structure members.

When the parameter bCheckLayer is set to TRUE, then the function checks if the layer specified in the member variable pszLayerName exists or not. If it does not exist, an error will be returned.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::RemoveTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::RemoveAllTextObjects, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID CreateNewTextObject(LDicomDS& PresStateDS)
{
DICOMTEXTOBJECT TextObject;

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
memset(&TextObject, 0, sizeof(DICOMTEXTOBJECT));
L_FLOAT pAnchorPoint[2];
L_FLOAT pBRHCorner[2];
L_FLOAT pTLHCorner[2];

pAnchorPoint[0] = (L_FLOAT)1.1;
pAnchorPoint[1] = (L_FLOAT)1.1;

pBRHCorner[0] = (L_FLOAT)521.251343;
pBRHCorner[1] = (L_FLOAT)328.190216;

pTLHCorner[0] = (L_FLOAT)466.642242;
pTLHCorner[1] = (L_FLOAT)300.443268;

TextObject.bAnchorPointVisible = FALSE;
TextObject.pAnchorPoint = NULL;
TextObject.pBRHCorner = pBRHCorner;
TextObject.pszTextValue = "Text Value 1";
TextObject.pTLHCorner = pTLHCorner;
TextObject.uAnchorPointUnits = DICANN_UNIT_PIXEL;
TextObject.uBoundingBoxUnits = DICANN_UNIT_PIXEL;
TextObject.pszLayerName = "First Layer";
TextObject.uTextJustification = DICANN_TEXT_LEFT;
TextObject.uStructSize = sizeof(DICOMTEXTOBJECT);

L_UINT16 nRet = PresStateDS.CreateTextObject(pGraphicAnnSQItem, &TextObject);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Object has been successfully created.",
"Note",
MB_OK);
}
}


LDicomDS::DeleteElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::DeleteElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Deletes the specified item from the Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains the item to be deleted.

Returns

!NULL | A pointer to an adjacent item. If the item being deleted has a sibling (same level, same parent), following it, the returned pointer will point to this sibling. If the item being deleted does not have a sibling following it, but has a sibling preceding it, the returned pointer points to the preceding sibling. If the item being deleted is an only child, the returned pointer points to the parent.
NULL | The item being deleted has no siblings and no parent.

Comments

You can remove all items from the Data Set using LDicomDS::ResetDS.

Since the Data Set is stored internally as a tree, the deletion must be carried out as a tree.

When deleting an item from the tree, if the item being deleted has a sibling (same level, same parent), following it, this function returns a pointer to this sibling. If the item being deleted does not have a sibling following it, but has a sibling preceding it, this function returns a pointer to the preceding sibling. If the item being deleted is an only child, this function returns a pointer to the parent. If there is no parent this function returns NULL.

Below are illustrations of these situations:

For the sake of these illustrations, the order of siblings is top to bottom. A preceding sibling is drawn above the sibling it precedes, a following sibling is drawn below the sibling it follows.

Please note that the numbering of the items of interest is arbitrary, and does not imply order.

In this illustration item 2 will be deleted. Since it has a following sibling, the returned pointer will point to item 3.

In this illustration item 3 will be deleted. Since it does not have a following sibling, but does have a preceding sibling, the returned pointer will point to item 2.

In this illustration item 2 will be deleted. Since it is an only child, the returned pointer will point to the parent, item 1.

In this illustration item 1 will be deleted. Since it has no siblings and no parent, this function will return NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::ResetDS, LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetPrevElement, LDicomDS::GetNextElement, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement, LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindPrevElement, LDicomDS::FindNextElement, LDicomDS::FindModule, LDicomDS::FindIndexModule, LDicomDS::InsertElement, LDicomDS::InsertModule
Topics: | Working with Data Sets

Example

/* This example removes an element from the Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pElement = pDS->FindFirstElement(NULL, TAG_PATIENT_NAME, FALSE);
if (pElement != NULL)
{
pDS->DeleteElement(pElement);
}

delete pDS;
}


LDicomDS::DeleteImage

#include "Ltdic.h"

L_UINT16 LDicomDS::DeleteImage(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index value */
L_UINT32 nCount; | /* number of frames to delete */

Deletes one or more images from a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Position of the first frame to delete. Use zero-based indexing. For example, if there are 10 bitmaps in a list, the index of the last one is 9.
nCount | Number of frames to delete from the Pixel Data Element.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

As an example, if you wish to delete 50 images starting with the 50th frame in the Pixel Data, call this function with nIndex set to 49 (the 50th frame in a zero-based index) and nCount set to 50.

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically delete the image(s) from the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element from to delete the image(s).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetCountImage, LDicomDS::GetImage
Topics: | Working with Data Sets

Example

/* This example deletes all images from Data Set */

L_VOID Test(HBITMAPLIST hList)
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pDS->DeleteImage(NULL, 0, ELEMENT_INDEX_MAX);

delete pDS;
}


LDicomDS::DeleteKey

#include "ltdic.h"

L_VOID LDicomDS::DeleteKey(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Deletes the specified key element from the Dicom Dir Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains the key element to delete.

Returns

None.

Comments

When a key element is deleted using this function, all offspring of the key element (both key element children and non-key element children) and all their respective children are also deleted.

Below are illustrations of this:

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items of interest is arbitrary, and does not imply order.

In this illustration item 2 will be deleted. If any of the children of item 2 had children, these would be deleted also.

In this illustration item 3 will be deleted. Again, if any of the children of item 2 had children, these would be deleted also.

Please note that key elements should not be deleted using LDicomDS::DeleteElement. Deleting a key element using LDicomDS::DeleteElement will not delete any child key elements, but will delete information that references the child key elements.

For more information about key elements, refer to Working with Basic Directory Key Elements.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InsertKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::DeleteModalityLUT

#include "ltdic.h"

L_UINT16 LDicomDS::DeleteModalityLUT(uFlags)

L_UINT uFlags;

/* reserved for future use */

Deletes all the elements that describe the Modality LUT.

Parameter | Description
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will delete all the elements defined under the "Modality LUT Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetModalityLUTAttributes, LDicomDS::GetModalityLUTData, LDicomDS::SetModalityLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Modality LUT

Example

For an example, refer to LDicomDS::SetModalityLUT.


LDicomDS::DeleteModule

#include "Ltdic.h"

L_VOID LDicomDS::DeleteModule(nModule)

L_UINT32 nModule;

/* module constant */

Deletes a module from the Data Set.

Parameter | Description
nModule | Module constant that specifies which module to delete. For a list of default values, refer to IOD Module Constants.

Returns

None.

Comments

You can remove all items from the Data Set using LDicomDS::ResetDS.

Since the Data Set is stored internally as a tree, the deletion must be carried out as a tree.

When deleting an item from the tree, if the item being deleted has a sibling (same level, same parent), following it, this function returns a pointer to this sibling. If the item being deleted does not have a sibling following it, but has a sibling preceding it, this function returns a pointer to the preceding sibling. If the item being deleted is an only child, this function returns a pointer to the parent. If there is no parent this function returns NULL.

Below are illustrations of these situations:

For the sake of these illustrations, the order of siblings is top to bottom. A preceding sibling is drawn above the sibling it precedes, a following sibling is drawn below the sibling it follows.

Please note that the numbering of the items of interest is arbitrary, and does not imply order.

In this illustration item 2 will be deleted. Since it has a following sibling, the returned pointer will point to item 3.

In this illustration item 3 will be deleted. Since it does not have a following sibling, but does have a preceding sibling, the returned pointer will point to item 2.

In this illustration item 2 will be deleted. Since it is an only child, the returned pointer will point to the parent, item 1.

In this illustration item 1 will be deleted. Since it has no siblings and no parent, this function will return NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::DeleteElement, LDicomDS::ResetDS
Topics: | Working with Data Sets

Example

/* This example removes a module from the Data Set */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pDS->DeleteModule(MODULE_PATIENT);

delete pDS;
}


LDicomDS::DeleteOverlay

#include "ltdic.h"

L_UINT16 LDicomDS::DeleteOverlay(uOverlayIndex, uFlags)

L_UINT uOverlayIndex; | /* index */
L_UINT uFlags; | /* reserved for future use */

Deletes all the elements that describe an overlay.

Parameter | Description
uOverlayIndex | The index of the overlay being deleted. This index is zero-based.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will delete the following elements:

"Overlay Rows" | (60xx, 0010)
"Overlay Columns" | (60xx, 0011)
"Overlay Planes" | (60xx, 0012)
"Number of Frames in Overlay" | (60xx, 0015)
"Overlay Description" | (60xx, 0022)
"Overlay Type" | (60xx, 0040)
"Overlay Subtype" | (60xx, 0045)
"Overlay Origin" | (60xx, 0050)
"Image Frame Origin" | (60xx, 0051)
"Overlay Plane Origin" | (60xx, 0052)
"Overlay Bits Allocated" | (60xx, 0100)
"Overlay Bit Position" | (60xx, 0102)
"Overlay Activation Layer" | (60xx, 1001)
"ROI Area" | (60xx, 1301)
"ROI Mean" | (60xx, 1302)
"ROI Standard Deviation" | (60xx, 1303)
"Overlay Label" | (60xx, 1500)
"Overlay Data" | (60xx, 3000)

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList
Topics: | Overlays Overview
 | Overlays

Example

For an example, refer to LDicomDS::SetOverlayAttributes.


LDicomDS::DeletePaletteColorLUT

#include "ltdic.h"

L_UINT16 LDicomDS::DeletePaletteColorLUT(uFlags)

L_UINT uFlags;

/* reserved for future use */

Deletes all the elements that describe the "Palette Color Lookup Table".

Parameter | Description
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will delete all the elements defined under the "Palette Color Lookup Module", this includes:

Red Palette Color Lookup Table Descriptor (0028,1101),

Green Palette Color Lookup Table Descriptor (0028,1102),

Blue Palette Color Lookup Table Descriptor (0028,1103),

Palette Color Lookup Table UID (0028,1199),

Red Palette Color Lookup Table Data (0028,1201),

Green Palette Color Lookup Table Data (0028,1202),

Blue Palette Color Lookup Table Data (0028,1203),

Segmented Red Palette Color Lookup Table Data (0028,1221),

Segmented Green Palette Color Lookup Table Data (0028,1222),

Segmented Blue Palette Color Lookup Table Data (0028,1223

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPaletteColorLUTAttributes, LDicomDS::GetPaletteColorLUTData, LDicomDS::SetPaletteColorLUTAttributes, LDicomDS::SetPaletteColorLUTData, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Palette Color Table

Example

For an example, refer to LDicomDS::SetPaletteColorLUTData.


LDicomDS::DeleteSignature

#include "ltdic.h"

L_VOID LDicomDS::DeleteSignature(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Removes one or all Digital Signatures from the Data Set.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature to be removed from the Data Set. To remove all the Digital Signatures in the entire Data Set, set this parameter to NULL.

Returns

None.

Comments

You can use this function to remove a single Digital Signature by specifying the corresponding Digital Signatures Sequence Item. The function will delete the specified Item from the Data Set. The Message Authentication Code (MAC) Parameters Sequence Item that was referenced by the deleted Digital Signatures Sequence Item will also be deleted if it is not referenced by a Digital Signatures Sequence Item anymore.

You can also use the function to remove all the Digital Signatures that exist in the Data Set by passing NULL to the function. In this case, all the MAC Parameters Sequence (4FFE,0001) and the Digital Signatures Sequence (FFFA,FFFA) Data Elements that exist in the Data Set will be deleted.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::VerifySignature, LDicomDS::CreateSignature, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::FindSignature.


LDicomDS::DeleteVOILUT

#include "ltdic.h"

L_UINT16 LDicomDS::DeleteVOILUT(uFlags)

L_UINT uFlags;

/* reserved for future use */

Deletes all the elements that describe a VOI LUT.

Parameter | Description
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will delete the VOI LUT Sequence (0028,3010) and all the items under that sequence.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetVOILUT.


LDicomDS::DeleteWaveformGroup

#include "Ltdic.h"

L_UINT16 LDicomDS::DeleteWaveformGroup(uIndex, uReserved)

L_UINT32 uIndex; | /* index*/
L_UINT16 uReserved; | /* reserved*/

Deletes a waveform group.

Parameter | Description
uIndex | Zero-based index of the group to be deleted. As an example, if there are 3 groups and you want to delete the 2nd one, use an index of 1.
uReserved | Reserved. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

In DICOM, a waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). Use this function to delete the specified multiplex group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWaveformGroupCount, LDicomDS::GetWaveformGroup, LDicomDS::AddWaveformGroup, LDicomWaveformGroup class members, LDicomWaveformChannel class members
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomDS::DeleteWindow

#include "ltdic.h"

L_UINT16 LDicomDS::DeleteWindow(uFlags)

L_UINT uFlags;

/* reserved for future use */

Deletes all the elements that describe window center and window width.

Parameter | Description
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will delete the following elements:

Window Center (0028,1050)

Window Width (0028,1051)

Window Center & Width Explanation (0028,1055)

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetWindow.


LDicomDS::ExistsElement

#include "Ltdic.h"

L_BOOL LDicomDS::ExistsElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Determines whether the pointer to the structure is valid.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure.

Returns

TRUE | pElement is a valid pointer.
FALSE | pElement is NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetChildElement, LDicomDS::GetParentElement, LDicomDS::GetRootElement, LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetPrevElement, LDicomDS::GetNextElement, LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindPrevElement, LDicomDS::FindPrevElement
Topics: | Working with Data Sets

Example

/* This example checks if the pointer of an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pElement = pDS->InsertElement(NULL, FALSE, TAG_INSTITUTION_CODE_SEQUENCE,
VR_SQ, TRUE, ELEMENT_INDEX_MAX);

if (pDS->ExistsElement(pElement) == FALSE)
{
MessageBox(NULL, "The element does not exist in Data Set", "Notice", MB_OK);
}

delete pDS;
}


LDicomDS::FindFirstElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindFirstElement(pElement, nTag, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nTag; | /* tag that indicates the element to find */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the first item in the Data Set with the specified tag.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nTag | Tag that specifies the item to find. For a list of default tag values, refer to Data Element Tag Constants.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item in the Data Set with the specified tag.
NULL | An item with the specified tag was not found.

Comments

If the Data Set is evaluated as a tree structure, this function returns the first item on the same level as pElement with the same parent as pElement, that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore first is evaluated top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The first sibling (same level, same parent) of Item 1 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The first sibling (same level, same parent) of Item 2 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The first sibling (same level, same parent) of Item 3 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the first item in the entire list that has tag nTag. The search begins at the top of the list.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore first is evaluated top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The first item in the list that has tag nTag, if such an item exists. Searching begins at the top of the list. If an item with tag nTag is not found, NULL is returned.
Item 14 | The first item in the list that has tag nTag, if such an item exists. Searching begins at the top of the list. If an item with tag nTag is not found, NULL is returned.
Item 22 | The first item in the list that has tag nTag, if such an item exists. Searching begins at the top of the list. If an item with tag nTag is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific tag:

LDicomDS::FindLastElement

LDicomDS::FindPrevElement

LDicomDS::FindNextElement

The following functions will help you find specific modules in the Data Set:

LDicomDS::FindModule

LDicomDS::FindIndexModule

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindLastElement, LDicomDS::FindPrevElement, LDicomDS::FindNextElement, LDicomDS::FindModule, LDicomDS::FindIndexModule
Topics: | Working with Data Sets

Example

/* This example displays in a list-box control the names of all elements */

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_SOP_CLASS_UID, FALSE);
if (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

pDlg->AddString(p);

pElement = pDS->FindNextElement(pElement, FALSE);
}

delete pDS;
}


LDicomDS::FindFirstGraphicAnnSQItem

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindFirstGraphicAnnSQItem()

Retrieves the first item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
NULL | No items were found

Comments

This function returns the first item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module". Use this function along with LDicomDS::FindNextGraphicAnnSQItem in order to enumerate all the items under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindNextGraphicAnnSQItem, LDicomDS::GetLayerName, LDicomDS::SetLayerName, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetAnnSeqItems(LDicomDS & PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem ();
while (pGraphicAnnSQItem != NULL)
{
// Do something !
pGraphicAnnSQItem = PresStateDS.FindNextGraphicAnnSQItem (pGraphicAnnSQItem);
}
}


LDicomDS::FindFirstKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::FindFirstKey(pElement, pszKey, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR * pszKey; | /* type of key element to find */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the first item in the Dicom Dir Data Set with the specified key element type.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pszKey | Character string that contains the type of key element to find. Possible values are:
 | Value | Meaning
 | "PATIENT" | Patient key element
 | "STUDY" | Study key element
 | "SERIES" | Series key element
 | "IMAGE" | Image key element
 | "OVERLAY" | Overlay key element
 | "MODALITY LUT" | Modality-LUT key element
 | "VOI LUT" | VOI-LUT key element
 | "CURVE" | Curve key element
 | "STORED PRINT" | Stored print key element
 | "RT DOSE" | RT dose key element
 | "RT STRUCTURE SET" | RT structure set key element
 | "RT PLAN" | RT plan key element
 | "RT TREAT RECORD" | RT treatment record key element
 | "TOPIC" | Topic key element
 | "VISIT" | Visit key element
 | "RESULTS" | Results key element
 | "INTERPRETATION" | Interpretation key element
 | "STUDY COMPONENT" | Study Component key element
 | "PRESENTATION" | Presentation key element
 | "WAVEFORM" | Waveform key element
 | "SR DOCUMENT" | Structured Reporting Document key element
 | "PRIVATE" | Private key element
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item in the Data Set with the specified key element type.
NULL | An item with the specified key element type was not found.

Comments

If the Data Set is evaluated as a tree structure, this function returns the first item on the same level as pElement with the same parent as pElement, that has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore first is evaluated top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The first sibling (same level, same parent) of Item 1 that has the key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The first sibling (same level, same parent) of Item 2 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The first sibling (same level, same parent) of Item 3 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the first item in the entire list that has key element type pszKey. The search begins at the top of the list.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore first is evaluated top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The first item in the list that has key element type pszKey, if such an item exists. Searching begins at the top of the list. If an item with key element type pszKey is not found, NULL is returned.
Item 14 | The first item in the list that has key element type pszKey, if such an item exists. Searching begins at the top of the list. If an item with key element type pszKey is not found, NULL is returned.
Item 22 | The first item in the list that has key element type pszKey, if such an item exists. Searching begins at the top of the list. If an item with key element type pszKey is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific key element type:

LDicomDS::FindLastKey

LDicomDS::FindPrevKey

LDicomDS::FindNextKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindLastKey, LDicomDS::FindPrevKey, LDicomDS::FindNextKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::FindFirstPresStateRefSeriesItem

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindFirstPresStateRefSeriesItem()

Retrieves the first item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".
NULL | No items were found

Comments

This function returns the first item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module". Use this function along with LDicomDS::FindNextPresStateRefSeriesItem in order to enumerate all the items under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetSeriesItems(LDicomDS& PresStateDS)
{
pDICOMELEMENT pRefSeriesItem = PresStateDS.FindFirstPresStateRefSeriesItem ();
while (pRefSeriesItem != NULL)
{
// Do something !
pRefSeriesItem = PresStateDS.FindNextPresStateRefSeriesItem(pRefSeriesItem);
}
}


LDicomDS::FindIndexModule

#include "Ltdic.h"

pDICOMMODULE LDicomDS::FindIndexModule(nIndex)

L_UINT32 nIndex;

/* index value */

Returns a pointer to a DICOMMODULE Structure that contains information about the module, on Level 0, at the specified index.

Parameter | Description
nIndex | Index value that indicates the position of the module in Level 0 of the Data Set. This index is zero-based.

Returns

!NULL | A pointer to a DICOMMODULE Structure that contains information about the module at the specified index position on Level 0 of the Data Set.
NULL | A module at the specified index position on Level 0 of the Data Set was not found.

Comments

This function only finds modules at a specific index on Level 0 of the Data Set.

To find information about a module within the Data Set use LDicomDS::FindModule.

To find specific elements within the Data Set use the following:

LDicomDS::FindFirstElement

LDicomDS::FindLastElement

LDicomDS::FindPrevElement

LDicomDS::FindNextElement

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindNextElement, LDicomDS::FindPrevElement, LDicomDS::FindModule
Topics: | Working with Information Object Definitions

Example

For an example, refer to LDicomDS::GetCountModule.


LDicomDS::FindLastElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindLastElement(pElement, nTag, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nTag; | /* tag that indicates the element to find */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the last item in the Data Set with the specified tag.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nTag | Tag that specifies the item to find. For a list of default tag values, refer to Data Element Tag Constants.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the last item in the Data Set with the specified tag.
NULL | An item with the specified tag was not found.

Comments

If the Data Set is evaluated as a tree structure, this function returns the last item on the same level as pElement with the same parent as pElement, that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore last is the item closest to the bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The last sibling (same level, same parent) of Item 1 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.
Item 2 | The last sibling (same level, same parent) of Item 2 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.
Item 3 | The last sibling (same level, same parent) of Item 3 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.

If the Data Set is evaluated as a list, this function returns the last item in the entire list that has tag nTag. Searching begins at the bottom of the list.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore last is the item closest to the bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The last item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned. Searching begins at the bottom.
Item 14 | The last item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned. Searching begins at the bottom.
Item 22 | The last item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned. Searching begins at the bottom.

The following functions will also help you find elements in the Data Set with a specific tag:

LDicomDS::FindFirstElement

LDicomDS::FindPrevElement

LDicomDS::FindNextElement

The following functions will help you find specific modules in the Data Set:

LDicomDS::FindModule

LDicomDS::FindIndexModule

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstElement, LDicomDS::FindPrevElement, LDicomDS::FindNextElement, LDicomDS::FindModule, LDicomDS::FindIndexModule
Topics: | Working with Data Sets

Example

/* This example displays in a list-box control the names of all elements */

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindLastElement(NULL, TAG_SOP_CLASS_UID, FALSE);
if (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

pDlg->AddString(p);

pElement = pDS->FindPrevElement(pElement, FALSE);
}

delete pDS;
}


LDicomDS::FindLastKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::FindLastKey(pElement, pszKey, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR * pszKey; | /* type of key element to find */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the last item in the Dicom Dir Data Set with the specified key element type.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pszKey | Character string that contains the type of key element to find. Possible values are:
 | Value | Meaning
 | "PATIENT" | Patient key element
 | "STUDY" | Study key element
 | "SERIES" | Series key element
 | "IMAGE" | Image key element
 | "OVERLAY" | Overlay key element
 | "MODALITY LUT" | Modality-LUT key element
 | "VOI LUT" | VOI-LUT key element
 | "CURVE" | Curve key element
 | "STORED PRINT" | Stored print key element
 | "RT DOSE" | RT dose key element
 | "RT STRUCTURE SET" | RT structure set key element
 | "RT PLAN" | RT plan key element
 | "RT TREAT RECORD" | RT treatment record key element
 | "TOPIC" | Topic key element
 | "VISIT" | Visit key element
 | "RESULTS" | Results key element
 | "INTERPRETATION" | Interpretation key element
 | "STUDY COMPONENT" | Study Component key element
 | "PRESENTATION" | Presentation key element
 | "WAVEFORM" | Waveform key element
 | "SR DOCUMENT" | Structured Reporting Document key element
 | "PRIVATE" | Private key element
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the last item in the Data Set with the specified key element type.
NULL | An item with the specified key element type was not found.

Comments

If the Data Set is evaluated as a tree structure, this function returns the last item on the same level as pElement with the same parent as pElement, that has has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore last is the item closest to the bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The last sibling (same level, same parent) of Item 1 that has has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.
Item 2 | The last sibling (same level, same parent) of Item 2 that has has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.
Item 3 | The last sibling (same level, same parent) of Item 3 that has has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL. Searching begins at the bottom.

If the Data Set is evaluated as a list, this function returns the last item in the entire list that has has key element type pszKey. Searching begins at the bottom of the list.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore last is the item closest to the bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The last item in the list that has has key element type pszKey, if such an item exists. If an item with has key element type pszKey is not found, NULL is returned. Searching begins at the bottom.
Item 14 | The last item in the list that has has key element type pszKey, if such an item exists. If an item with has key element type pszKey is not found, NULL is returned. Searching begins at the bottom.
Item 22 | The last item in the list that has key element type pszKey, if such an item exists. If an item with has key element type pszKey is not found, NULL is returned. Searching begins at the bottom.

The following functions will also help you find elements in the Data Set with a specific key element type:

LDicomDS::FindFirstKey

LDicomDS::FindPrevKey

LDicomDS::FindNextKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstKey, LDicomDS::FindPrevKey, LDicomDS::FindNextKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::FindModule

#include "Ltdic.h"

pDICOMMODULE LDicomDS::FindModule(nModule)

L_UINT32 nModule;

/* module constant */

Returns a pointer to a DICOMMODULE structure that contains information about the specified module.

Parameter | Description
nModule | Module constant that specifies the module to find. For a list of default module constants, refer to IOD Module Constants.

Returns

!NULL | A pointer to a DICOMMODULE Structure that contains information about the specified module.
NULL | The specified module was not found.

Comments

To find the module at a specific index use LDicomDS::FindIndexModule.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindNextElement, LDicomDS::FindPrevElement, LDicomDS::FindIndexModule
Topics: | Working with Information Object Definitions

Example

/* This example checks if a module exists in a Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMMODULE pModule;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pModule = pDS->FindModule(MODULE_GENERAL_STUDY);
MessageBox(NULL, (pModule != NULL) ? "TRUE" : "FALSE", "Notice", MB_OK);

delete pDS;
}


LDicomDS::FindNextElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindNextElement(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the next item in the Data Set with a specific tag.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the next item in the Data Set with a specific tag.
NULL | An item with the specified tag was not found.

Comments

Note: This function does not specify a tag to use when searching. However the tag that was used in the last call to LDicomDS::FindFirstElement or LDicomDS::FindLastElement is used by default when searching.

If the Data Set is evaluated as a tree structure, this function returns the next item on the same level as pElement with the same parent as pElement, that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The next sibling (same level, same parent) of Item 1 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The next sibling (same level, same parent) of Item 2 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The next sibling (same level, same parent) of Item 3 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the next item in the entire list that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The next item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.
Item 14 | The next item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.
Item 22 | The next item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific tag:

LDicomDS::FindFirstElement

LDicomDS::FindLastElement

LDicomDS::FindPrevElement

The following functions will help you find specific modules in the Data Set:

LDicomDS::FindModule

LDicomDS::FindIndexModule

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindPrevElement, LDicomDS::FindModule, LDicomDS::FindIndexModule
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::FindFirstElement.


LDicomDS::FindNextGraphicAnnSQItem

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindNextGraphicAnnSQItem(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the next item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the next item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
NULL | No items were found

Comments

This function returns the next item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module". Use this function along with LDicomDS::FindFirstPresStateRefSeriesItem in order to enumerate all the items under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::GetLayerName, LDicomDS::SetLayerName, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::FindFirstPresStateRefSeriesItem.


LDicomDS::FindNextKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::FindNextKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the next item in the Dicom Dir Data Set with a specific key element type.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the next item in the Data Set with a specific key element type.
NULL | An item with the specified key element type was not found.

Comments

Note: This function does not specify a key element type to use when searching. However the key element type that was used in the last call to LDicomDS::FindFirstKey or LDicomDS::FindLastKey is used by default when searching.

If the Data Set is evaluated as a tree structure, this function returns the next item on the same level as pElement with the same parent as pElement, that has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The next sibling (same level, same parent) of Item 1 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The next sibling (same level, same parent) of Item 2 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The next sibling (same level, same parent) of Item 3 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the next item in the entire list that has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The next item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.
Item 14 | The next item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.
Item 22 | The next item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific tag:

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindPrevKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstKey, LDicomDS::FindLastKey, LDicomDS::FindPrevKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::FindNextPresStateRefSeriesItem

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindNextPresStateRefSeriesItem(pRefSeriesItem)

pDICOMELEMENT pRefSeriesItem;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the next item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Parameter | Description
pRefSeriesItem | Pointer to an item element under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the next item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".
NULL | No items were found

Comments

This function returns the next item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module". Use this function along with LDicomDS::FindFirstPresStateRefSeriesItem in order to enumerate all the items under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance, Class Members
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::FindFirstPresStateRefSeriesItem.


LDicomDS::FindPrevElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::FindPrevElement(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the previous item in the Data Set with a specific tag.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the previous item in the Data Set with a specified tag.
NULL | A previous item with the specified tag was not found.

Comments

Note: This function does not specify a tag to use when searching. However the tag that was used in the last call to LDicomDS::FindFirstElement or LDicomDS::FindLastElement is used by default when searching.

If the Data Set is evaluated as a tree structure, this function returns the previous item on the same level as pElement, with the same parent as pElement, that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The previous sibling (same level, same parent) of Item 1 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The previous sibling (same level, same parent) of Item 2 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The previous sibling (same level, same parent) of Item 3 that has tag nTag, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the previous item in the entire list that has tag nTag.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The previous item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.
Item 14 | The previous item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.
Item 22 | The previous item in the list that has tag nTag, if such an item exists. If an item with tag nTag is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific tag:

LDicomDS::FindFirstElement

LDicomDS::FindLastElement

LDicomDS::FindNextElement

The following functions will help you find specific modules in the Data Set:

LDicomDS::FindModule

LDicomDS::FindIndexModule

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstElement, LDicomDS::FindLastElement, LDicomDS::FindNextElement, LDicomDS::FindModule, LDicomDS::FindIndexModule
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::FindLastElement.


LDicomDS::FindPrevKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::FindPrevKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the previous item in the Dicom Dir Data Set with a specific key element type.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the previous item in the Data Set with a specified key element type.
NULL | A previous item with the specified key element type was not found.

Comments

Note: This function does not specify a key element type to use when searching. However the key element type that was used in the last call to LDicomDS::FindFirstKey or LDicomDS::FindLastKey is used by default when searching.

If the Data Set is evaluated as a tree structure, this function returns the previous item on the same level as pElement, with the same parent as pElement, that has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items of interest in this first illustration is arbitrary and does not imply order.

If the passed pointer points to :

The function returns a pointer to :

Item 1 | The previous sibling (same level, same parent) of Item 1 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 2 | The previous sibling (same level, same parent) of Item 2 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.
Item 3 | The previous sibling (same level, same parent) of Item 3 that has key element type pszKey, if such an item exists. If such an item does not exist, the function returns NULL.

If the Data Set is evaluated as a list, this function returns the previous item in the entire list that has key element type pszKey.

For the sake of these illustrations, the order of siblings is top to bottom.

Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | The previous item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.
Item 14 | The previous item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.
Item 22 | The previous item in the list that has key element type pszKey, if such an item exists. If an item with key element type pszKey is not found, NULL is returned.

The following functions will also help you find elements in the Data Set with a specific key element type:

LDicomDS::FindFirstKey

LDicomDS::FindLastKey

LDicomDS::FindNextKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstKey, LDicomDS::FindLastKey, LDicomDS::FindNextKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::FindSignature

#include "ltdic.h"

pDICOMELEMENT LDicomDS::FindSignature(pszSignatureUID)

const L_CHAR* pszSignatureUID;

/* character string containing the Digital Signature UID */

Returns a pointer to the Digital Signatures Sequence Item that corresponds to the Digital Signature which has the specified Digital Signature UID, if found in the Data Set.

Parameter | Description
pszSignatureUID | Character string that contains the Digital Signature UID of the Digital Signature for which to search.

Returns

!NULL | Pointer to the DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature with the specified Digital Signature UID.
NULL | No Digital Signature with the specified Digital Signature UID was found in the Data Set.

Comments

Each Digital Signature should be uniquely identified by a UID specified by the Digital Signature UID (0400,0100) under the corresponding Digital Signatures Sequence Item. Use this function to search the whole Data Set for a Digital Signature by its Digital Signature UID.

Once a pointer to the Digital Signatures Sequence Item is obtained, the following functions can be used to verify, delete, or get information about the Digital Signature:

LDicomDS::VerifySignature

LDicomDS::DeleteSignature

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

You can also use the LDicomDS::GetSignaturesCount and LDicomDS::GetSignature functions to enumerate the Digital Signatures in the main Data Set or in an Item of a Sequence of Items.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignaturesCount, LDicomDS::GetSignature, LDicomDS::VerifySignature, LDicomDS::DeleteSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, LDicomDS::CreateSignature, Class Members
Topics: | Working with Digital Signatures

Example

L_VOID FindSignature(LDicomDS& DataSet, L_PCSTR pszSignatureUID)
{
// Search the whole Data Set for the Digital Signature with the
// specified Digital Signature UID
pDICOMELEMENT pSignatureItem = DataSet.FindSignature(pszSignatureUID);
if (pSignatureItem)
{
L_CHAR* pszMsg = "The Digital Signature was found.\n"
"Press Yes to examine it or No to delete it.";

switch (::MessageBox(NULL, pszMsg, "Sample", MB_YESNOCANCEL))
{
case IDYES:
// Refer to the example of LDicomDS::VerifySignature for the
// function ExamineSignature
ExamineSignature(DataSet, pSignatureItem);
break;

case IDNO:
// Delete the Digital Signature
DataSet.DeleteSignature(pSignatureItem);
break;
}
}
else
{
::MessageBox(NULL,
"The Digital Signature was not found.",
"Sample",
MB_OK);
}
}


LDicomDS::FreeValue

#include "Ltdic.h"

L_VOID LDicomDS::FreeValue(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Frees the memory for a value.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.

Returns

None.

Comments

Calling this function following a call to one of the LDicomDS::GetxxxValue functions or the LDicomDS::GetCountValue function will free the memory allocated for the retrieved value. This memory will be freed anyway when the Data Set is freed. Using this function allows you to minimize the memory use in your application.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetAgeValue, LDicomDS::GetStringValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue, LDicomDS::GetCountValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetAgeValue

#include "Ltdic.h"

pVALUEAGE LDicomDS::GetAgeValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a VALUEAGE structure, that contains age information stored in the Value Field of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a VALUEAGE structure that contains age information stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three Age string values, and you are only interested in retrieving the last two Age string values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the Age string values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_AS. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetBinaryValue

#include "Ltdic.h"

L_BOOL LDicomDS::GetBinaryValue(pElement, pValue, nLength)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_VOID * pValue; | /* pointer to a buffer */
L_UINT32 nLength; | /* length of the buffer */

Updates a buffer with a binary value.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Buffer that will be updated with the value of the binary value associated with the specified item in the Data Set. You are responsible for allocating the memory for this buffer.
nLength | Length, in bytes, of the buffer you allocated.

Returns

TRUE | The function is able to update the buffer with the binary value.
FALSE | The function cannot update the buffer with a binary value.

Comments

Note: You must allocate the memory for pValue.

The DICOMELEMENT structure has a member also called nLength. If this nLength value is greater than the nLength of the buffer you allocated (pValue), then the binary value copied into pValue will be truncated to the smaller length. If the nLength of the DICOMELEMENT is shorter than the nLength of pValue, the entire binary value associated with the DICOMELEMENT will be copied into pValue.

This function can be called for every Value Representation, and it will return the exact value in the Value Field (unconverted).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

/* This example gets the binary value for an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
L_CHAR szText[256];

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_PATIENT_NAME, FALSE);
if (pElement != NULL)
{
memset(szText, 0, sizeof(szText));
pDS->GetBinaryValue(pElement, szText, sizeof (szText)-1);
}

delete pDS;
}


LDicomDS::GetCharValue

#include "Ltdic.h"

L_CHAR * LDicomDS::GetCharValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a char value, stored in the value field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a char stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more than one of those elements. For example, if the Value Field of the specified Data Element contains three character values, and you are only interested in retrieving the last two character values, set nIndex to 1 and nCount to 2. This tells the funtion to retrieve the character values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_OB, VR_SQ, or VR_UN. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

/* This example gets the value for an element */

L_VOID ShowValue(CListBox *pDlg, LDicomDS *pDS, pDICOMELEMENT pElement)
{
L_INT32 i;
L_INT32 nCount;
L_CHAR szText[256];
L_CHAR *pChar;
L_INT16 *pShort;
L_INT32 *pLong;
L_FLOAT *pFloat;
L_DOUBLE *pDouble;
pVALUEAGE pAge;
pVALUEDATE pDate;
pVALUETIME pTime;
pVALUEDATETIME pDateTime;

nCount = pDS->GetCountValue(pElement);

if (((pElement->nLength == ELEMENT_LENGTH_MAX)) ||
(pElement->nLength > 1024) ||
(nCount == 0))
{
return;
}

switch (pElement->nVR)
{
case VR_OB: // Other Byte String
case VR_UN: // Unknown
pChar = pDS->GetCharValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%02X", (L_UCHAR)pChar[i]);
pDlg->AddString(szText);
}
break;

case VR_SS: // Signed Short
pShort = pDS->GetShortValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%d", pShort[i]);
pDlg->AddString(szText);
}
break;

case VR_US: // Unsigned Short
case VR_OW: // Other Word String
pShort = pDS->GetShortValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%u", (L_UINT16)pShort[i]);
pDlg->AddString(szText);
}
break;

case VR_SL: // Signed Long
case VR_IS: // Integer String
pLong = pDS->GetLongValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%ld", pLong[i]);
pDlg->AddString(szText);
}
break;

case VR_UL: // Unsigned Long
pLong = pDS->GetLongValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%lu", (L_UINT32)pLong[i]);
pDlg->AddString(szText);
}
break;

case VR_AT: // Attribute Tag
pLong = pDS->GetLongValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%04X:%04X", GETGROUP((L_UINT32)pLong[i]),
GETELEMENT((L_UINT32)pLong[i]));
pDlg->AddString(szText);
}
break;

case VR_FL: // Floating Point Single
pFloat = pDS->GetFloatValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%f", pFloat[i]);
pDlg->AddString(szText);
}
break;

case VR_FD: // Floating Point Double
case VR_DS: // Decimal String
pDouble = pDS->GetDoubleValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%f", pDouble[i]);
pDlg->AddString(szText);
}
break;

case VR_CS: // Code String
case VR_SH: // Short String
case VR_LO: // Long String
case VR_AE: // Application Entity
case VR_LT: // Long Text
case VR_ST: // Short Text
case VR_UI: // Unique Identifier
case VR_UT: // Unlimited Text
case VR_PN: // Person Name
pChar = pDS->GetStringValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
pDlg->AddString(pChar);
pChar = pChar + strlen(pChar) + 1;
}
break;

case VR_AS: // Age String
pAge = pDS->GetAgeValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%u ", pAge[i].nNumber);
switch (pAge[i].nReference)
{
case VALUE_AGE_DAYS:
strcat(szText, "days");
break;
case VALUE_AGE_WEEKS:
strcat(szText, "weeks");
break;
case VALUE_AGE_MONTHS:
strcat(szText, "months");
break;
case VALUE_AGE_YEARS:
strcat(szText, "years");
break;
}
pDlg->AddString(szText);
}
break;

case VR_DA: // Date
pDate = pDS->GetDateValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%02u/%02u/%u", pDate[i].nMonth, pDate[i].nDay, pDate[i].nYear);
pDlg->AddString(szText);
}
break;

case VR_TM: // Time
pTime = pDS->GetTimeValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%02u:%02u:%u.%lu", pTime[i].nHours, pTime[i].nMinutes,
pTime[i].nSeconds, pTime[i].nFractions);
pDlg->AddString(szText);
}
break;

case VR_DT: // Date Time
pDateTime = pDS->GetDateTimeValue(pElement, 0, nCount);
for (i = 0; i < nCount; i++)
{
wsprintf(szText, "%d %02u/%02u/%u %02u:%02u:%u.%lu&%lu",
pDateTime[i].nMonth, pDateTime[i].nDay,
pDateTime[i].nYear, pDateTime[i].nHours, pDateTime[i].nMinutes,
pDateTime[i].nSeconds, pDateTime[i].nFractions,
pDateTime[i].nOffset);
pDlg->AddString(szText);
}
break;
}

pDS->FreeValue(pElement);
}

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PATIENT_NAME, FALSE);
if (pElement != NULL)
{
ShowValue(pDlg, pDS, pElement);
}

delete pDS;
}


LDicomDS::GetChildElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetChildElement(pElement, bVolatile)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bVolatile; | /* flag that indicates the type of element to retrieve */

Returns a pointer to the item in the Data Set that contains the first child of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.
bVolatile | Flag that indicates the type of child element to retrieve. Possible values are:
 | Value | Meaning
 | TRUE | Retrieve any child element, volatile or non-volatile.
 | FALSE | Retrieve a non-volatile child element.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the first child of the item specified in pElement.
NULL | pElement has no child items.

Comments

The child is the offspring one level lower than the specified item. If the specified item has no child items, this function will return NULL. For example:

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item 5
Item 6 | NULL

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetNextElement

LDicomDS::GetRootElement

LDicomDS::GetParentElement

A volatile element is an element that can be changed or destroyed in the process of inserting or setting an image. A non-volatile element is an element that must be changed manually. It is not changed or destroyed by inserting or setting an image.

For example, a grayscale image has elements TAG_SMALLEST_IMAGE_PIXEL_VALUE, TAG_LARGEST_IMAGE_PIXEL_VALUE, etc. If the image is changed to a color image, these elements disappear and the following elements appear: TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR, etc. These are volatile elements since they are changed or destroyed when an image is changed or set.

To retrieve a child element that must be changed manually, i.e. is not volatile, set bVolatile to FALSE. To retrieve a child element that may be either volatile or non-volatile, set bVolatile to TRUE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetNextElement, LDicomDS::GetPrevElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::IsVolatileElement
Topics: | Working with Data Sets

Example

/* This example displays in a tree control the tree of the elements in the Data Set */

L_VOID ShowTree(CTreeCtrl *pDlg, LDicomDS *pDS, HTREEITEM hParentItem,
pDICOMELEMENT pParentElement)
{
HTREEITEM hItem;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

if (pParentElement == NULL)
{
pElement = pDS->GetFirstElement(pParentElement, TRUE, FALSE);
}
else
{
pElement = pDS->GetChildElement(pParentElement, FALSE);
}

while (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

hItem = pDlg->InsertItem(p, hParentItem, TVI_LAST);

if (pDS->GetChildElement(pElement, FALSE) != NULL)
{
ShowTree(pDlg, pDS, hItem, pElement);
}

pElement = pDS->GetNextElement(pElement, TRUE, FALSE);
}
}

L_VOID Test(CTreeCtrl *pDlg)
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

ShowTree(pDlg, pDS, TVI_ROOT, NULL);

 delete pDS;
}


LDicomDS::GetChildKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetChildKey(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the item in the Dicom Dir Data Set that contains the first child of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the first child of the item specified in pElement.
NULL | pElement has no child items.

Comments

The child is the offspring one level lower than the specified item. If the specified item has no child items, this function will return NULL. For example:

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item 5
Item 6 | NULL

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetNextKey

LDicomDS::GetRootKey

LDicomDS::GetParentKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetLastKey, LDicomDS::GetNextKey, LDicomDS::GetPrevKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetConvertValue

#include "Ltdic.h"

L_UINT32 EXT_FUNCTION LDicomDS::GetConvertValue(pElement, pszText)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR *pszText; | /* character string */

Converts the value of an element to a string, and returns the number of characters in that string.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pszText | Character string to be updated with the string version of the value.

Returns

Number of characters in the pszText parameter.

Comments

Call this function twice. The first should have pszText set to NULL. This will provide you with the size of the string that will be stored in pszText. Next, allocate the memory required for pszText and call this function again to update pszText with the string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetConvertValue
Topics: | Working with Data Sets

Example

/* This example converts the value to a string and display it in a list-box control */

L_VOID Test(HWND hDlg, LDicomDS *pDS, pDICOMELEMENT pElement)
{
L_CHAR *pszText;
L_CHAR *p;
L_CHAR *q;
L_UINT32 nLength;
L_UINT32 nCount;
L_UINT32 i;

nCount = pDS->GetCountValue(pElement);
nLength = pDS->GetConvertValue(pElement, NULL);
pszText = (L_CHAR *)malloc(nLength);
pDS->GetConvertValue(pElement, pszText);

for (i = 0, p = pszText; i < nCount; i++)

{
q = strchr(p, '\\');
if (q != NULL)
{
*q++ = 0;
}

SendMessage(hDlg, LB_ADDSTRING, (WPARAM)0, (LPARAM)(LPCTSTR)p);

p = q;
}

 free(pszText);
pDS->FreeValue(pElement);
}


LDicomDS::GetCountImage

#include "Ltdic.h"

L_UINT32 LDicomDS::GetCountImage(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns the number of frames in a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.

Returns

Number of frames in a Pixel Data element.

Comments

If pElement is NULL, this function returns the number of images present in the entire Data Set.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList
Topics: | Working with Data Sets

Example

/* This example gets the number of all images in Data Set */

L_VOID Test()
{
LDicomDS *pDS;
L_UINT32 nCount;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

nCount = pDS->GetCountImage(NULL);

delete pDS;
}


LDicomDS::GetCountModule

#include "Ltdic.h"

L_UINT32 LDicomDS::GetCountModule(L_VOID)

Returns the number of modules in the entire Data Set.

Returns

The number of modules in the entire Data Set.

Comments

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

LDicomDS::GetLastElement

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetNextElement, LDicomDS::GetPrevElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement
Topics: | Working with Data Sets

Example

/* This example displays in a list-box control all modules from the Data Set */

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMMODULE pModule;
pDICOMIOD pIOD;
L_UINT32 nCount;
L_UINT32 i;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

nCount = pDS->GetCountModule();
for (i = 0; i < nCount; i++)
{
pModule = pDS->FindIndexModule(i);
if (pModule != NULL)
{
pIOD = LDicomIOD::FindModule( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, pModule->nModule);
if (pIOD != NULL)
{
p = pIOD->pszName;
}
else
{
p = szUnknown;
}

pDlg->AddString(p);
}
}

delete pDS;
}


LDicomDS::GetCountValue

#include "Ltdic.h"

L_UINT32 LDicomDS::GetCountValue(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns the number of values stored in the Value Field of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.

Returns

The number of values stored in the Value Field of the specified element.

Comments

For more information on retrieving multiple values from the Value Field, refer to the LDicomDS::GetxxxValue functions.

To minimize memory use in your application, you can free the memory allocated for this function to return the value by calling LDicomDS::FreeValue following the call to this function.

Libraries

win32

ltdic14n.dll (ltdic_n.lib import library)

See Also

Function: | LDicomDS::GetInfoDS, LDicomDS::GetPreamble, LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetDateTimeValue, LDicomDS::GetTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetDateTimeValue

#include "Ltdic.h"

pVALUEDATETIME LDicomDS::GetDateTimeValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a VALUEDATETIME structure, that contains date-time information stored in the Value Field of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a VALUEDATETIME structure that contains time information stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three Date-Time values, and you are only interested in retrieving the last two Date-Time values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the Date-Time values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_DT. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

$See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetDateValue

#include "Ltdic.h"

pVALUEDATE LDicomDS::GetDateValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a VALUEDATE structure, that contains date information stored in the Value Field of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a VALUEDATE structure that contains date information stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three Date values, and you are only interested in retrieving the last two Date values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the Date values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_DA. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetDefaultJ2KOptions

#include "ltdic.h"

L_UINT16 LDicomDS::GetDefaultJ2KOptions(pOptions, nSize)

pFILEJ2KOPTIONS pOptions; | /* pointer to a structure */
L_INT nSize; | /* size of the structure */

Gets the default JPEG 2000 compression options.

Parameter | Description
pOptions | Pointer to a structure to be updated with the default JPEG 2000 compression options.
nSize | Size of the structure pointed to by pOptions.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetImage, LDicomDS::SetImageList, LDicomDS::SetJ2KOptions, LDicomDS::GetJ2KOptions
Topics: | Working with Data Sets
 | Implementing JPEG 2000 Plug in Features

Example

/* This example inserts an image in a Data Set
Using the JPEG 2000 compression with
default compression options
*/

L_VOID MyInsertImage(LDicomDS *pDS ,pBITMAPHANDLE pBitmap)
{
if(pDS && pBitmap)
{
pDICOMELEMENT pElement;
FILEJ2KOPTIONS J2KOptions;

// Get the default JPEG 2000 compression options.
pDS->GetDefaultJ2KOptions(&J2KOptions, sizeof(FILEJ2KOPTIONS));
// Set the new compression options.
pDS->SetJ2KOptions(&J2KOptions);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->InsertImage( pElement,
pBitmap,
1,
IMAGE_COMPRESSION_J2K_LOSSY,
IMAGE_PHOTOMETRIC_MONOCHROME2,
0,
25,
DICOM_SETIMAGE_AUTO_SET_VOI_LUT,
NULL,
NULL);
}
}
}


LDicomDS::GetDoubleValue

#include "Ltdic.h"

L_DOUBLE * LDicomDS::GetDoubleValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a double value, stored in the Value Field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a double value stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three double values, and you are only interested in retrieving the last two double values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the double values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_DS or VR_FD. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetFirstElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetFirstElement(pElement, bTree, bVolatile)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */
L_BOOL bVolatile; | /* flag that indicates the type of element to retrieve */

Returns a pointer to the first item in the Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set. A pointer to the DICOMELEMENT structure that contains the first item in the Data Set will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.
bVolatile | Flag that indicates the type of element to retrieve. Possible values are:
 | Value | Meaning
 | TRUE | Retrieve the first element, volatile or non-volatile.
 | FALSE | Retrieve the first non-volatile element.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item in the Data Set.
NULL | The Data Set is empty.

Comments

If the Data Set is evaluated as a tree structure, this function returns the first item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this first illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the Data Set is evaluated as a list, the first item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 1
Item 12 | Item 1
Item 14 | Item 1
Item 22 | Item 1
Item 25 | Item 1

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetLastElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

A volatile element is an element that can be changed or destroyed in the process of inserting or setting an image. A non-volatile element is an element that must be changed manually. It is not changed or destroyed by inserting or setting an image.

For example, a grayscale image has elements TAG_SMALLEST_IMAGE_PIXEL_VALUE, TAG_LARGEST_IMAGE_PIXEL_VALUE, etc. If the image is changed to a color image, these elements disappear and the following elements appear: TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR, etc. These are volatile elements since they are changed or destroyed when an image is changed or set.

To retrieve the first element that must be changed manually, i.e. is not volatile, set bVolatile to FALSE. To retrieve the first element, either volatile or non-volatile, set bVolatile to TRUE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLastElement, LDicomDS::GetPrevElement, LDicomDS::GetNextElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement, LDicomDS::IsVolatileElement
Topics: | Working with Data Sets

Example

/* This example displays in a tree control the list of elements in the Data Set */

L_VOID ShowList(CTreeCtrl *pDlg, LDicomDS *pDS)
{
HTREEITEM hItem;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pElement = pDS->GetFirstElement(NULL, FALSE, FALSE);

while (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

hItem = pDlg->InsertItem(p, TVI_ROOT, TVI_LAST);

pElement = pDS->GetNextElement(pElement, FALSE, FALSE);
}
}

L_VOID Test(CTreeCtrl *pDlg)
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

ShowList(pDlg, pDS);

 delete pDS;
}


LDicomDS::GetFirstKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetFirstKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the first item in the Dicom Dir Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set. A pointer to the DICOMELEMENT structure that contains the first item in the Data Set will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the first item in the Data Set.
NULL | The Data Set is empty.

Comments

If the Data Set is evaluated as a tree structure, this function returns the first item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this first illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the Data Set is evaluated as a list, the first item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 1
Item 12 | Item 1
Item 14 | Item 1
Item 22 | Item 1
Item 25 | Item 1

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetLastKey

LDicomDS::GetPrevKey

LDicomDS::GetNextKey

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLastKey, LDicomDS::GetPrevKey, LDicomDS::GetNextKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetFloatValue

#include "Ltdic.h"

L_FLOAT * LDicomDS::GetFloatValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a float value, stored in the Value Field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a float value stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three float values, and you are only interested in retrieving the last two float values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the float values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_FL. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetGraphicObjectCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetGraphicObjectCount(pGraphicAnnSQItem, pCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT* pCount; | /* pointer to a variable which will be updated with the graphic annotation object count */

Retrieves the number of graphical annotation objects in a certain "Graphic Annotation Sequence" (0070,0001) item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pCount | Pointer to a variable, which will be updated with the graphical annotation object count.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function returns the number of graphical annotation objects in the specified "Graphic Annotation Sequence" (0070,0001) item in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::GetGraphicObjectInfo.


LDicomDS::GetGraphicObjectInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::GetGraphicObjectInfo(pGraphicAnnSQItem, uGraphicObjectIndex, pGraphicObject, uStructSize)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENTstructure */
L_UINT uGraphicObjectIndex; | /* graphic annotation object index */
pDICOMGRAPHICOBJECT pGraphicObject; | /* pointer to the graphic annotation object attributes structure to be updated */
L_UINT uStructSize; | /* the size of the DICOMGRAPHICOBJECT structure */

Gets the attributes of the specified graphic annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uGraphicObjectIndex | The index of the graphic annotation object whose attributes we want to retrieve.
pGraphicObject | Pointer to a structure which will be filled with the graphic annotation object attributes.
uStructSize | Size of the DICOMGRAPHICOBJECT structure. Pass sizeof(DICOMGRAPHICOBJECT).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of the specified graphic object and store their values in the structure pointed to by pGraphicObject.

pGraphicObject->uStructSize will be set to the value of the parameter uStructSize.

Before calling this function you can call LDicomDS::GetGraphicObjPointsCount in order to get the "Number of Graphic Points" (0070,0021) in this object and allocate pGraphicObject->pAnnPoints accordingly.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID MyGetGraphicObjects(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_UINT16 nRet;
L_CHAR* pszType = NULL;
DICOMGRAPHICOBJECT AnnGraphic;
L_UINT uPointsCount;
L_UINT uObjCount;
pDICOMANNPOINT pPoints = NULL;

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();

nRet = PresStateDS.GetLayerGraphicObjectCount(pGraphicAnnSQItem, &uObjCount);
if (nRet != DICOM_SUCCESS)
return;
if (uObjCount > 0)
{
for (L_UINT i = 0; i < uObjCount; i++)
{
memset(&AnnGraphic, 0, sizeof(DICOMGRAPHICOBJECT));
nRet = PresStateDS.GetGraphicObjPointCount(pGraphicAnnSQItem,i, & uPointsCount);
if (nRet != DICOM_SUCCESS)
return;
if (uPointsCount > 0)
{
pPoints = new DICOMANNPOINT[uPointsCount];
if (!pPoints)
{
return;
}
AnnGraphic.pAnnPoints = pPoints;
AnnGraphic.nPointCount = uPointsCount;
nRet = PresStateDS.GetGraphicObjectInfo(pGraphicAnnSQItem,i, &AnnGraphic, sizeof(DICOMGRAPHICOBJECT));
if (nRet == DICOM_SUCCESS)
{
switch (AnnGraphic.uType)
{
case DICANN_TYPE_POINT:
pszType = "Point Annotation";
break;
case DICANN_TYPE_POLYLINE:
pszType = "Polyline Annotation";
break;
case DICANN_TYPE_INTERPOLATED:
pszType = "Interpolated Line Annotation";
break;
case DICANN_TYPE_CIRCLE:
pszType = "Circle Annotation";
break;
case DICANN_TYPE_ELLIPSE:
pszType = "Ellipse Annotation";
break;
}
if (pszType)
{
wsprintf(szText, "Annotation type is: %s", pszType);

MessageBox( NULL,
szText,
"Note",
MB_OK);
}
// Do something with the points
if (pPoints)
{
delete [] pPoints;
}
}
}
}
}
}


LDicomDS::GetGraphicObjElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetGraphicObjElement(pGraphicAnnSQItem, uObjIndex)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uObjIndex; | /* gaphic annotation object index */

Gets the item element of the specified graphic annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to a DICOMELEMENT structure
uObjIndex | Graphic annotation object index whose item element is to be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred. Refer to Return Codes.

Comments

This function returns the item element under the "Graphic Object Sequence" (0070,0009) of the specified graphic annotation object, if the element could not be found it returns NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetFirstGraphicObjectElement(LDicomDS& PresStateDS)
{
pDICOMELEMENT pElement = PresStateDS.GetGraphicObjElement(PresStateDS.FindFirstGraphicAnnSQItem(),0);
if (pElement)
{
MessageBox( NULL,
"Element item for this layer has been found.",
"Note",
MB_OK);
}
}


LDicomDS::GetGraphicObjPointCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetGraphicObjPointCount(pGraphicAnnSQItem, uGraphicObjIndex, pPointsCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENTstructure */
L_UINT uGraphicObjIndex; | /* graphic annotation object index */
L_UINT* pPointsCount; | /* pointer to a variable which will be updated with the point count */

Retrieves number of points that represents a graphical annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uGraphicObjIndex | Index of the graphic annotation object whose point count is to be retrieved.
pPointsCount | Pointer to a variable which will be updated with the number of points that represents a graphical annotation object.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function retrieves the number of points that represents a graphical annotation object in the specified "Graphic Annotation Sequence" (0070,0001) item in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::GetGraphicObjectInfo.


LDicomDS::GetInfoCS

#include "ltdic.h"

L_VOID LDicomDS::GetInfoCS(pnCommand, pbRequest)

L_UINT16 * pnCommand; | /* pointer to a variable */
L_BOOL * pbRequest; | /* pointer to a variable */

Retrieves information about the specified Command Set.

Parameter | Description
pnCommand | Pointer to a variable to be updated with the command associated with the Command Set. Possible values are:
 | Value | Meaning
 | COMMAND_C_STORE | [0x0001] Composite Store Command
 | COMMAND_C_FIND | [0x0020] Composite Find Command
 | COMMAND_C_GET | [0x0010] Composite Get Command
 | COMMAND_C_MOVE | [0x0021] Composite Move Command
 | COMMAND_C_CANCEL | [0x0FFF] Composite Cancel Command
 | COMMAND_C_ECHO | [0x0030] Composite Echo Command
 | COMMAND_N_REPORT | [0x0100] Normalized Report Command
 | COMMAND_N_GET | [0x0110] Normalized Get Command
 | COMMAND_N_SET | [0x0120] Normalized Set Command
 | COMMAND_N_ACTION | [0x0130] Normalized Action Command
 | COMMAND_N_CREATE | [0x0140] Normalized Create Command
 | COMMAND_N_DELETE | [0x0150] Normalized Delete Command
pbRequest | Pointer to a variable to be updated with a value that indicates whether the command set is a request or a response. Possible values are:
 | Value | Meaning
 | TRUE | Create the command set as a request.
 | FALSE | Create the command set as a response.

Returns

None.

Comments

A Command Set is a special type of Data Set. Therefore, to create a Command Set you must first create a Data Set using LDicomDS::LDicomDS and then initialize it by calling LDicomDS::InitCS.

You can also determine the type of a command set by "and-ing" the value of the TAG_COMMAND_FIELD with COMMAND_REQUEST[0x0000] or COMMAND_RESPONSE[0x8000].

In addition, you can determine whether a command set has a required data set by "and-ing" the value of the TAG_DATA_SET_TYPE element with COMMAND_DATASET_PRESENT, COMMAND_DATASET_IDENTIFIER, or COMMAND_DATASET_ABSENT.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InitCS, LDicomDS::LDicomDS
Topics: | Working with Command Sets

Example

For an example, refer to LDicomDS::InitCS.


LDicomDS::GetInfoImage

#include "Ltdic.h"

L_UINT16 LDicomDS::GetInfoImage(pElement, pInfo, nIndex)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pDICOMIMAGE pInfo; | /* pointer to a DICOMIMAGE structure */
L_UINT32 nIndex; | /* index value */

Retrieves information about the specified image.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pInfo | Pointer to a DICOMIMAGE structure that contains the information about the specified image.
nIndex | Index value that indicates the position of the image. This is a zero-based index. For example, if nIndex is 0, information about the first image in the Pixel Data Element will be retrieved.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically retrieve information about the image at the specified index within the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element from which to get the image information.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::InsertImageList, LDicomDS::SetImage, LDicomDS::SetImageList
Topics: | Working with Data Sets

Example

/* This example returns the information about an image */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
DICOMIMAGE Info;

pDS = new LDicomDS(NULL);

 pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

 pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->GetInfoImage(pElement, &Info, 0);
}

delete pDS;
}


LDicomDS::GetImage

#include "Ltdic.h"

L_UINT16 LDicomDS::GetImage(pElement, pBitmap, uStructSize, nIndex, nBitsPerPixel, nOrder, uFlags, pfnCallback, pUserData)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pBITMAPHANDLE pBitmap; | /* pointer to the bitmap handle */
L_UINT uStructSize; | /* size in bytes, of the structure pointed to by pBitmap */
L_UINT32 nIndex; | /* index value */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nOrder; | /* desired color order */
L_UINT uFlags; | /* flags */
FILEREADCALLBACK pfnCallback; | /* optional callback function */
L_VOID L_FAR *pUserData; | /* pointer to more parameters for the callback */

Loads the bitmap of a Pixel Data element into a BITMAPHANDLE.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pBitmap | Pointer to the bitmap handle that references the loaded bitmap.
uStructSize | Size in bytes, of the structure pointed to by pBitmap, for versioning. Use sizeof(BITMAPHANDLE).
nIndex | Index value that indicates which frame in a Pixel Data element to load.
nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:
 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap

nOrder | The desired color order. Possible values are:
 | Value | Meaning
 | ORDER_RGB | [0] Red-green-blue order.
 | ORDER_BGR | [1] Blue-green-red order.
 | ORDER_GRAY | [2] 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are only supported in the Document/Medical toolkits.
 | ORDER_RGBORGRAY | [3] Load the image as red, green, blue OR as a 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are supported in the Document/Medical toolkits only.
 | ORDER_BGRORGRAY | [4] Load the image as blue, green, red OR as a 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are supported in the Document/Medical toolkits only.
 | 0 | The data is 8 bits per pixel or less.

uFlags | Flags which control the behaviour of this function:
 | Value | Meaning
 | DICOM_GETIMAGE_AUTO_LOAD_OVERLAYS | [0x0001] If set, the function will automatically extract the overlays included in the dataset and add them to the loaded bitmap.
 | DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | [0x0002] If set, the function will automatically apply the "Modality LUT" when loading the bitmap.
 | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | [0x0004] If set, the function will automatically apply the "VOI LUT" when loading the bitmap.
 | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION | [0x0008] If set, the function will adjust the high bit and/or low bit (if possible) inside the bitmap handle in order to hold the range of pixel values after applying the modality LUT.
pfnCallback | Optional callback function for additional processing.
 | If you do not provide a callback function, use NULL as the value of this parameter.
 | If you do provide a callback function, use the function pointer as the value of this parameter.
 | The callback function must adhere to the function prototype described in FILEREADCALLBACK Function.
pUserData | Void pointer that you can use to pass one or more additional parameters that the callback function needs.
 | To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.
 | If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If pElement is NULL, this function will load any image within the file, based on the nIndex parameter.

If DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION is set in uFlags, consider the following example:

If the dataset has the following attributes:

Bits allocated | 16
Bits stored | 12
Pixel Range | 0 - +4095

Pixel Representation is unsigned (0)

Photometric Interpretation is MONOCHROME2

Rescale Slope | 1
Rescale Intercept | -1024

After applying the rescale slope and the intercept:

Output minimum pixel value = (0 * 1 +(-1024)) = -1024

Output maximum pixel value = (4095 * 1 + (-1024)) = 3071

The new pixel value range (–1024 to 3071) can’t be represented with the current bits stored (12 bits), which can represent values in the range (–2048 to 2048). In this case the function will change the high bit inside the bitmap handle to be 12 instead of 11 (bits stored becomes 13), which can represent values in the range (–8192 to 8191).

Please note that the function won’t be able to update the high bit and/or low bit if the number of bits stored was already equal to the number of bits allocated.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetCountImage, LDicomDS::GetImageList
Topics: | Working with Data Sets

Example

/* This example fills a bitmap with an image from the Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
BITMAPHANDLE Bitmap;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->GetImage(pElement, &Bitmap, sizeof(BITMAPHANDLE), 0, 0, ORDER_BGR, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT|
DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT, NULL, NULL);
L_FreeBitmap (&Bitmap);
}

delete pDS;
}


LDicomDS::GetImageList

#include "Ltdic.h"

L_UINT16 LDicomDS::GetImageList(pElement, hList, nIndex, nCount, nBitsPerPixel, nOrder, uFlags)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
HBITMAPLIST hList; | /* handle to the list of bitmaps */
L_UINT32 nIndex; | /* index value */
L_UINT32 nCount; | /* number of frames to load */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nOrder; | /* desired color order */
L_UINT uFlags; | /* flags */

Loads the bitmap list with frames from a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
hList | Handle to the list of bitmaps.
nIndex | Position of the first frame to load. Use zero-based indexing. For example, if there are 10 bitmaps in a list, the index of the last one is 9.
nCount | Number of frames to load into the bitmap list.
nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:
 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap

nOrder | The desired color order. Possible values are:
 | Value | Meaning
 | ORDER_RGB | [0] Red-green-blue order.
 | ORDER_BGR | [1] Blue-green-red order.
 | ORDER_GRAY | [2] 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are only supported in the Document/Medical toolkits.
 | ORDER_RGBORGRAY | [3] Load the image as red, green, blue OR as a 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are supported in the Document/Medical toolkits only.
 | ORDER_BGRORGRAY | [4] Load the image as blue, green, red OR as a 12 or 16-bit grayscale image. 12 and 16-bit grayscale images are supported in the Document/Medical toolkits only.
 | 0 | The data is 8 bits per pixel or less.

uFlags | Flags which control the behaviour of this function. Possible values are:
 | Value | Meaning
 | DICOM_GETIMAGE_AUTO_LOAD_OVERLAYS | [0x0001] If set, the function will automatically extract the overlays included in the dataset and add them to the loaded bitmap.
 | DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | [0x0002] If set, the function will automatically apply the "Modality LUT" when loading the bitmap.
 | DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | [0x0004] If set, the function will automatically apply the "VOI LUT" when loading the bitmap.
 | DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION | [0x0008] If set, the function will adjust the high bit and/or low bit (if possible) inside the bitmap handle in order to hold the range of pixel values after applying the modality LUT.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

As an example, if you wish to load 50 images starting with the 50th frame in the Pixel Data, call this function with nIndex set to 49 (the 50th frame in a zero-based index) and nCount set to 50.

If pElement is NULL, you can retrieve a bitmap list of all images within the Data Set. To do this you must call LDicomDS::GetCountImage with pElement set to NULL to determine the number of images in the Data Set and set the nCount parameter in LDicomDS::GetImageList to this value.

If DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION is set in uFlags, consider the following example:

If the dataset has the following attributes:

Bits allocated | 16
Bits stored | 12
Pixel Range | 0 - +4095

Pixel Representation is unsigned (0)

Photometric Interpretation is MONOCHROME2

Rescale Slope | 1
Rescale Intercept | -1024

After applying the rescale slope and the intercept:

Output minimum pixel value = (0 * 1 +(-1024)) = -1024

Output maximum pixel value = (4095 * 1 + (-1024)) = 3071

The new pixel value range (–1024 to 3071) can’t be represented with the current bits stored (12 bits), which can represent values in the range (–2048 to 2048). In this case the function will change the high bit inside the bitmap handle to be 12 instead of 11 (bits stored becomes 13), which can represent values in the range (–8192 to 8191).

Please note that the function won’t be able to update the high bit and/or low bit if the number of bits stored was already equal to the number of bits allocated.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetCountImage, LDicomDS::GetImage
Topics: | Working with Data Sets

Example

/* This example fills a bitmap list with all images from the Data Set */

L_VOID Test()
{
LDicomDS *pDS;
HBITMAPLIST hList;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

 L_CreateBitmapList (&hList);
pDS->GetImageList(NULL, hList, 0, ELEMENT_INDEX_MAX, 0, ORDER_BGR, 0);
 L_DestroyBitmapList (hList);

delete pDS;
}


LDicomDS::GetInfoDS

#include "Ltdic.h"

L_VOID LDicomDS::GetInfoDS(nClass, nFlags)

L_UINT32 * nClass; | /* pointer to an IOD Class constant */
L_UINT16 * nFlags; | /* flags that indicate file characteristics */

Gets information about the file.

Parameter | Description
nClass | Pointer to an IOD Class constant which determines the class of information stored in the file. For a list of default IOD Module Constants, refer to IOD Module Constants.
nFlags | Meta-header flags and Transfer Syntax flags that indicate file characteristics. Possible values for the Meta-header flags are:
 | Value | Meaning
 | DS_METAHEADER_PRESENT | [0x0001] The header is present.
 | DS_METAHEADER_ABSENT | [0x0002] The header is absent.
 | Possible values and combinations for the Transfer Syntax flags are:
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit.
 | DS_LITTLE_ENDIAN | DS_IMPLICIT_VR
 | DS_LITTLE_ENDIAN | DS_EXPLICIT_VR
 | DS_BIG_ENDIAN | DS_EXPLICIT_VR

Any of the available Meta-header flags given above may be combined with any of the available values or combinations of values for the Transfer Syntax flags given above. For example, you may combine DS_METAHEADER_ABSENT with DS_EXPLICIT_VR, or you may combine DS_METAHEADER_PRESENT with DS_BIG_ENDIAN | DS_EXPLICIT_VR, etc.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPreamble, LDicomDS::GetCountValue
Topics: | Working with Data Sets

Example

/* This example displays the Data Set information */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMIOD pIOD;
L_UINT32 nClass;
L_UINT16 nFlags;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pDS->GetInfoDS(&nClass, &nFlags);

pIOD = LDicomIOD::FindClass(nClass);
if (pIOD != NULL)
{
p = pIOD->pszName;
}
else
{
p = szUnknown;
}

MessageBox(NULL, p, "Notice", MB_OK);

delete pDS;
}


LDicomDS::GetJ2KOptions

#include "ltdic.h"

L_UINT16 LDicomDS::GetJ2KOptions(pOptions, nSize)

pFILEJ2KOPTIONS pOptions; | /* pointer to a structure */
L_INT nSize; | /* size of the structure */

Gets the JPEG 2000 compression options.

Parameter | Description
pOptions | Pointer to a structure to be updated with the JPEG 2000 compression options.
nSize | Size of the structure pointed to by pOptions.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetImage, LDicomDS::SetImageList, LDicomDS::SetJ2KOptions, LDicomDS::GetDefaultJ2KOptions
Topics: | Working with Data Sets
 | Implementing JPEG 2000 Plug in Features

Example

For an example, refer to LDicomDS::SetJ2KOptions.


LDicomDS::GetKeepPixelDataIntactFlag

#include "Ltdic.h"

L_BOOL LDicomDS::GetKeepPixelDataIntactFlag()

Returns a value that indicates whether image data will be pre-processed when a function that gets a bitmap from a Pixel Data element is called.

Returns

TRUE | The image data will not be pre-processed and will remain unchanged.
FALSE | The image data will be pre-processed.

Comments

When a function that gets a bitmap from a data set is called, such as LDicomDS::GetImage or LDicomDS::GetImageList, LEADTOOLS may pre-process the image data in the bitmap handle for optimal display. Call the GetKeepPixelDataIntactFlag function to determine whether LEADTOOLS will pre-process the image data. By default LEADTOOLS pre-processes the image data. To change the behavior, call LDicomDS::SetKeepPixelDataIntactFlag.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetKeepPixelDataIntactFlag, LDicomDS::GetImage, LDicomDS::GetImageList, Class Members
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetKeepPixelDataIntactFlag.


LDicomDS::GetLastElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetLastElement(pElement, bTree, bVolatile)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */
L_BOOL bVolatile; | /* flag that indicates the type of element to retrieve */

Returns a pointer to the last item in the Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set. A pointer to the DICOMELEMENT structure that contains the last item in the Data Set will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.
bVolatile | Flag that indicates the type of element to retrieve. Possible values are:
 | Value | Meaning
 | TRUE | Retrieve the last element, volatile or non-volatile.
 | FALSE | Retrieve the last non-volatile element.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the last item in the Data Set.
NULL | The Data Set is empty.

Comments

If the Data Set is evaluated as a tree structure, this function returns the last item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the Data Set is evaluated as a list, the last item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 30
Item 12 | Item 30
Item 14 | Item 30
Item 22 | Item 30
Item 25 | Item 30

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstElement

LDicomDS::GetPrevElement

LDicomDS::GetNextElement

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

A volatile element is an element that can be changed or destroyed in the process of inserting or setting an image. A non-volatile element is an element that must be changed manually. It is not changed or destroyed by inserting or setting an image.

For example, a grayscale image has elements TAG_SMALLEST_IMAGE_PIXEL_VALUE, TAG_LARGEST_IMAGE_PIXEL_VALUE, etc. If the image is changed to a color image, these elements disappear and the following elements appear: TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR, etc. These are volatile elements since they are changed or destroyed when an image is changed or set.

To retrieve the last element that must be changed manually, i.e. is not volatile, set bVolatile to FALSE. To retrieve the last element, either volatile or non-volatile, set bVolatile to TRUE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetPrevElement, LDicomDS::GetNextElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement, LDicomDS::IsVolatileElement
Topics: | Working with Data Sets

Example

/* This example displays the name of the last element in the current level */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pLast;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS(CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_RADIATION_SETTING, FALSE);
if (pElement != NULL)
{
pLast = pDS->GetLastElement(pElement, TRUE, FALSE);

pTag = LDicomTag::Find(pLast->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

MessageBox(NULL, p, "Notice", MB_OK);
}

delete pDS;
}

/* This example displays the name of the last element in the Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pLast;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_RADIATION_SETTING, FALSE);
if (pElement != NULL)
{
pLast = pDS->GetLastElement(pElement, FALSE, FALSE);

pTag = LDicomTag::Find(pLast->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

MessageBox(NULL, p, "Notice", MB_OK);
}

delete pDS;
}


LDicomDS::GetLastKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetLastKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the last item in the Dicom Dir Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set. A pointer to the DICOMELEMENT structure that contains the last item in the Data Set will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the last item in the Data Set.
NULL | The Data Set is empty.

Comments

If the Data Set is evaluated as a tree structure, this function returns the last item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the Data Set is evaluated as a list, the last item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 30
Item 12 | Item 30
Item 14 | Item 30
Item 22 | Item 30
Item 25 | Item 30

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstKey

LDicomDS::GetPrevKey

LDicomDS::GetNextKey

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetPrevKey, LDicomDS::GetNextKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetLayerCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerCount(pCount)

L_UINT * pCount;

/* pointer to a variable which will be updated with the layer count*/

Gets the number of the Graphic Layers.

Parameter | Description
pCount | Pointer to a variable which will be updated with the layer count.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will return the number of layers inside a DICOM dataset by counting the number of items under the "Graphic Layer Sequence" (0070,0060).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID DisplayNumberOfLayers(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_UINT uCount;
L_UINT16 nRet = PresStateDS.GetLayerCount(&uCount);
if (nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Number of layers in the Dataset is: %i", uCount);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerElementByIndex

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetLayerElementByIndex(uLayerIndex)

L_UINT uLayerIndex;

/* zero-based index of the graphic layer */

Gets the item element of the specified graphic layer.

Parameter | Description
uLayerIndex | Zero-based index of the graphic layer whose item element is to be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred. Refer to Return Codes.

Comments

This function gets the item element under the "Graphic Layer Sequence" (0070,0060), which corresponds, to the layer at the specified index.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetLayerElement(LDicomDS& PresStateDS, L_UINT uLayerIndex)
{
pDICOMELEMENT pElement = PresStateDS.GetLayerElementByIndex(uLayerIndex);
if (pElement)
{
MessageBox( NULL,
"Element item for this layer has been found.",
"Note",
MB_OK);
}
}


LDicomDS::GetLayerElementByName

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetLayerElementByName(pszLayerName)

L_CHAR* pszLayerName;

/* graphic layer name */

Gets the item element of the specified graphic layer.

Parameter | Description
pszLayerName | Name of the graphic layer whose item element is to be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred. Refer to Return Codes.

Comments

This function gets the item element under the "Graphic Layer Sequence" (0070,0060), which corresponds, to the layer with the specified name.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetLayerElement(LDicomDS& PresStateDS, L_CHAR* pszLayerName)
{
L_CHAR szText[256] = "\0";

pDICOMELEMENT pElement = PresStateDS.GetLayerElementByName(pszLayerName);
if (pElement)
{
MessageBox( NULL,
"Element item for this layer has been found.",
"Note",
MB_OK);
}
}


LDicomDS::GetLayerGraphicObjectCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerGraphicObjectCount(pGraphicAnnSQItem, pCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT * pCount; | /* pointer to a variable which will be updated with the Graphic object count */

Retrieves the number of graphical annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001).

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" 0008,1115) in the "Graphic Annotation Module".
pCount | Pointer to a variable that will be updated with the Graphic object count, which correspond to the specified item.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function retrieves the number of graphical annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0008,1115) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetGraphicObjectsCount(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_UINT uIndex;

L_UINT16 nRet = PresStateDS.GetLayerGraphicObjectCount( PresStateDS.FindFirstGraphicAnnSQItem(),
&uIndex);
if(nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Number of Graphical Objects in the sequence item is: %i", uIndex);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerImageRefCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerImageRefCount(pGraphicAnnSQItem, pCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT* pCount; | /* pointer to a variable which will be updated with the referenced image count */

Retrieves the number of referenced images, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001).

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pCount | Pointer to a variable tol be updated with the number of referenced images.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function retrieves the number of referenced images, which correspond to the specified item under the "Graphic Annotation Sequence" (0008,1115) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members, LDicomDS::GetLayerImageRefSOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID GetReferencedImageCount(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();

L_UINT uCount;
L_UINT16 nRet = PresStateDS. GetLayerImageRefCount (pGraphicAnnSQItem, & uCount);
if (nRet != DICOM_SUCCESS)
return;
if (uCount >= 0)
{
L_CHAR szText[256] = "\0";
wsprintf(szText, "Number of images is: %i", uCount);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerImageRefElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetLayerImageRefElement(pGraphicAnnSQItem, pszImageSOPInstance)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_CHAR* pszImageSOPInstance; | /* referenced image SOP instance UID */

Gets the item element of the specified SOP instance under the "Referenced Image Sequence" (0008,1140) in the specified "Graphic Annotation Sequence" (0070,0001) item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pszImageSOPInstance | SOP Instance UID of the image whose item element is to be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred. Refer to Return Codes.

Comments

This function retrieves the item element of the specified SOP instance under the "Referenced Image Sequence" (0008,1140) in the specified "Graphic Annotation Sequence" (0070,0001) item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, Class Members, LDicomDS::GetLayerImageRefSOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID GetImageElementInAnnSequence(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
L_CHAR* pszSOPInstanceUID = PresStateDS.GetPresStateImageRefSOPInstance(PresStateDS.FindFirstPresStateRefSeriesItem(),0);

pDICOMELEMENT pElement = PresStateDS.GetLayerImageRefElement (pGraphicAnnSQItem, pszSOPInstanceUID);
if (pElement)
{
MessageBox( NULL,
"Element item found.",
"Note",
MB_OK);
}
}


LDicomDS::GetLayerImageRefSOPInstance

#include "Ltdic.h"

L_CHAR *LDicomDS::GetLayerImageRefSOPInstance (pGraphicAnnSQItem, uImageIndex)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uImageIndex; | /* index of the required image*/

Returns the SOP Instance UID for a referenced image (SOP Instance) under the "Referenced Image Sequence" in a certain graphic annotation item inside the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0007,0001) in the "Graphic Annotation Module".
uImageIndex | Index of the image(SOP Instance).

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

This function will return the "SOP Instance UID" for a referenced image (SOP Instance) under the "Referenced Image Sequence" (0008,1140) in one of the items under the "Graphic Annotation Sequence" (0007,0001) in the "Graphic Annotation Module". Use this function along with LDicomDS::GetLayerImageRefCount in order to enumerate all the referenced images under a certain "Graphic Annotation Sequence" item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, Class Members, LDicomDS::GetLayerImageRefSOPInstance, LDicomDS::GetLayerImageRefElement
Topics: | Working with DICOM Annotations

Example

L_VOID GetFirstItemLastImageSOPInstance(LDicomDS& PresStateDS)
{
L_UINT uImageCount;
L_CHAR szText[250] = "\0";
pDICOMELEMENT pAnnSQItem = PresStateDS. FindFirstGraphicAnnSQItem ();
L_UINT16 nRet = PresStateDS.GetLayerImageRefCount(pAnnSQItem, &uImageCount);
if (nRet == DICOM_SUCCESS)
{
L_CHAR* pszInstanceUID = PresStateDS.GetLayerImageRefSOPInstance(pAnnSQItem, uImageCount - 1);
if (pszInstanceUID)
{
wsprintf(szText, "Image Referenced SOP Instance UID is: %s ", pszInstanceUID);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}
}


LDicomDS::GetLayerIndex

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerIndex(pszLayerName, pLayerIndex)

L_CHAR * pszLayerName; | /* layer name */
L_INT * pLayerIndex; | /* variable to be updated with the layer index */

Retrieves the index of the layer with the specified name.

Parameter | Description
pszLayerName | Name of the layer.
pLayerIndex | Variable to be updated with layer index

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID MyGetLayerIndex(LDicomDS& PresStateDS, L_CHAR* pszLayerName)
{
L_CHAR szText[256] = "\0";
L_INT uIndex;
L_UINT16 nRet = PresStateDS.GetLayerIndex(pszLayerName, &uIndex);
if(nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Index of the layer in the IOD is: %i", uIndex);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerInfo(uLayerIndex, pGraphicLayer, uStructSize)

L_UINT uLayerIndex; | /* zero-based index of the layer */
pDICOMGRAPHICLAYER pGraphicLayer; | /* pointer to a DICOMGRAPHICLAYER structure */
L_UINT uStructSize; | /* the size of the DICOMGRAPHICLAYER structure */

Retrieves the attributes of a layer at the specified index.

Parameter | Description
uLayerIndex | Zero-based index of the layer whose attributes are to be retrieved.
pGraphicLayer | Pointer to a structure which will be filled with the layer attributes.
uStructSize | Size of the DICOMGRAPHICLAYER structure. Pass sizeof(DICOMGRAPHICLAYER).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of a layer and store their values in the structure pointed to by pGraphicLayer.

pGraphicLayer->uStructSize will be set to the value of the parameter uStructSize.

The members of the structure pGraphicLayer are based on the "Graphic Layer Module Attributes" in the DICOM standard.

The index(uLayerIndex) is based on the number of items under the "Graphic Layer Sequence" (0070,0060), for example the index of the first item is zero.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetLayerInfo(LDicomDS& PresStateDS, L_UINT uLayerIndex)
{
DICOMGRAPHICLAYER Layer;
memset(&Layer, 0, sizeof(DICOMGRAPHICLAYER));
L_CHAR szText[256] = "\0";

L_UINT16 nRet = PresStateDS.GetLayerInfo(uLayerIndex, &Layer, sizeof(DICOMGRAPHICLAYER));
if (nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Layer Name is: %s", Layer.pszLayerName);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerName

#include "Ltdic.h"

L_CHAR * LDicomDS::GetLayerName(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Retrieves the value of the "Graphic Layer" element under one of the items under the "Graphic Annotation Sequence" in the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

!NULL | A pointer to a string.
NULL | An error occurred.

Comments

This function retrieves the value of the "Graphic Layer" element under one of the items under the "Graphic Annotation Sequence" in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::FindNextGraphicAnnSQItem, LDicomDS::SetLayerName, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers,LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID MyGetLayerName(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_CHAR* pszLayerName = PresStateDS.GetLayerName(PresStateDS.FindFirstGraphicAnnSQItem());
if(pszLayerName)
{
wsprintf(szText, "Layer name in the annotation sequence item is: %s", pszLayerName);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLayerTextObjectCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetLayerTextObjectCount(pGraphicAnnSQItem, pCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT* pCount; | /* pointer to a variable which will be updated with the Text object count */

Retrieves number of text annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001).

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pCount | pointer to a variable that will be updated with the Text object count, which correspond to the specified item.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function retrieves the number of text annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetTextObjectsCountInAnnItem(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_UINT uIndex;
L_UINT16 nRet = PresStateDS.GetLayerTextObjectCount (PresStateDS.FindFirstGraphicAnnSQItem(), &uIndex);
if (nRet == DICOM_SUCCESS)
{
wsprintf(szText, "Number of Graphical Objects in the annotation sequence item is: %i", uIndex);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetLevelElement

#include "Ltdic.h"

L_UINT32 LDicomDS::GetLevelElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a value that indicates the level at which the specified element is located within the Data Set.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.

Returns

The level at which the specified element is located within the Data Set.

Comments

This function requires that the Data Set is evaluated as a tree.

The following illustration gives an example:

If the passed pointer points to | The function returns
Item 1 | 0
Item 2 | 1
Item 3 | 2

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Working with Data Sets

Example

/* This example displays the level of an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
L_UINT32 nLevel;
L_CHAR szText[30];

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_RADIATION_SETTING, FALSE);
if (pElement != NULL)
{
nLevel = pDS->GetLevelElement(pElement);
wsprintf(szText, "%ld", nLevel);
MessageBox(NULL, szText, "Notice", MB_OK);
}

 delete pDS;
}


LDicomDS::GetLongValue

#include "Ltdic.h"

L_INT32 * LDicomDS::GetLongValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a long value, stored in the Value Field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a long value stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three long values, and you are only interested in retrieving the last two long values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the long values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_AT, VR_IS, VR_SL, or VR_UL. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetMacAlgorithm

#include "ltdic.h"

L_CHAR* LDicomDS::GetMacAlgorithm(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Returns the Message Authentication Code (MAC) Algorithm (0400,0015) used in the creation of the specified Digital Signature.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.

Returns

The MAC Algorithm (0400,0015) used in the creation of the specified Digital Signature. The return value can be NULL. Currently, the possible values are:

Value | Meaning
RIPEMD160 | The MAC Algorithm used is the RACE Integrity Primitives Evaluation (RIPEMD160) algorithm, a 160-bit cryptographic hash function.
SHA1 | The MAC Algorithm used is the Secure Hash Algorithm (SHA1), a 160-bit cryptographic hash function.
MD5 | The MAC Algorithm used is the Message Digest – 5 (MD5) algorithm, which takes as input a message of arbitrary length and produces a 128-bit "message digest".

Comments

The Digital Signatures Sequence Item of a Digital Signature should reference an Item under the MAC Parameters Sequence associated with the Digital Signatures Sequence. The MAC Algorithm (0400,0015) under the referenced MAC Parameters Sequence Item specifies the algorithm used in generating the Message Authentication Code (MAC). The encrypted MAC is the digital signature itself. You can use this function to obtain the value of this Data Element: the expected values are: "RIPEMD160", "SHA1", and "MD5".

In addition to this function, the following functions can be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetMacTransferSyntax

#include "ltdic.h"

L_CHAR* LDicomDS::GetMacTransferSyntax(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Returns the Message Authentication Code (MAC) Calculation Transfer Syntax UID (0400,0010) used in the creation of the specified Digital Signature.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.

Returns

The MAC Calculation Transfer Syntax UID (0400,0010) used in the creation of the specified Digital Signature. The return value can be NULL.

Comments

The Digital Signatures Sequence Item of a Digital Signature should reference an Item under the MAC Parameters Sequence associated with the Digital Signatures Sequence. The MAC Calculation Transfer Syntax UID (0400,0010) under the referenced MAC Parameters Sequence Item specifies the Transfer Syntax used in the calculation of the Message Authentication Code (MAC). The encrypted MAC is the digital signature itself. You can use this function to obtain the value of this Data Element.

If the Data Set was properly encoded, the return value will be a Transfer Syntax that explicitly includes the Value Representation (VR) and uses Little Endian encoding.

In addition to this function, the following functions can be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetModalityLUTAttributes

#include "ltdic.h"

L_UINT16 LDicomDS::GetModalityLUTAttributes(pModalityLUTAttributes, uStructSize, uFlags)

pDICOMMLUTATTRIBS pModalityLUTAttributes; | /* pointer to a structure */
L_UINT uStructSize; | /* size of a structure */
L_UINT uFlags; | /* reserved for future use */

Retrieves the attributes that describe the Modality LUT.

Parameter | Description
pModalityLUTAttributes | Pointer to a structure to be updated with the Modality LUT attributes.
uStructSize | Size of the DICOMMLUTATTRIBS structure. Pass sizeof(DICOMMLUTATTRIBS).
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of the "Modality LUT Module" and store their values in the structure pointed to by pModalityLUTAttributes.

pModalityLUTAttributes->uStructSize will be set to the value of the parameter uStructSize.

If the function doesn’t find any of the attributes of the "Modality LUT Module" it will set both pModalityLUTAttributes->bIsModalityLUTSequence and

pModalityLUTAttributes->bIsRescaleSlopeIntercept to FALSE. In this case the rest of the members of the pModalityLUTAttributes structure are undefined.

If the function finds the "Rescale Intercept" (0028,1052) and "Rescale Slope" (0028,1053) elements, it will set pModalityLUTAttributes->bIsRescaleSlopeIntercept to TRUE and populate pModalityLUTAttributes->RescaleIntercept, pModalityLUTAttributes->RescaleSlope and pModalityLUTAttributes->szRescaleType with the values retrieved from the DICOM dataset.

If the function finds "Modality LUT Sequence" (0028,3000), it will set pModalityLUTAttributes->bIsModalityLUTSequence to TRUE and populate pModalityLUTAttributes->LUTDescriptor, pModalityLUTAttributes->pszLUTExplanation and pModalityLUTAttributes->szModalityLUTType with the values retrieved from the DICOM dataset.

It is prohibited by the DICOM standard for both "Rescale Intercept" and "Modality LUT Sequence" to exist in the same DICOM dataset. However if this function encounters such a dataset, it will ignore "Modality LUT Sequence" and assume that only "Rescale Intercept" exists.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetModalityLUTData, LDicomDS::SetModalityLUT, LDicomDS::DeleteModalityLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Modality LUT

Example

For an example, refer to LDicomDS::GetModalityLUTData.


LDicomDS::GetModalityLUTData

#include "ltdic.h"

L_UINT16 LDicomDS::GetModalityLUTData(pLUTData, uDataSize, uFlags)

L_UINT16 *pLUTData; | /* pointer to the target buffer */
L_UINT uDataSize; | /* size of the target buffer */
L_UINT uFlags; | /* reserved for future use */

Retrieves "LUT Data" for a "Modality LUT Sequence".

Parameter | Description
pLUTData | Pointer to the buffer to be updated with the "LUT Data". You must allocate the buffer before calling this function, and the buffer must be large enough to hold the "LUT Data".
uDataSize | Size of the buffer pointed to by pLUTData.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the "LUT Data" (0028,3006) under the "Modality LUT Sequence" (0028,3000).

Before calling this function you must call LDicomDS::GetModalityLUTAttributes and check the pModalityLUTAttributes->bIsModalityLUTSequence flag to see if a "Modality LUT Sequence" exists in the DICOM dataset or not. If the sequence exists, then you must allocate a buffer with a size greater or equal to pModalityLUTAttributes->LUTDescriptor.uNumberOfEntries and then call this function to retrieve the LUT data.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetModalityLUTAttributes, LDicomDS::SetModalityLUT, LDicomDS::DeleteModalityLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Modality LUT

Example

// This example will retrieve the LUT Data (0028,3006)
// under the Modality LUT Sequence (0028,3000)
L_UINT16 MyGetModalityLUTData
(
LDicomDS * pDS,//Input dataset
L_UINT16 * pLUTDataBuffer,//Buffer which will hold the data
L_UINT uInputBufferSize//Buffer size
)
{
// Structure that will hold modality LUT attributes
DICOMMLUTATTRIBS ModalityLUTAttributes= {0};
L_UINT16 uRet;

// Sanity Check
if((pDS == NULL)||
(pLUTDataBuffer== NULL))
{
return DICOM_ERROR_NULL_PTR;
}
if(uInputBufferSize == 0)
{
return DICOM_ERROR_PARAMETER;
}
memset(pLUTDataBuffer,0,uInputBufferSize);
// Get modality LUT attributes
uRet = pDS->GetModalityLUTAttributes ( &ModalityLUTAttributes,
sizeof(DICOMMLUTATTRIBS),
0);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
// If there is no modality LUT sequence
// then there is no data !
if(!ModalityLUTAttributes.bIsModalityLUTSequence)
{
return DICOM_ERROR_MODALITY_LUT_MISSING;
}
// The buffer should be big enough to hold the data!
if(!(uInputBufferSize >= ModalityLUTAttributes.LUTDescriptor.uNumberOfEntries))
{
return DICOM_ERROR_PARAMETER;
}
// Retrieve the LUT Data (0028,3006)
return pDS->GetModalityLUTData (pLUTDataBuffer,uInputBufferSize,0);
}


LDicomDS::GetNextElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetNextElement(pElement, bTree, bVolatile)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */
L_BOOL bVolatile; | /* flag that indicates the type of element to retrieve */

Returns a pointer to the item in the Data Set that immediately follows the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set. A pointer to the item in the Data Set that immediately follows this item will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.
bVolatile | Flag that indicates the type of element to retrieve. Possible values are:
 | Value | Meaning
 | TRUE | Retrieve the next element, volatile or non-volatile.
 | FALSE | Retrieve the next non-volatile element.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that immediately follows the item specified in pElement.
NULL | There is not an item following pElement. (pElement is the last item in the Data Set.)

Comments

If the Data Set is evaluated as a tree structure, this function returns the next item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the Data Set is evaluated as a list, the next item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 14 | Item 15
Item 4 | Item 5
Item 8 | Item 9
Item 19 | Item 20
Item 27 | Item 28
Item 30 | NULL

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstElement

LDicomDS::GetPrevElement

LDicomDS::GetLastElement

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

A volatile element is an element that can be changed or destroyed in the process of inserting or setting an image. A non-volatile element is an element that must be changed manually. It is not changed or destroyed by inserting or setting an image.

For example, a grayscale image has elements TAG_SMALLEST_IMAGE_PIXEL_VALUE, TAG_LARGEST_IMAGE_PIXEL_VALUE, etc. If the image is changed to a color image, these elements disappear and the following elements appear: TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR, etc. These are volatile elements since they are changed or destroyed when an image is changed or set.

To retrieve the next element that must be changed manually, i.e. is not volatile, set bVolatile to FALSE. To retrieve the next element, either volatile or non-volatile, set bVolatile to TRUE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetPrevElement, LDicomDS::GetLastElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement, LDicomDS::IsVolatileElement
Topics: | Working with Data Sets

Example

/* This example displays in a list-box control all elements (level 0) from the Data Set */

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->GetFirstElement(NULL, TRUE, FALSE);
while (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

pDlg->AddString(p);

pElement = pDS->GetNextElement(pElement, TRUE, FALSE);
}

 delete pDS;
}


LDicomDS::GetNextKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetNextKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the item in the Dicom Dir Data Set that immediately follows the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set. A pointer to the item in the Data Set that immediately follows this item will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that immediately follows the item specified in pElement.
NULL | There is not an item following pElement. (pElement is the last item in the Data Set.)

Comments

If the Data Set is evaluated as a tree structure, this function returns the next item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the Data Set is evaluated as a list, the next item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 14 | Item 15
Item 4 | Item 5
Item 8 | Item 9
Item 19 | Item 20
Item 27 | Item 28
Item 30 | NULL

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstKey

LDicomDS::GetPrevKey

LDicomDS::GetLastKey

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetPrevKey, LDicomDS::GetLastKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetOverlayActivationLayer

#include "ltdic.h"

L_UINT16 LDicomDS::GetOverlayActivationLayer(uOverlayIndex,pActivationLayer,uLength)

L_UINT uOverlayIndex; | /* index */
L_CHAR * pActivationLayer; | /* pointer to a buffer */
L_UINT uLength; | /* size of the input buffer */

Retrieves the "Overlay Activation Layer".

Parameter | Description
uOverlayIndex | The index of the overlay for which to get the "Activation Layer". This index is zero-based.
pActivationLayer | Pointer to the buffer to be updated with the "Activation Layer" string. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character.
uLength | Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the "Activation Layer" string exceeds this limit, it is truncated.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function copies the string which represents the "Overlay Activation Layer" (60xx,1001) into the buffer pointed to by pActivationLayer.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

For an example, refer to LDicomDS::GetOverlayBitmapList.


LDicomDS::GetOverlayAttributes

#include "ltdic.h"

L_UINT16 LDicomDS::GetOverlayAttributes(uOverlayIndex, pOverlayAttributes,uStructSize, pGroupNumber, pIsOverlayInDataset, uFlags)

L_UINT uOverlayIndex; | /* index */
pOVERLAYATTRIBUTES pOverlayAttributes; | /* pointer to a structure */
L_UINT uStructSize; | /* size of a structure */
L_INT * pGroupNumber; | /* group number */
L_BOOL * pIsOverlayInDataset; | /* pointer to a variable */
L_UINT uFlags; | /* reserved for future use */

Retrieves the attributes of the overlay at the specified index.

Parameter | Description
uOverlayIndex | The index of the overlay for which to get the attributes.
pOverlayAttributes | Pointer to a structure to be updated with the overlay attributes.
uStructSize | Size of the OVERLAYATTRIBUTES structure. Pass sizeof(OVERLAYATTRIBUTES).
pGroupNumber | Pointer to a variable to be updated with the group number for this overlay.
pIsOverlayInDataset | Pointer to a variable to be set to TRUE if the overlay data exists inside this dataset and set to FALSE if the if the overlay data is in another dataset.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of an overlay and store their values in the structure pointed to by pOverlayAttributes.

pOverlayAttributes->uStructSize will be set to the value of the parameter uStructSize.

Most of the members of the structure pOverlayAttributes are based on the "Overlay Plane Module Attributes" in the DICOM standard.

If the overlay data is embedded in the "Image Pixel Data" (7FE0,0010), the flag OVERLAY_USEBITPLANE will be set inside pOverlayAttributes-> uFlags. If this flag is not set then the overlay data is stored in the "Overlay Data" (60xx,3000) element and in this case you can call LDicomDS::GetOverlayBitmap to get the data for that overlay.

pOverlayAttributes-> ptOrigin will hold the value of the "Overlay Origin" (60xx,0050) element, however the upper left pixel of the image will have the coordinate 0\0, instead of 1\1( as in the DICOM standard).

This function will always set pOverlayAttributes->crColor to black.

For multi-frame overlays, this function will update pOverlayAttributes->nNumFramesInOverlay with the value of "Number of Frames in Overlay" (60xx,0015) element and pOverlayAttributes-> uImageFrameOrigin with the value of "Image Frame Origin" (60xx,0051) element.

pOverlayAttributes-> szActivationLayer will be updated with the value of the element "Overlay Activation Layer" (60xx,1001)

Because DICOM uses "Repeating Groups" to represent multiple overlays, pGroupNumber is useful in knowing under which group number this overlay exists.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

For an example, refer to LDicomDS::GetOverlayBitmap.


LDicomDS::GetOverlayBitmap

#include "ltdic.h"

L_UINT16 LDicomDS::GetOverlayBitmap(uOverlayIndex,pBitmap,uStructSize,uFlags)

L_UINT uOverlayIndex; | /* index */
pBITMAPHANDLE pBitmap; | /* pointer to the overlay bitmap handle */
L_UINT uStructSize; | /* size of a structure */
L_UINT uFlags; | /* reserved for future use */

Retrieves the "Overlay Data" (60xx,3000) for the specified overlay index.

Parameter | Description
uOverlayIndex | The index of the overlay for which to get the bitmap. This index is zero-based.
pBitmap | Pointer to a bitmap handle which will be filled with the overlay data. Cannot be NULL.
uStructSize | Size of the BITMAPHANDLE structure. Pass sizeof(BITMAPHANDLE).
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will extract the "Overlay Data" (60xx,3000) for an overlay, initialize and allocate pBitmap based on the "Overlay Columns" (60xx,0011) and "Overlay Rows"(60xx,0010), and then fill pBitmap with the stream of bytes under the "Overlay Data" (60xx,3000) element. Please note that pBitmap is assumed to be unallocated and un-initialized. It will be filled without freeing the existing data.

If the function doesn’t find the "Overlay Data" element inside the dataset it will return DICOM_ERROR_OVERLAY_DATA_MISSING.

Before calling this function you must call LDicomDS::GetOverlayAttributes to determine if the overlay pixel data is embedded in the "Image Pixel Data" (7FE0,0010) element or is under "Overlay Data" (60xx,3000) element. If the overlay data is embedded in the "Image Pixel Data", the flag OVERLAY_USEBITPLANE will be set inside pOverlayAttributes->uFlags (pOverlayAttributes is the OVERLAYATTRIBUTES structure returned by the LDicomDS::GetOverlayAttributes function).

If the overlay pixel data is embedded in the "Image Pixel Data" (7FE0, 0010), follow these steps to get the overlay data as a bitmap handle:

1. | Call one of the functions which can be used to extract the "Image Pixel Data", such as LDicomDS::GetImage. This will return a bitmap handle populated with the "Image Pixel Data" which has the overlay data embedded. For this example, assume that the bitmap handle returned by this function is called pMainBitmap.
2. | Call LDicomDS::GetOverlayAttributes to get the attributes of the overlay. For this example, assume that the OVERLAYATTRIBUTES structure returned by this function is called pOverlayAttributes.
3. | Now we need to add our overlay as one of the overlays associated with pMainBitmap. To do that we need to call LDicomDS::SetOverlayAttributes:
 | LBitmap::SetOverlayAttributes (pMainBitmap,0,pOverlayAttributes, OVERLAYATTRIBUTES_FLAGS | OVERLAYATTRIBUTES_BITINDEX |OVERLAYATTRIBUTES_ORIGIN |OVERLAYATTRIBUTES_DICOM | OVERLAYATTRIBUTES_COLOR);
 | We are assuming that this is the first overlay in the bitmap this is why we are passing 0 as the overlay index.
4. | Now we need to extract the overlay data from the main image data:
 | LBitmap::UpdateOverlayBits (pMainBitmap,0, SETOVERLAYBITS_FROMBITMAP)
5. | Now call LBitmap::GetOverlay to get the overlay data itself as a bitmap handle.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

// This example will extract the overlays from a
// DICOM dataset and associate them with a bitmap,
// the bitmap is assumed to be extracted from the
// same DICOM dataset.
L_UINT16 LoadOverlaysIntoBitmap
(
LDicomDS &InDS ,// Input dataset
pBITMAPHANDLE pBitmap ,// Bitmap which will be associated with
// the overlays, note this should be a
// valid bitmap loaded from the same DICOM
// dataset where the overlays exist.
L_UINT uStructSize // pass sizeof(BITMAPHANDLE)
)
{
L_UINT16 uRet;
L_UINT uOverlayCount;
L_UINT uOverlayIndex;
OVERLAYATTRIBUTES OverlayAttributes = {0};
L_INT GroupNumber=0;
L_BOOL IsOverlayInDataset = FALSE;
L_INT nLEADRet;
L_UINT uLEADOverlayIndex;
BITMAPHANDLE OverlayBitmap = {0};

//(1)Sanity Check !
if(NULL == pBitmap)
{
return DICOM_ERROR_NULL_PTR;
}
DICOM_CHECK_SIZE2(pBitmap,uStructSize);
uOverlayCount =0;
//(2)Do we have any overlays at all
uRet = InDS.GetOverlayCount (&uOverlayCount);
if( (DICOM_SUCCESS !=uRet) || (0 == uOverlayCount) )
{
return DICOM_SUCCESS;
}
//(3)Go through the overlays one by one
uOverlayIndex = 0;
uLEADOverlayIndex = 0;
while(uOverlayIndex < uOverlayCount)
{
// Reset the overlay attributes structure
memset(&OverlayAttributes,0,sizeof(OverlayAttributes));
GroupNumber = 0;
IsOverlayInDataset = FALSE;
// Reset the overlay bitmap
L_InitBitmap( &OverlayBitmap,
sizeof(OverlayBitmap),
1,
1,
1);
// Get the attributes of this overlay
uRet = InDS.GetOverlayAttributes ( uOverlayIndex,
&OverlayAttributes,
sizeof(OverlayAttributes),
&GroupNumber,
&IsOverlayInDataset,0);
if(DICOM_SUCCESS !=uRet)
{
return uRet;
}
if(!IsOverlayInDataset)
{
uOverlayIndex++;
continue;
}
// Auto paint and process overlays
OverlayAttributes.uFlags |= OVERLAY_AUTOPAINT |
OVERLAY_AUTOPROCESS ;
OverlayAttributes.crColor = RGB(0xFF,0xFF,0xFF);
// Is the overlay embedded inside the image data ?
if(OverlayAttributes.uFlags & OVERLAY_USEBITPLANE)
{
// Add this overlay to the list of overlays
// in the bitmap handle
nLEADRet = L_SetOverlayAttributes( pBitmap,
uLEADOverlayIndex,
&OverlayAttributes,
OVERLAYATTRIBUTES_FLAGS |
OVERLAYATTRIBUTES_BITINDEX |
OVERLAYATTRIBUTES_ORIGIN |
OVERLAYATTRIBUTES_DICOM |
OVERLAYATTRIBUTES_COLOR);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_MEMORY;
}
// Make sure to extract the overlay data from the image data
nLEADRet = L_UpdateBitmapOverlayBits( pBitmap,
uLEADOverlayIndex,
SETOVERLAYBITS_FROMBITMAP);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_MEMORY;
}
}
// The overlay is inside overlay data
else
{
// Add this overlay to the list of overlays
// in the bitmap handle
nLEADRet = L_SetOverlayAttributes( pBitmap,
uLEADOverlayIndex,
&OverlayAttributes,
OVERLAYATTRIBUTES_FLAGS |
OVERLAYATTRIBUTES_ORIGIN |
OVERLAYATTRIBUTES_DICOM |
OVERLAYATTRIBUTES_COLOR);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_MEMORY;
}
// Get the overlay bitmap from the overlay data
uRet = InDS.GetOverlayBitmap (uOverlayIndex,&OverlayBitmap,sizeof(OverlayBitmap),0);
if(DICOM_SUCCESS !=uRet)
{
return uRet;
}
// Set the bitmap for this overlay inside the
// list of overlays we have in the bitmap handle
nLEADRet = L_SetOverlayBitmap( pBitmap,
uLEADOverlayIndex,
&OverlayBitmap,
OVERLAY_MOVE);
if(SUCCESS != nLEADRet)
{
if(OverlayBitmap.Flags.Allocated)
{
L_FreeBitmap(&OverlayBitmap);
memset(&OverlayBitmap,0,sizeof(OverlayBitmap));
}
return DICOM_ERROR_MEMORY;
}
memset(&OverlayBitmap,0,sizeof(OverlayBitmap));
}
uOverlayIndex++;
uLEADOverlayIndex++;
}
return DICOM_SUCCESS;
}


LDicomDS::GetOverlayBitmapList

#include "ltdic.h"

L_UINT16 LDicomDS::GetOverlayBitmapList (uOverlayIndex,hList,uOverlayFrameIndex,uCount,uFlags)

L_UINT uOverlayIndex; | /* index */
HBITMAPLIST hList; | /* handle */
L_UINT32 uOverlayFrameIndex; | /* position of the first frame */
L_UINT32 uCount; | /* number of frames */
L_UINT uFlags; | /* reserved for future use */

Loads the bitmap list with frames from the "Overlay Data" (60xx, 3000) element.

Parameter | Description
uOverlayIndex | The index of the overlay for which to get the frames. This index is zero-based.
hList | Handle to the list of bitmaps.
uOverlayFrameIndex | Position of the first frame to be loaded. Use zero-based indexing. For example, if there are 5 bitmaps in a list, the index of the last one is 4.
uCount | Number of frames to load into the bitmap list.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function you must call LDicomDS::GetOverlayAttributes. The nNumFramesInOverlay member of the OVERLAYATTRIBUTES structure will be updated with the number of frames under an overlay.

As an example, if you wish to load 5 frames starting with the 1st frame in the "Overlay Data", call this function with uOverlayFrameIndex set to 0 and uCount set to 5.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

//This function will load frames of an overlay into a bitmap list
L_UINT16 MyGetOverlayBitmapList
(
LDicomDS &InDS,// Input dataset
HBITMAPLIST hList,//Bitmap list to be populated
L_CHAR *pActivationLayer,//Retrieve activation layer if needed
L_UINT uLength//Length of input buffer
)
{
L_UINT16 uRet;
OVERLAYATTRIBUTES OverlayAttributes = {0};
L_INT GroupNumber=0;
L_BOOL IsOverlayInDataset = FALSE;

//(1)Sanity Check !
if(hList == NULL)
{
return DICOM_ERROR_NULL_PTR;
}
// Get activation layer
if(pActivationLayer && uLength)
{
InDS.GetOverlayActivationLayer (0,pActivationLayer,uLength);
}
uRet = InDS.GetOverlayAttributes ( 0,
&OverlayAttributes,
sizeof(OverlayAttributes),
&GroupNumber,
&IsOverlayInDataset,
0);
if(DICOM_SUCCESS !=uRet)
{
return uRet;
}
return InDS.GetOverlayBitmapList (0,
hList,
0,
OverlayAttributes.nNumFramesInOverlay,
0);
}


LDicomDS::GetOverlayCount

#include "ltdic.h"

L_UINT16 LDicomDS::GetOverlayCount(pCount)

L_UINT * pCount;

/* pointer to a variable */

Gets the number of overlays in the DICOM dataset.

Parameter | Description
pCount | Pointer to a variable to be updated with the overlay count.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will return the number of overlays inside a DICOM dataset by counting the number of repeating groups in the range (6000-601E).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

For an example, refer to LDicomDS::GetOverlayBitmapList.


LDicomDS::GetPaletteColorLUTAttributes

#include "ltdic.h"

L_UINT16 LDicomDS::GetPaletteColorLUTAttributes (pPaletteColorLUTAttributes, uStructSize, uFlags)

pDICOMPALCOLORLUTATTRIBS pPaletteColorLUTAttributes; | /* pointer to a structure */
L_UINT uStructSize; | /* size of a structure */
L_UINT uFlags; | /* reserved for future use */

Retrieves the attributes that describe "Palette Color Lookup Table".

Parameter | Description
pPaletteColorLUTAttributes | Pointer to a structure to be updated with the "Palette Color Lookup Table" attributes.
uStructSize | Size of the DICOMPALCOLORLUTATTRIBS structure. Pass sizeof(DICOMPALCOLORLUTATTRIBS).
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of the "Palette Color Lookup Table" and store their values in the structure pointed to by pPaletteColorLUTAttributes.

pPaletteColorLUTAttributes ->uStructSize will be set to the value of the parameter uStructSize.

The function will fail and return DICOM_ERROR_LUT_DESCRIPTOR_MISSING if any of the following elements are missing from the DICOM dataset:

"Red Palette Color Lookup Table Descriptor" (0028,1101)," Green Palette Color Lookup Table Descriptor" (0028,1102) or "Blue Palette Color Lookup Table Descriptor" (0028,1103).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPaletteColorLUTData, LDicomDS::SetPaletteColorLUTAttributes, LDicomDS::SetPaletteColorLUTData, LDicomDS::DeletePaletteColorLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Palette Color Table

Example

For an example, refer to LDicomDS::GetPaletteColorLUTData.


LDicomDS::GetPaletteColorLUTData

#include "ltdic.h"

L_UINT16 LDicomDS::GetPaletteColorLUTData(pLUTData, uDataSize, PaletteColorLUTType, uFlags)

L_UINT16 * pLUTData; | /* pointer to the target buffer */
L_UINT uDataSize; | /* size of the target buffer */
DICOMPALETTECOLORLUTTYPE PaletteColorLUTType; | /* type of palette color lookup table */
L_UINT uFlags; | /* reserved for future use */

Retrieves red, green or blue "Palette Color Lookup Table Data".

Parameter | Description
pLUTData | Pointer to the buffer to be updated with the "Palette Color Lookup Table Data".
 | You must allocate the buffer before calling this function, and the buffer must be large enough to hold the "Palette Color Lookup Table Data".
uDataSize | Size of the buffer pointed to by pLUTData.
PaletteColorLUTType | Type of palette color lookup table to data to get. The following are possible values:
 | Value | Meaning
 | DICOMPALETTECOLORLUTTYPE_RED | Retrieve "Red Palette Color Lookup Table Data" (0028,1201)
 | DICOMPALETTECOLORLUTTYPE_GREEN | Retrieve "Green Palette Color Lookup Table Data" (0028,1202)
 | DICOMPALETTECOLORLUTTYPE_BLUE | Retrieve "Blue Color Lookup Table Data" (0028,1203)
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the data for the "Red", "Green" or "Blue" "Palette Color Lookup Table".

If the data is segmented, then this function will decode the data before coping it to the buffer pointed to by pLUTData.

Before calling this function you will need to call LDicomDS::GetPaletteColorLUTAttributes to see if a "Palette Color Lookup Table" exists in the DICOM dataset. If you are trying to retrieve the "Red Palette Color Lookup Table Data" you must allocate a buffer with a size greater or equal to pPaletteColorLUTAttributes->RedLUTDescriptor.uNumberOfEntries, where pPaletteColorLUTAttributes is the "Palette Color Lookup Table" attributes" structure returned by the LDicomDS::GetPaletteColorLUTAttributes function. If you are trying to retrieve the "Green Palette Color Lookup Table Data" you must allocate a buffer with a size greater or equal to pPaletteColorLUTAttributes-> GreenLUTDescriptor.uNumberOfEntries. And, if you are trying to retrieve the "Blue Palette Color Lookup Table Data" you must allocate a buffer with a size greater or equal to pPaletteColorLUTAttributes->BlueLUTDescriptor.uNumberOfEntries.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPaletteColorLUTAttributes, LDicomDS::SetPaletteColorLUTAttributes, LDicomDS::SetPaletteColorLUTData, LDicomDS::DeletePaletteColorLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Palette Color Table

Example

// This example will retrieve the data under
// "Red Palette Color Lookup Table Data"(0028,1201)
// element and if the data is segmented it will get the data under
// "Segmented Red Palette Color Lookup Table Data" (0028,1221) and decode it
L_UINT16 MyGetRedPaletteColorLUTData
(
LDicomDS &InDS,//Input dataset
L_UINT16 * pLUTDataBuffer,//Buffer which will hold the data
L_UINT uInputBufferSize//Buffer size
)
{
// Structure that will hold Palette Color LUT attributes
DICOMPALCOLORLUTATTRIBS PaletteColorLUTAttributes = {0};
L_UINT16 uRet;

// Sanity Check
if(pLUTDataBuffer== NULL)
{
return DICOM_ERROR_NULL_PTR;
}
if(uInputBufferSize == 0)
{
return DICOM_ERROR_PARAMETER;
}
memset(pLUTDataBuffer,0,uInputBufferSize);
// Get "Palette Color Lookup Table" attributes
uRet = InDS.GetPaletteColorLUTAttributes ( &PaletteColorLUTAttributes,
sizeof(DICOMPALCOLORLUTATTRIBS),
0);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
// The buffer should be big enough to hold the data!
if(!(uInputBufferSize >= PaletteColorLUTAttributes.RedLUTDescriptor.uNumberOfEntries))
{
return DICOM_ERROR_PARAMETER;
}
// Retrieve "Red Palette Color Lookup Table Data"
// This function will automatically decode the LUT data
// if it was segmented
return InDS.GetPaletteColorLUTData ( pLUTDataBuffer,
uInputBufferSize,
DICOMPALETTECOLORLUTTYPE_RED,
0);
}


LDicomDS::GetParentElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetParentElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the item in the Data Set that contains the parent of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the parent of the item specified in pElement.
NULL | pElement has no parent. (pElement is a Level 0 item.)

Comments

The parent is the ancestor one level higher than the specified item. If the specified item is a Level 0 item, this function will return NULL. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item3
Item 5 | Item 6

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetNextElement

LDicomDS::GetRootElement

LDicomDS::GetChildElement

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetNextElement, LDicomDS::GetPrevElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetChildElement
Topics: | Working with Data Sets

Example

/* This example displays the parent’s name of an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pParent;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_RADIATION_SETTING, FALSE);
if (pElement != NULL)
{
pParent = pDS->GetParentElement(pElement);
if (pParent != NULL)
{
pTag = LDicomTag::Find(pParent->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

MessageBox(NULL, p, "Notice", MB_OK);
}
}

delete pDS;
}


LDicomDS::GetParentKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetParentKey(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the item in the Dicom Dir Data Set that contains the parent of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the parent of the item specified in pElement.
NULL | pElement has no parent. (pElement is a Level 0 item.)

Comments

The parent is the ancestor one level higher than the specified item. If the specified item is a Level 0 item, this function will return NULL. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item3
Item 5 | Item 6

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetNextKey

LDicomDS::GetRootKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetLastKey, LDicomDS::GetNextKey, LDicomDS::GetPrevKey, LDicomDS::GetRootKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetPreamble

#include "Ltdic.h"

L_VOID LDicomDS::GetPreamble(pPreamble, nLength)

L_CHAR * pPreamble; | /* character string */
L_UINT16 nLength; | /* length of pPreamble */

Gets the contents of the file’s preamble.

Parameter | Description
pPreamble | Character string to be updated with the contents of the preamble.
nLength | Length of pPreamble, in bytes. The maximum length is DS_PREAMBLE_LENGTH, which is defined as 128.

Returns

None.

Comments

To set the Preamble use LDicomDS::SetPreamble.

If the value specified in nLength is >= DS_PREAMBLE_LENGTH, then pPreamble will be updated with the entire Preamble. If nLength is < DS_PREAMBLE_LENGTH, then pPreamble will be updated with a truncated version of the Preamble with length nLength.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetInfoDS, LDicomDS::GetCountValue
Topics: | Working with Data Sets

Example

/* This example gets the default preamble */

L_VOID Test()
{
LDicomDS *pDS;
L_CHAR szPreamble[DS_PREAMBLE_LENGTH];

pDS = new LDicomDS(NULL);

pDS->GetPreamble(szPreamble, sizeof(szPreamble));

delete pDS;
}


LDicomDS::GetPresStateImageRefBySOPInstance

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetPresStateImageRefBySOPInstance(pszSOPInstanceUID)

L_CHAR * pszSOPInstanceUID;

/* SOP Instance UID of the image */

Returns a pointer to the item element, which represents a referenced image (SOP Instance) under the "Referenced Image Sequence" in the "Presentation State Module".

Parameter | Description
pszSOPInstanceUID | SOP Instance UID of the image whose item element will be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

This function will return a pointer to the item element, which represents a referenced image (SOP Instance) under the "Referenced Image Sequence" in the "Presentation State Module". A NULL pointer will be returned if the item could not be found.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetImageBySOPInstance(LDicomDS& PresStateDS, L_CHAR* pszSOPInstanceUID)
{
L_CHAR szText[256] = "\0";
pDICOMELEMENT pElement = PresStateDS. GetPresStateImageRefBySOPInstance(pszSOPInstanceUID);
if (pElement)
{
pElement = PresStateDS.GetChildElement(pElement, TRUE);
if (pElement)
{
pElement = PresStateDS.FindFirstElement(pElement, TAG_REFERENCED_SOP_CLASS_UID, TRUE);
L_CHAR* pszClassUID = PresStateDS.GetStringValue(pElement, 0, 1);
if (pszClassUID)
{
wsprintf(szText, "Image Referenced SOP class UID is: %s ", pszClassUID);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}
}
}


LDicomDS::GetPresStateImageRefCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetPresStateImageRefCount(pRefSeriesSQItem, pCount)

pDICOMELEMENT pRefSeriesSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT * pCount; | /* address of the variable to be updated */

Retrieves number of images (SOP Instances) that are referenced in an item under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".

Parameter | Description
pRefSeriesSQItem | Pointer to an item element under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".
pCount | Pointer to a variable which will be updated with the number of referenced images.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will return the number of images (SOP Instances) under the "Referenced Image Sequence" (0008,1115) in one of the items under "Referenced Series Sequence" (0008,1115) in the "Presentation State Module". Use this function along with LDicomDS::GetPresStateImageRefSOPInstance in order to enumerate all the referenced images under the specified "Referenced Image Sequence".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance, Class Members
Topics: | Working with DICOM Annotations

Example

For an example, refer to LDicomDS::GetPresStateImageRefSOPInstance.


LDicomDS::GetPresStateImageRefSOPInstance

#include "Ltdic.h"

L_CHAR* LDicomDS::GetPresStateImageRefSOPInstance(pRefSeriesSQItem, uImageIndex)

pDICOMELEMENT pRefSeriesSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uImageIndex; | /* index of the required image */

Returns the SOP Instance UID for a referenced image (SOP Instance) under the "Referenced Image Sequence" in the "Presentation State Module".

Parameter | Description
pRefSeriesSQItem | Pointer to an item element under the "Referenced Series Sequence" (0008,1115) in the "Presentation State Module".
uImageIndex | Index of the image(SOP Instance).

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

This function will return the "SOP Instance UID" for a referenced image (SOP Instance) under the "Referenced Image Sequence" (0008,1115) in one of the items under "Referenced Series Sequence" (0008,1115) in the "Presentation State Module". Use this function along with LDicomDS::GetPresStateImageRefCount in order to enumerate all the referenced images under the specified "Referenced Image Sequence".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetFirstItemLastImageSOPInstance(LDicomDS& PresStateDS)
{
L_UINT uImageCount;
L_CHAR szText[250] = "\0";
pDICOMELEMENT pSeriesSQItem = PresStateDS.FindFirstPresStateRefSeriesItem();
L_UINT16 nRet = PresStateDS.GetPresStateImageRefCount(pSeriesSQItem, &uImageCount);
if (nRet == DICOM_SUCCESS)
{
L_CHAR* pszInstanceUID = PresStateDS.GetPresStateImageRefSOPInstance(pSeriesSQItem, uImageCount - 1);
if (pszInstanceUID)
{
wsprintf(szText, "Image Referenced SOP Instance UID is: %s ", pszInstanceUID);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}
}


LDicomDS::GetPresStateInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::GetPresStateInfo(pPresState, uStructSize)

p DICOMPRESSTATEINFO pPresState; | /* pointer to a presentation state attributes structure */
L_UINT uStructSize; | /* size of the DICOMPRESSTATEINFO structure */

Retrieves the attributes of the "Presentation State Module".

Parameter | Description
pPresState | Pointer to a structure which will be filled with the "Presentation State Module" attributes.
uStructSize | Size of the DICOMPRESSTATEINFO structure. Pass sizeof(DICOMPRESSTATEINFO).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of the "Presentation State Module" and store their values in the structure pointed to by pPresState.

pPresState->uStructSize will be set to the value of the parameter uStructSize.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID GetPresentationStateValues(LDicomDS& PresStateDS)
{
DICOMPRESSTATEINFO PresState;

L_UINT16 nRet = PresStateDS.GetPresStateInfo(&PresState, sizeof(DICOMPRESSTATEINFO));
if (nRet == DICOM_SUCCESS)
{
L_CHAR szText[256] = "\0";
if(PresState.pszPresDescription)
{
wsprintf(szText,
"Presentation State description is: %s ",
PresState.pszPresDescription);
}
else
{
wsprintf(szText, "Presentation State description is missing");
}
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetPrevElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetPrevElement(pElement, bTree, bVolatile)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */
L_BOOL bVolatile; | /* flag that indicates the type of element to retrieve */

Returns a pointer to the item in the Data Set that immediately precedes the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENTstructure that contains an item in the Data Set. A pointer to the item in the Data Set that immediately precedes this item will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.
bVolatile | Flag that indicates the type of element to retrieve. Possible values are:
 | Value | Meaning
 | TRUE | Retrieve any previous element, volatile or non-volatile.
 | FALSE | Retrieve a non-volatile previous element.

Returns

!NULL | A pointer to a DICOMELEMENTstructure that contains the item in the Data Set that immediately precedes the item specified in pElement.
NULL | There is not an item preceding pElement. (pElement is the first item in the Data Set.)

Comments

If the Data Set is evaluated as a tree structure, this function returns the previous item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the Data Set is evaluated as a list, the previous item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 15 | Item 14
Item 5 | Item 4
Item 9 | Item 8
Item 22 | Item 21
Item 25 | Item 24

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetNextElement

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

A volatile element is an element that can be changed or destroyed in the process of inserting or setting an image. A non-volatile element is an element that must be changed manually. It is not changed or destroyed by inserting or setting an image.

For example, a grayscale image has elements TAG_SMALLEST_IMAGE_PIXEL_VALUE, TAG_LARGEST_IMAGE_PIXEL_VALUE, etc. If the image is changed to a color image, these elements disappear and the following elements appear: TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR, etc. These are volatile elements since they are changed or destroyed when an image is changed or set.

To retrieve a previous element that must be changed manually, i.e. is not volatile, set bVolatile to FALSE. To retrieve either volatile or non-volatile previous element, set bVolatile to TRUE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetPrevElement, LDicomDS::GetNextElement, LDicomDS::GetCountModule, LDicomDS::GetRootElement, LDicomDS::GetParentElement, LDicomDS::GetChildElement, LDicomDS::IsVolatileElement
Topics: | Working with Data Sets

Example

/* This example displays in a list-box control all elements (level 0) from the Data Set */

L_VOID Test(CListBox *pDlg)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->GetLastElement(NULL, TRUE, FALSE);
while (pElement != NULL)
{
pTag = LDicomTag::Find(pElement->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

pDlg->AddString(p);

pElement = pDS->GetPrevElement(pElement, TRUE, FALSE);
}

 delete pDS;
}


LDicomDS::GetPrevKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetPrevKey(pElement, bTree)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the Data Set */

Returns a pointer to the item in the Dicom Dir Data Set that immediately precedes the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENTstructure that contains an item in the Data Set. A pointer to the item in the Data Set that immediately precedes this item will be returned.
bTree | Flag that indicates how the Data Set will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the Data Set as a tree.
 | FALSE | Evaluate the Data Set as a list.

Returns

!NULL | A pointer to a DICOMELEMENTstructure that contains the item in the Data Set that immediately precedes the item specified in pElement.
NULL | There is not an item preceding pElement. (pElement is the first item in the Data Set.)

Comments

If the Data Set is evaluated as a tree structure, this function returns the previous item on the same level as pElement with the same parent as pElement. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the Data Set is evaluated as a list, the previous item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the Data Set is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 15 | Item 14
Item 5 | Item 4
Item 9 | Item 8
Item 22 | Item 21
Item 25 | Item 24

The following functions will also help you navigate the Data Set as either a tree or a list:

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetNextKey

If you evaluate the Data Set as a tree, you can also use the following functions to navigate the tree:

LDicomDS::GetRootKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetPrevKey, LDicomDS::GetNextKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetRootElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetRootElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the root of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the root of the item specified in pElement.
NULL | The Data Set is empty or pElement is NULL.

Comments

The root is the Level 0 ancestor of pElement. If pElement points to an item on Level 0, a pointer to that same item will be returned. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 2
Item 4 | Item4
Item 5 | Item 6

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstElement

LDicomDS::GetLastElement

LDicomDS::GetNextElement

LDicomDS::GetParentElement

LDicomDS::GetChildElement

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstElement, LDicomDS::GetLastElement, LDicomDS::GetNextElement, LDicomDS::GetPrevElement, LDicomDS::GetCountModule, LDicomDS::GetParentElement, LDicomDS::GetChildElement
Topics: | Working with Data Sets

Example

/* This example displays the root’s name of an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pRoot;
pDICOMELEMENT pElement;
pDICOMTAG pTag;
L_CHAR szUnknown[]="Unknown";
L_CHAR *p;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_RADIATION_SETTING, FALSE);
if (pElement != NULL)
{
pRoot = pDS->GetRootElement(pElement);
pTag = LDicomTag::Find(pRoot->nTag);
if (pTag != NULL)
{
p = pTag->pszName;
}
else
{
p = szUnknown;
}

MessageBox(NULL, p, "Notice", MB_OK);
}

delete pDS;
}


LDicomDS::GetRootKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetRootKey(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns a pointer to the root of the specified item.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains an item in the Data Set.

Returns

!NULL | A pointer to a DICOMELEMENT structure that contains the item in the Data Set that is the root of the item specified in pElement.
NULL | The Data Set is empty or pElement is NULL.

Comments

The root is the Level 0 ancestor of pElement. If pElement points to an item on Level 0, a pointer to that same item will be returned. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 2
Item 4 | Item4
Item 5 | Item 6

The following functions will also help you navigate the Data Set:

LDicomDS::GetFirstKey

LDicomDS::GetLastKey

LDicomDS::GetNextKey

LDicomDS::GetParentKey

LDicomDS::GetChildKey

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetFirstKey, LDicomDS::GetLastKey, LDicomDS::GetNextKey, LDicomDS::GetPrevKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey
Topics: | Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetShortValue

#include "Ltdic.h"

L_INT16 * LDicomDS::GetShortValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a short value, stored in the value field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a short value stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three short values, and you are only interested in retrieving the last two short values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the short values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_OW, VR_SS, or VR_US. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetSignature

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetSignature(pItem, uIndex)

pDICOMELEMENT pItem; | /* pointer to an Item in a Sequence of Items */
L_UINT32 uIndex; | /* index of the Digital Signature */

Returns a pointer to the Digital Signatures Sequence Item that corresponds to the Digital Signature at the specified index.

Parameter | Description
pItem | Pointer to a DICOMELEMENT structure that specifies the Item in which the required Digital Signature is located. Set this parameter to NULL if the Digital Signature is located in the main Data Set.
uIndex | The index of the required Digital Signature. This should be a number from 0 to LDicomDS::GetSignaturesCount(pItem) minus 1.

Returns

!NULL | Pointer to the DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the required Digital Signature.
NULL | The specified index is invalid.

Comments

For each Digital Signature in the main Data Set or in an Item of a Sequence of Items, there should be a corresponding Item under the Digital Signatures Sequence (FFFA,FFFA) located in the main Data Set or in the Item. This function can be used to obtain a pointer to that Digital Signatures Sequence Item.

Along with this function, the function LDicomDS::GetSignaturesCount can be used to enumerate the Digital Signatures in the main Data Set or in an Item of a Sequence of Items. Once a pointer to the Digital Signatures Sequence Item is obtained, the following functions can be used to verify, delete, or get information about the Digital Signature:

LDicomDS::VerifySignature

LDicomDS::DeleteSignature

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

You can also use the function LDicomDS::FindSignature to search the whole Data Set for a specific Digital Signature.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignaturesCount, LDicomDS::FindSignature, LDicomDS::VerifySignature, LDicomDS::DeleteSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, LDicomDS::CreateSignature, Class Members
Topics: | Working with Digital Signatures

Example

L_VOID EnumerateSignatures(LDicomDS& DataSet)
{
// We will enumerate the Digital Signatures in the main Data Set

L_UINT32 uSignaturesCount = DataSet.GetSignaturesCount(NULL);
if (uSignaturesCount == 0)
{
::MessageBox(NULL,
"No Digital Signatures in the main Data Set.",
"Sample",
MB_OK);
return;
}

L_CHAR szMsg[128];

if (uSignaturesCount == 1)
{
lstrcpy(szMsg,
"There is 1 Digital Signature in the main Data Set. "
"Do you want to examine it?");
}
else
{
wsprintf(szMsg,
"There are %lu Digital Signatures in the main Data Set. "
"Do you want to examine them?", uSignaturesCount);
}
if (::MessageBox(NULL, szMsg, "Sample", MB_YESNO) != IDYES)
{
return;
}

for (L_UINT32 i = 0; i < uSignaturesCount; i++)
{
// Refer to the example of LDicomDS::VerifySignature for the
// function ExamineSignature
ExamineSignature(DataSet, DataSet.GetSignature(NULL, i));
}
}


LDicomDS::GetSignatureDateTime

#include "ltdic.h"

pVALUEDATETIME LDicomDS::GetSignatureDateTime(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Returns the Digital Signature DateTime (0400,0105) of the specified Digital Signature.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.

Returns

Pointer to a VALUEDATETIME structure that specifies the Digital Signature DateTime (0400,0105) of the specified Digital Signature. The return value can be NULL.

Comments

The Digital Signature DateTime (0400,0105) under the Digital Signatures Sequence Item of a Digital Signature specifies the date and time the Digital Signature was created. You can use this function to obtain the value of this Data Element.

In addition to this function, the following functions can be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetSignaturesCount

#include "ltdic.h"

L_UINT32 LDicomDS::GetSignaturesCount(pItem)

pDICOMELEMENT pItem;

/* pointer to an Item in a Sequence of Items */

Returns the number of Digital Signatures in the main Data Set or in an Item of a Sequence of Items.

Parameter | Description
pItem | Pointer to a DICOMELEMENT structure that specifies an Item of a Sequence of Items in the Data Set. The function returns the number of Digital Signatures in this Item. If this parameter is set to NULL, the function returns the number of Digital Signatures in the main Data Set.

Returns

The number of Digital Signatures in the specified Item, or in the main Data Set if no Item is specified.

Comments

The function computes the number of Digital Signatures by counting the number of Items under the Digital Signatures Sequence (FFFA,FFFA) which is located under the Item specified by pItem or on the root of the Data Set if the parameter is set to NULL. The function returns 0 if this Sequence doesn’t exist.

One way of enumerating the Digital Signatures in the main Data Set or in an Item of a Sequence of Items is by using this function along with the LDicomDS::GetSignature function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::CreateSignature, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::GetSignature.


LDicomDS::GetSignatureUID

#include "ltdic.h"

L_CHAR* LDicomDS::GetSignatureUID(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Returns the Digital Signature UID (0400,0100) of the specified Digital Signature.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.

Returns

The Digital Signature UID (0400,0100) of the specified Digital Signature. The return value can be NULL.

Comments

The Digital Signature UID (0400,0100) under the Digital Signatures Sequence Item of a Digital Signature should uniquely identify the Digital Signature. You can use this function to obtain the value of this Data Element.

In addition to this function, the following functions can be used to get information about the Digital Signature:

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetSignedElement

#include "ltdic.h"

pDICOMELEMENT LDicomDS::GetSignedElement(pSignatureItem, uIndex)

pDICOMELEMENT pSignatureItem; | /* pointer to a Digital Signatures Sequence Item */
L_UINT32 uIndex; | /* index of the signed Data Element */

Returns a pointer to the signed Data Element at the specified index.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.
uIndex | Value that represents the index of the required signed Data Element. This should be a number from 0 to LDicomDS::GetSignedElementsCount(pSignatureItem) minus 1.

Returns

Pointer to the DICOMELEMENT structure that specifies the required signed Data Element. The return value can be NULL (e.g., if the specified index is invalid).

Comments

The Digital Signatures Sequence Item of a Digital Signature should reference an Item under the Message Authentication Code (MAC) Parameters Sequence associated with the Digital Signatures Sequence. The Data Elements Signed (0400,0020) under the referenced MAC Parameters Sequence Item specifies the Tags of the Data Elements covered by the Digital Signature. These Data Elements should be located at the same level as the MAC Parameters Sequence and the Digital Signatures Sequence.

The LDicomDS::GetSignedElementsCount function returns the number of signed Data Elements as specified by the Data Elements Signed (0400,0020). The GetSignedElement function searches the level at which the MAC Parameters Sequence appears for the Data Element with the Tag determined by the passed index and returns a pointer to the Data Element if it does exist; if it doesn’t exist, the function returns NULL.

Note: In addition to the Data Elements specified by the Data Elements Signed (0400,0020), certain Data Elements under the Digital Signatures Sequence Item are always covered by the Digital Signature.

The following functions can also be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignedElementsCount, LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetSignedElementsCount

#include "ltdic.h"

L_UINT32 LDicomDS::GetSignedElementsCount(pSignatureItem)

pDICOMELEMENT pSignatureItem;

/* pointer to a Digital Signatures Sequence Item */

Returns the number of Data Elements covered by the specified Digital Signature.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.

Returns

The number of Data Elements covered by the specified Digital Signature.

Comments

The Digital Signatures Sequence Item of a Digital Signature should reference an Item under the Message Authentication Code (MAC) Parameters Sequence associated with the Digital Signatures Sequence. The Data Elements Signed (0400,0020) under the referenced MAC Parameters Sequence Item specifies the signed Data Elements. You can use this function to obtain the number of Data Elements specified by this Data Element.

Along with this function, the LDicomDS::GetSignedElement function can be used to enumerate the Data Elements covered by the Digital Signature.

The following functions can also be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

LDicomDS::SaveCertificate

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignedElement, LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, LDicomDS::SaveCertificate, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::GetStringValue

#include "Ltdic.h"

L_CHAR * LDicomDS::GetStringValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a string value, stored in the Value Field, of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a string value stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three string values, and you are only interested in retrieving the last two string values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the string values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_AE, VR_CS, VR_LO, VR_LT, VR_SH, VR_ST, VR_UI, VR_UT, VR_PN. For more information about Value Representations, refer to Default Value Representation Table.

When more than one string is retrieved, all strings, separated by the 0 delimiter, are in the character string returned by this function. For example, the illustration below shows the returned character string, containing three strings separated by the 0 delimiter.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetTimeValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetTextObjectCount

#include "Ltdic.h"

L_UINT16 LDicomDS::GetTextObjectCount(pGraphicAnnSQItem, pCount)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT* pCount; | /* pointer to a variable which will be updated with the text annotation object count */

Retrieves the number of text annotation objects in the specified "Graphic Annotation Sequence" (0070,0001) item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pCount | Pointer to a variable, which will be updated with the text annotation object count.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function returns the number of text annotation objects in the specified "Graphic Annotation Sequence" (0070,0001) item in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::RemoveTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo, LDicomDS::RemoveAllTextObjects, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID CountTextObjects(LDicomDS& PresStateDS)
{

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
L_UINT uCount;
L_UINT16 nRet = PresStateDS. GetTextObjectCount (pGraphicAnnSQItem, &uCount);
if (nRet != DICOM_SUCCESS)
return;
if (uCount >= 0)
{
L_CHAR szText[256] = "\0";
wsprintf(szText, "Number of Textual Annotations is: %i", uCount);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}


LDicomDS::GetTextObjectInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::GetTextObjectInfo(pGraphicAnnSQItem, uTextObjectIndex, pTextObject, uStructSize)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uTextObjectIndex; | /* text annotation object index */
pDICOMTEXTOBJECT pTextObject; | /* pointer to the text annotation object attributes structure to be updated */
L_UINT uStructSize; | /* the size of the DICOMTEXTOBJECT structure */

Gets the attributes of a text annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uTextObjectIndex | The index of the text annotation object whose attributes we want to retrieve.
pTextObject | Pointer to a structure which will be filled with the text annotation object attributes.
uStructSize | Size of the DICOMTEXTOBJECT structure. Pass sizeof(DICOMTEXTOBJECT).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes of a text object and store their values in the structure pointed to by pTextObject. pTextObject->uStructSize will be set to the value of the parameter uStructSize.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::RemoveTextObject, LDicomDS::SetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::RemoveAllTextObjects, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetTextualObjectsInLayer(LDicomDS& PresStateDS)
{
L_CHAR szText[256] = "\0";
L_UINT16 nRet;
DICOMTEXTOBJECT AnnTextual;
L_UINT uObjsCount;

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();

memset(&AnnTextual, 0, sizeof(DICOMTEXTOBJECT));
nRet = PresStateDS.GetLayerTextObjectCount(pGraphicAnnSQItem, &uObjsCount);
if (nRet != DICOM_SUCCESS)
return;
if (uObjsCount > 0)
{
for (L_UINT i = 0; i < uObjsCount; i++)
{
nRet = PresStateDS.GetTextObjectInfo(pGraphicAnnSQItem, i, &AnnTextual, sizeof(DICOMTEXTOBJECT));
if (nRet == DICOM_SUCCESS)
{
if (AnnTextual.pszTextValue)
{
wsprintf(szText, "Annotation text is: %s ", AnnTextual.pszTextValue);
MessageBox( NULL,
szText,
"Note",
MB_OK);
}
}
}
}
}


LDicomDS::GetTextObjElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::GetTextObjElement(pGraphicAnnSQItem, uObjIndex)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uObjIndex; | /* text annotation object index */

Gets the item element of the specified text annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uObjIndex | Text annotation object index whose item element is to be retrieved.

Returns

!NULL | SUCCESS
NULL | An error occurred. Refer to Return Codes.

Comments

This function retrieves the item element under the "Text Object Sequence" (0070,0008) of the specified text annotation object, if the element could not be found it returns NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::RemoveTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::RemoveAllTextObjects, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID GetFirstTextObjectElement(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
pDICOMELEMENT pElement = PresStateDS.GetTextObjElement(pGraphicAnnSQItem,0);
if (pElement)
{
MessageBox( NULL,
"Item element for this layer has been found.",
"Note",
MB_OK);
}
}


LDicomDS::GetTimeValue

#include "Ltdic.h"

pVALUETIME LDicomDS::GetTimeValue(pElement, nIndex, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_UINT32 nIndex; | /* index used when multiple values are stored */
L_UINT32 nCount; | /* the number of values to retrieve */

Returns a pointer to a VALUETIME structure, that contains time information stored in the Value Field of the specified element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
nIndex | Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
nCount | Value that indicates the number of values to retrieve when more than one value is stored in the Value Field. In most instances you will only retrieve one value so this parameter will be one.

Returns

!NULL | A pointer to a VALUETIME structure that contains time information stored in the Value Field of the specified Data Element.
NULL | The length of the Value Field is 0, the function was called for the incorrect VR type, or the function was called for a folder (sequence) element.

Comments

If you have more than one value stored in the Value Field of the specified Data Element, you can retrieve one or more of those elements. For example, if the Value Field of the specified Data Element contains three Time values, and you are only interested in retrieving the last two Time values, set nIndex to 1 and nCount to 2. This tells the function to retrieve the Time values starting at position 1 (the index is zero based) and retrieve two values. Therefore you would retrieve the values in positions 1 and 2 in the Value Field.

This function can be called only if the Value Representation of the Data Element is VR_TM. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetBinaryValue, LDicomDS::GetCharValue, LDicomDS::GetShortValue, LDicomDS::GetLongValue, LDicomDS::GetFloatValue, LDicomDS::GetDoubleValue, LDicomDS::GetStringValue, LDicomDS::GetAgeValue, LDicomDS::GetDateValue, LDicomDS::GetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::GetCharValue.


LDicomDS::GetValueKey

#include "ltdic.h"

L_CHAR * LDicomDS::GetValueKey(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Returns the key element type of the specified key element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure that contains a key element.

Returns

The key element type of the specified key element. Possible values are:

Value | Meaning
"PATIENT" | Patient key element
"STUDY" | Study key element
"SERIES" | Series key element
"IMAGE" | Image key element
"OVERLAY" | Overlay key element
"MODALITY LUT" | Modality-LUT key element
"VOI LUT" | VOI-LUT key element
"CURVE" | Curve key element
"STORED PRINT" | Stored print key element
"RT DOSE" | RT dose key element
"RT STRUCTURE SET" | RT structure set key element
"RT PLAN" | RT plan key element
"RT TREAT RECORD" | RT treatment record key element
"TOPIC" | Topic key element
"VISIT" | Visit key element
"RESULTS" | Results key element
"INTERPRETATION" | Interpretation key element
"STUDY COMPONENT" | Study Component key element
"PRESENTATION" | Presentation key element
"WAVEFORM" | Waveform key element
"SR DOCUMENT" | Structured Reporting Document key element
"PRIVATE" | Private key element

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Working with Basic Directory Key Elements

Example

For an example, refer to LDicomDS::InsertKey.


LDicomDS::GetVOILUT

#include "ltdic.h"

L_UINT16 LDicomDS::GetVOILUT(uVOILUTIndex, pVOILUTAttributes, uStructSize, uFlags)

L_UINT uVOILUTIndex; | /* index */
pDICOMVOILUTATTRIBS pVOILUTAttributes; | /* pointer to a structure */
L_UINT uStructSize; | /* size of a structure */
L_UINT uFlags; | /* reserved for future use */

Retrieves the attributes that describe the VOI LUT.

Parameter | Description
uVOILUTIndex | Index to the VOI LUT to be retrieved. According to the DICOM standard one or more items could exist under one VOI LUT Sequence (0028,3010), use this index to specify which item to use in order to populate the pVOILUTAttributes structure. This index is zero-based.
pVOILUTAttributes | Pointer to a structure to be updated with the VOI LUT attributes.
uStructSize | Size of the DICOMVOILUTATTRIBS structure. Pass sizeof(DICOMVOILUTATTRIBS).
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes that describe a VOI LUT and store their values in the structure pointed to by pVOILUTAttributes.

pVOILUTAttributes ->uStructSize will be set to the value of the parameter uStructSize.

Before calling this function call LDicomDS::GetVOILUTCount to see if a VOI LUT Sequence (0028,3010) exists in the DICOM dataset and to retrieve the number of items under that sequence.

uVOILUTIndex is zero-based. If you pass 0, this function will populate pVOILUTAttributes->LUTDescriptor with the values of the "LUT Descriptor"(0028,3002) under the first item in the "VOI LUT Sequence" and pVOILUTAttributes->pszLUTExplanation with the value of "LUT Explanation" (0028,3003) element, if it exists.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetVOILUT.


LDicomDS::GetVOILUTCount

#include "ltdic.h"

L_UINT16 LDicomDS::GetVOILUTCount(pCount)

L_UINT * pCount;

/* pointer to a variable */

Gets the number of items under the VOI LUT sequence (0028,3010).

Parameter | Description
pCount | Pointer to a variable to be updated with the number of items under the VOI LUT sequence.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will get the number of items under the VOI LUT sequence (0028,3010). This function will get the number of items under the VOI LUT sequence (0028,3010). If this sequence does not exist in the dataset, this function will return DICOM_SUCCESS and set *pCount to 0.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetVOILUT.


LDicomDS::GetVOILUTData

#include "ltdic.h"

L_UINT16 LDicomDS::GetVOILUTData(uVOILUTIndex, pLUTData, uDataSize, uFlags)

L_UINT uVOILUTIndex; | /* index */
L_UINT16 *pLUTData; | /* pointer to the target buffer */
L_UINT uDataSize; | /* size of the target buffer */
L_UINT uFlags; | /* reserved for future use */

Retrieves "LUT Data" for an item under "VOI LUT Sequence".

Parameter | Description
uVOILUTIndex | Index to the VOI LUT to be retrieved. According to the DICOM standard one or more items could exist under one VOI LUT Sequence (0028,3010), use this index to specify which item to use in order to fill the pLUTData buffer. This index is zero-based.
pLUTData | Pointer to the buffer to be updated with the "LUT Data". You must allocate the buffer before calling this function, and the buffer must be large enough to hold the "LUT Data".
uDataSize | Size of the buffer pointed to by pLUTData.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the "LUT Data" (0028,3006) for an item under the "VOI LUT Sequence" (0028,3010).

Before calling this function you must call LDicomDS::GetVOILUT to retrieve the attributes of the VOI LUT of the item for which you are trying to get the "LUT Data". You can then use pVOILUTAttributes.LUTDescriptor.uNumberOfEntries to determine the size of the pLUTData buffer passed to this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetVOILUT.


LDicomDS::GetWaveformGroup

#include "Ltdic.h"

L_UINT16 LDicomDS::GetWaveformGroup(uIndex, pWaveformGroup)

L_UINT32 uIndex; | /* index*/
LDicomWaveformGroup* pWaveformGroup; | /* pointer to an object to be updated */

Gets a waveform group.

Parameter | Description
uIndex | Zero-based index of the group to be retrieved. As an example, if there are three waveform groups, use an index of 2 to retrieve the third group.
pWaveformGroup | Pointer to a class which holds the waveform group attributes and data.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

In DICOM, a waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). Use this function to extract the specified multiplex group.

This function populates the object pointed to by pWaveformGroup with the multiplex group attributes and for each channel in the group, adds a new channel by calling LDicomWaveformGroup::AddChannel.

This function fails and returns DICOM_ERROR_NULL_PTR if pWaveformGroup is NULL.

This is the main function for extracting waveforms from a DICOM dataset. Once pWaveformGroup is populated you can call the functions defined either by LDicomWaveformGroup or LDicomWaveformChannel, providing you comprehensive DICOM waveform support.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWaveformGroupCount, LDicomDS::DeleteWaveformGroup, LDicomDS::AddWaveformGroup, LDicomWaveformGroup class members, LDicomWaveformChannel class members
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomDS::GetWaveformGroupCount

#include "Ltdic.h"

L_UINT32 LDicomDS::GetWaveformGroupCount()

Gets the number of waveform multiplex groups that are included in the dataset.

Returns

Number of waveform multiplex groups included in the dataset.

Comments

In DICOM, a waveform consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). Use this function to retrieve the number of items under that sequence.

Once you know the total number of multiplex groups you can call LDicomDS::GetWaveformGroup to extract a specific group or LDicomDS::DeleteWaveformGroup to delete it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWaveformGroup, LDicomDS::DeleteWaveformGroup, LDicomDS::AddWaveformGroup, LDicomWaveformGroup class members, LDicomWaveformChannel class members
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomDS::GetWindow

#include "ltdic.h"

L_UINT16 LDicomDS::GetWindow(uWindowIndex, pWindowAttributes, uStructSize, uFlags)

L_UINT uWindowIndex; | /* index */
pDICOMWINDOWATTRIBS pWindowAttributes; | /* pointer to a structure */
L_UINT uStructSize; | /* size of a structure */
L_UINT uFlags; | /* reserved for future use */

Retrieves the attributes that describe window center and window width.

Parameter | Description
uWindowIndex | Index to the window center, window width value to be retrieved. According to the DICOM standard if multiple values are present for the window center and window width, both attributes shall have the same number of values and shall be considered as pairs. This index is zero-based.
pWindowAttributes | Pointer to a structure to be updated with the window-related attributes.
uStructSize | Size of the DICOMWINDOWATTRIBS structure. Pass sizeof(DICOMWINDOWATTRIBS).
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will retrieve the attributes that describe window center and window width and store their values in the structure pointed to by pWindowAttributes.

pWindowAttributes->uStructSize will be set to the value of the parameter uStructSize.

"Window Center" (0028,1050) and "Window Width" (0028,1051) specify a linear conversion from stored pixel values (after any modality LUT or rescale slope and intercept specified in the IOD have been applied) to values to be displayed. Please see "VOI LUT Module Attributes" in the DICOM standard for more details.

This function will fail and return DICOM_ERROR_PARAMETER if the window count (number of values under the window center element) equals 0 or if uWindowIndex is greater or equal to the window count.

uWindowIndex is zero-based, if you pass 0 for example this function will populate pWindowAttributes->fWindowCenter with the first value under the "Window Center" (0028,1050) element, pWindowAttributes-> fWindowWidth with the first value under the "Window Width" (0028,1051) element and pWindowAttributes->pszWindowCWExplanation with "Window Center & Width Explanation" (0028,1055)element if it exists.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetWindow.


LDicomDS::GetWindowCount

#include "ltdic.h"

L_UINT16 LDicomDS::GetWindowCount(pCount)

L_UINT * pCount;

/* pointer to a variable */

Gets the number of values under the window center element.

Parameter | Description
pCount | Pointer to a variable to be updated with the number of values under the window center.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will get the number of values under the window center (0028,1050) element, this should also equal the number of values under the window width (0028,1051) element.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

For an example, refer to LDicomDS::SetWindow.


LDicomDS::InitCS

#include "ltdic.h"

L_VOID LDicomDS::InitCS(nCommand, bRequest)

L_UINT16 nCommand; | /* type of command */
L_BOOL bRequest; | /* flag that indicates the type of command set to initialize */

Creates the Command Set and inserts the elements for the specified command.

Parameter | Description
nCommand | Type of command to create. Possible values are:
 | Value | Meaning
 | COMMAND_C_STORE | [0x0001] Composite Store Command
 | COMMAND_C_FIND | [0x0020] Composite Find Command
 | COMMAND_C_GET | [0x0010] Composite Get Command
 | COMMAND_C_MOVE | [0x0021] Composite Move Command
 | COMMAND_C_CANCEL | [0x0FFF] Composite Cancel Command
 | COMMAND_C_ECHO | [0x0030] Composite Echo Command
 | COMMAND_N_REPORT | [0x0100] Normalized Report Command
 | COMMAND_N_GET | [0x0110] Normalized Get Command
 | COMMAND_N_SET | [0x0120] Normalized Set Command
 | COMMAND_N_ACTION | [0x0130] Normalized Action Command
 | COMMAND_N_CREATE | [0x0140] Normalized Create Command
 | COMMAND_N_DELETE | [0x0150] Normalized Delete Command
bRequest | Flag that indicates whether to create the command set as a request or a response. Possible values are:
 | Value | Meaning
 | TRUE | Create the command set as a request.
 | FALSE | Create the command set as a response.

Returns

None.

Comments

A Command set is a special type of Data Set. Therefore, to create a Command Set you must first call LDicomDS::LDicomDS and initialize the newly created Data Set by calling LDicomDS::InitCS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetInfoCS, LDicomDS::LDicomDS, LDicomDS::~LDicomDS
Topics: | Working with Command Sets

Example

/* This example creates a Data Set as a Command Set and gets information about the command */

LDicomDS DS(NULL);
L_UINT16 nCommand;
L_BOOL bRequest;
L_CHAR buf[180];

DS.InitCS(COMMAND_C_STORE, TRUE);
DS.GetInfoCS(&nCommand, &bRequest);
wsprintf(buf, "Command = %d\n", nCommand);
if(bRequest)
lstrcat(buf, "Request");
else
lstrcat(buf, "Response");
::MessageBox(NULL, buf, "Test", MB_OK);


LDicomDS::InitDS

#include "Ltdic.h"

L_VOID LDicomDS::InitDS(nClass, nFlags)

L_UINT32 nClass; | /* class constant */
L_UINT16 nFlags; | /* flag */

Creates the data set object, inserting the appropriate elements for the specified class.

Parameter | Description
nClass | Value that specifies the class. For a list of default values, refer to the IOD Class Constants.
nFlags | Transfer Syntax flag that indicates the organization of the data set and the type of image compression used. Possible values and combinations are:
 | Value | Meaning
 | 0 | [0x0000] Use the default combination of: DS_LITTLE_ENDIAN | DS_EXPLICIT_VR | DS_COMPRESSION_NONE
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit.
 | DS_LITTLE_ENDIAN | DS_IMPLICIT_VR
 | DS_LITTLE_ENDIAN | DS_EXPLICIT_VR
 | DS_BIG_ENDIAN | DS_EXPLICIT_VR

Returns

None.

Comments

To create a Data Set, you must call LDicomDS::LDicomDS, to allocate the memory required for the Data Set object, before calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::LoadDSMemory, LDicomDS::LDicomDS, LDicomDS::~LDicomDS
Topics: | Working with Data Sets

Example

/* This example initializes the Data Set */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS(CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, DS_METAHEADER_PRESENT |
DS_LITTLE_ENDIAN |
DS_EXPLICIT_VR |
DS_GROUP_LENGTHS |
DS_LENGTH_EXPLICIT);
delete pDS;
}


LDicomDS::InsertElement

#include "Ltdic.h"

pDICOMELEMENT LDicomDS::InsertElement(pNeighbor, bChild, nTag, nVR, bSequence, nIndex)

pDICOMELEMENT pNeighbor; | /* pointer to a DICOMELEMENT structure */
L_BOOL bChild; | /* flag that indicates where to insert the item */
L_UINT32 nTag; | /* tag value */
L_UINT16 nVR; | /* value representation */
L_BOOL bSequence; | /* flag that indicates whether the inserted item is a sequence */
L_UINT32 nIndex; | /* index value */

Inserts a new element in the Data Set.

Parameter | Description
pNeighbor | Pointer to a DICOMELEMENT structure that contains an item in the Data Set. The inserted item will be inserted as a neighbor to this item, or as a child, depending on the value of bChild.
bChild | Flag that indicates where to insert the item. Possible values are:
 | Value | Meaning
 | TRUE | The new item will be inserted as the last child of pNeighbor.
 | FALSE | The new item will be inserted as the last sibling of pNeighbor.
nTag | Tag value for the inserted element. For a list of default values, refer to Data Element Tag Constants.
nVR | Value representation code that indicates the type of value stored in the data element. For a list of default values supported by DICOM, refer to Value Representation Constants.
bSequence | Flag that indicates whether the new item is a sequence. Possible values are:
 | Value | Meaning
 | TRUE | The new item is a sequence.
 | FALSE | The new item is not a sequence.
nIndex | Index value that indicates where to insert a TAG_ITEM data element in a sequence. This parameter is valid only if the data element being inserted has a tag of value TAG_ITEM. If the data element being inserted has any other tag value, this parameter is ignored. The index is zero based, so if you want to insert a TAG_ITEM data element as the first item in the sequence, set this to 0. The value ELEMENT_INDEX_MAX indicates to add the TAG_ITEM data element to the end of the sequence.
 | A sequence may consist of one or more items. This parameter lets you insert a TAG_ITEM data element as any item within the sequence, not just at the end. In addition, it lets you insert multiple TAG_ITEM data elements within a sequence.
 | If pNeighbor points to the parent of a sequence and bChild is true, the index will pertain to the children of pNeighbor. If pNeighbor points to a member of a sequence and bChild is false, the index pertains to the siblings of pNeighbor.

Returns

!NULL | A pointer to a DICOMELEMENT structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

The illustrations below show how items are added to the Data Set (internally maintained as a tree), based on the value of bChild.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore, since added items become the last sibling or the last child, these are drawn at the bottom of the appropriate group of items.

In this illustration, pNeighbor points to Item 1 and bChild is False. The new item is added as the last sibling of Item 1.

In this illustration, pNeighbor points to Item 1 and bChild is True. The new item is added as the last child of Item 1.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InsertModule, LDicomDS::DeleteElement, LDicomDS::DeleteModule, LDicomDS::ResetDS
Topics: | Working with Data Sets

Example

/* This example inserts 2 elements in Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pElement = pDS->InsertElement(NULL, FALSE, TAG_INSTITUTION_CODE_SEQUENCE, VR_SQ, TRUE, 0);
pElement = pDS->InsertElement(pElement, TRUE, TAG_CODE_VALUE, VR_SH, FALSE, 0);

delete pDS;
}


LDicomDS::InsertImage

#include "Ltdic.h"

L_UINT16 LDicomDS::InsertImage(pElement, pBitmap, nIndex, nCompression, nPhotometric, nBitsPerPixel, nQFactor, uFlags, pfnCallback, pUserData)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pBITMAPHANDLE pBitmap; | /* pointer to the bitmap handle */
L_UINT32 nIndex; | /* index value */
L_INT32 nCompression; | /* compression type */
L_INT32 nPhotometric; | /* photometric constant */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nQFactor; | /* quality factor */
L_UINT uFlags; | /* flags */
FILESAVECALLBACK pfnCallback; | /* optional callback function */
L_VOID L_FAR *pUserData; | /* pointer to more parameters for the callback */

Inserts an image in a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pBitmap | Pointer to the bitmap handle that references the bitmap to insert.
nIndex | Index value that indicates the position at which the bitmap will be inserted. This is a zero-based index. For example, if nIndex is 0, the new image will be inserted as the first image in the Pixel Data Element.
nCompression | Value that indicates the type of compression to use. Possible values are:
 | Value | Meaning
 | IMAGE_COMPRESSION_NONE | [0x00] No compression.
 | IMAGE_COMPRESSION_RLE | [0x01] RLE compression.
 | IMAGE_COMPRESSION_JPEG_LOSSLESS | [0x02] JPEG LossLess compression.
 | IMAGE_COMPRESSION_JPEG_LOSSY | [0x03] JPEG Lossy compression.
 | IMAGE_COMPRESSION_J2K_LOSSLESS | [0x06] JPEG 2000 lossless compression.
 | IMAGE_COMPRESSION_J2K_LOSSY | [0x07] JPEG 2000 lossy compression.
nPhotometric | Photometric constant. Possible values are:
 | Value | Meaning
 | IMAGE_PHOTOMETRIC_MONOCHROME2 | [0x01] 8- or 16- bits per pixel, grayscale image.
 | IMAGE_PHOTOMETRIC_PALETTE_COLOR | [0x02] 8-bits per pixel, palettized color image.
 | IMAGE_PHOTOMETRIC_RGB | [0x03] 24-bits per pixel, RGB color image.
nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:

 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap
nQFactor | The quality factor (Q factor) is a number that determines the degree of loss in the compression process. You can set a value from 2 to 255, where 2 is the highest quality and 255 is the most compression.

uFlags | Flags which control the behaviour of this function. Possible values are:
 | Value | Meaning
 | DICOM_SETIMAGE_AUTO_SAVE_OVERLAYS | [0x0001]If set, the function will automatically insert the overlays associated with the input bitmap into the dataset.
 | DICOM_SETIMAGE_AUTO_SET_VOI_LUT | [0x0002]If set, the function will automatically add a VOI LUT to the dataset.
 | DICOM_SETIMAGE_MINIMIZE_JPEG_SIZE | [0x0004] If set, and the nCompression parameter is IMAGE_COMPRESSION_JPEG_LOSSLESS or IMAGE_COMPRESSION_JPEG_LOSSY, the JPEG compression engine will use optimized Huffman tables, which results in better compression, but slower speed.

PfnCallback | Optional callback function for additional processing.
 | If you do not provide a callback function, use NULL as the value of this parameter.
 | If you do provide a callback function, use the function pointer as the value of this parameter.
 | The callback function must adhere to the function prototype described in FILESAVECALLBACK Function.
pUserData | Void pointer that you can use to pass one or more additional parameters that the callback function needs.
 | To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.
 | If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically insert the image into the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element in which to insert the image.

For a table of possible Compression, Photometric, BitsPerPixel, and Quality Factor combinations, refer to Compression Table.

For more options when using the JPEG 2000 compression, refer to LDicomDS::SetJ2KOptions.

This function will either insert, delete or update one or more of the following elements:

Tag | Name
(7FE0,0010) | Pixel Data
(0002,0010) | Transfer Syntax UID
(0028,0101) | Bits Stored
(0028,0100) | Bits Allocated
(0028,0102) | High Bit
(0028,0103) | Pixel Representation
(0028,0010) | Rows
(0028,0011) | Columns
(0028,0002) | Samples per Pixel
(0028,0006) | Planar Configuration
(0028,0004) | Photometric Interpretation
(0028,0106) | Smallest Image Pixel Value
(0028,0107) | Largest Image Pixel Value
(0028,1101) | Red Palette Color Lookup Table Descriptor
(0028,1102) | Green Palette Color Lookup Table Descriptor
(0028,1103) | Blue Palette Color Lookup Table Descriptor
(0028,1201) | Red Palette Color Lookup Table Data
(0028,1202) | Green Palette Color Lookup Table Data
(0028,1203) | Blue Palette Color Lookup Table Data
(0028,1199) | Palette Color Lookup Table UID
(0028,1052) | Rescale Intercept
(0028,1053) | Rescale Slope
(0028,1054) | Rescale Type
(0028,1221) | Segmented Red Palette Color Lookup Table Data
(0028,1222) | Segmented Green Palette Color Lookup Table Data
(0028,1223) | Segmented Blue Palette Color Lookup Table Data
(0028,3010) | VOI LUT Sequence
(0028,1050) | Window Center
(0028,1051) | Window Width
(0028,1055) | Window Center & Width Explanation
(0028,0008) | Number of Frames
(0054,0070) | Time Slot Vector

This function is indifferent to the pixel data restrictions imposed by the various DICOM IOD classes, for example this function will allow the user to insert a colored image into a "Digital X-Ray Image Storage" dataset.

This function will always insert a "Number of Frames" (0028, 0008) element and set its value.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::InsertImageList, LDicomDS::SetImage, LDicomDS::SetImageList
Topics: | Working with Data Sets

Example

/* This example inserts an image in Data Set */

L_VOID Test(pBITMAPHANDLE pBitmap)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->InsertImage(pElement, pBitmap, 1, IMAGE_COMPRESSION_NONE,
IMAGE_PHOTOMETRIC_MONOCHROME1, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT, NULL, NULL);
}

delete pDS;
}


LDicomDS::InsertImageList

#include "Ltdic.h"

L_UINT16 LDicomDS::InsertImageList(pElement, hList, nIndex, nCompression, nPhotometric, nBitsPerPixel, nQFactor, uFlags)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
HBITMAPLIST hList; | /* handle to the list of bitmaps */
L_UINT32 nIndex; | /* index value */
L_INT32 nCompression; | /* compression type */
L_INT32 nPhotometric; | /* photometric constant */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nQFactor; | /* quality factor */
L_UINT uFlags; | /* flags */

Inserts the bitmap list in a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
hList | Handle to the list of bitmaps.
nIndex | Position of the first frame to load. Use zero-based indexing. For example, if there are 10 bitmaps in a list, the index of the last one is 9.
nCompression | Value that indicates the type of compression to use. Possible values are:
 | Value | Meaning
 | IMAGE_COMPRESSION_NONE | [0x00] No compression.
 | IMAGE_COMPRESSION_RLE | [0x01] RLE compression.
 | IMAGE_COMPRESSION_JPEG_LOSSLESS | [0x02] JPEG LossLess compression.
 | IMAGE_COMPRESSION_JPEG_LOSSY | [0x03] JPEG Lossy compression.
 | IMAGE_COMPRESSION_J2K_LOSSLESS | [0x06] JPEG 2000 lossless compression.
 | IMAGE_COMPRESSION_J2K_LOSSY | [0x07] JPEG 2000 lossy compression.
nPhotometric | Photometric constant. Possible values are:
 | Value | Meaning
 | IMAGE_PHOTOMETRIC_MONOCHROME2 | [0x01] 8- or 16-bits per pixel, grayscale image.
 | IMAGE_PHOTOMETRIC_PALETTE_COLOR | [0x02] 8-bits per pixel, palettized color image.
 | IMAGE_PHOTOMETRIC_RGB | [0x03] 24-bits per pixel, RGB color image.

nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:
 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap

nQFactor | The quality factor (Q factor) is a number that determines the degree of loss in the compression process. You can set a value from 2 to 255, where 2 is the highest quality and 255 is the most compression.
uFlags | Flags which control the behaviour of this function. Possible values are:
 | Value | Meaning
 | DICOM_SETIMAGE_AUTO_SET_VOI_LUT | [0x0002]If set, the function will automatically add a VOI LUT to the dataset.
 | DICOM_SETIMAGE_MINIMIZE_JPEG_SIZE | [0x0004] If set, and the nCompression parameter is IMAGE_COMPRESSION_JPEG_LOSSLESS or IMAGE_COMPRESSION_JPEG_LOSSY, the JPEG compression engine will use optimized Huffman tables, which results in better compression, but slower speed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

As an example, if you wish to insert 50 images starting with the 50th frame in the Pixel Data, call this function with nIndex set to 49 (the 50th frame in a zero-based index) and the 50 frames you wish to insert in hList.

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically insert the images into the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element in which to insert the images.

For a table of possible Compression, Photometric, BitsPerPixel, and Quality Factor combinations, refer to Compression Table.

For more options when using the JPEG 2000 compression, refer to LDicomDS::SetJ2KOptions.

This function will either insert, delete or update one or more of the following elements:

Tag | Name
(7FE0,0010) | Pixel Data
(0002,0010) | Transfer Syntax UID
(0028,0101) | Bits Stored
(0028,0100) | Bits Allocated
(0028,0102) | High Bit
(0028,0103) | Pixel Representation
(0028,0010) | Rows
(0028,0011) | Columns
(0028,0002) | Samples per Pixel
(0028,0006) | Planar Configuration
(0028,0004) | Photometric Interpretation
(0028,0106) | Smallest Image Pixel Value
(0028,0107) | Largest Image Pixel Value
(0028,1101) | Red Palette Color Lookup Table Descriptor
(0028,1102) | Green Palette Color Lookup Table Descriptor
(0028,1103) | Blue Palette Color Lookup Table Descriptor
(0028,1201) | Red Palette Color Lookup Table Data
(0028,1202) | Green Palette Color Lookup Table Data
(0028,1203) | Blue Palette Color Lookup Table Data
(0028,1199) | Palette Color Lookup Table UID
(0028,1052) | Rescale Intercept
(0028,1053) | Rescale Slope
(0028,1054) | Rescale Type
(0028,1221) | Segmented Red Palette Color Lookup Table Data
(0028,1222) | Segmented Green Palette Color Lookup Table Data
(0028,1223) | Segmented Blue Palette Color Lookup Table Data
(0028,3010) | VOI LUT Sequence
(0028,1050) | Window Center
(0028,1051) | Window Width
(0028,1055) | Window Center & Width Explanation
(0028,0008) | Number of Frames
(0054,0070) | Time Slot Vector

This function is indifferent to the pixel data restrictions imposed by the various DICOM IOD classes, for example this function will allow the user to insert a colored image into a "Digital X-Ray Image Storage" dataset.

This function will always insert a "Number of Frames" (0028, 0008) element and set its value.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::InsertImage, LDicomDS::SetImage, LDicomDS::SetImageList
Topics: | Working with Data Sets

Example

/* This example inserts a multi-frame image in Data Set */

L_VOID Test(HBITMAPLIST hList)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->InsertImageList(pElement, hList, 0, IMAGE_COMPRESSION_JPEG_LOSSLESS,
IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT);
}

delete pDS;
}


LDicomDS::InsertKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::InsertKey(pParent, pszKey, bOptional)

pDICOMELEMENT pParent; | /* pointer to a DICOMELEMENT structure */
L_CHAR * pszKey; | /* type of key element to insert */
L_BOOL bOptional; | /* flag that indicates which elements to insert */

Inserts a new key element in the Dicom Dir Data Set.

Parameter | Description
pParent | Pointer to a DICOMELEMENT structure that contains a key element in the Data Set. The new key element will be inserted as a child of this key element.
pszKey | Character string that contains the type of key element to find. Possible values are:
 | Value | Meaning
 | "PATIENT" | Patient key element
 | "STUDY" | Study key element
 | "SERIES" | Series key element
 | "IMAGE" | Image key element
 | "OVERLAY" | Overlay key element
 | "MODALITY LUT" | Modality-LUT key element
 | "VOI LUT" | VOI-LUT key element
 | "CURVE" | Curve key element
 | "STORED PRINT" | Stored print key element
 | "RT DOSE" | RT dose key element
 | "RT STRUCTURE SET" | RT structure set key element
 | "RT PLAN" | RT plan key element
 | "RT TREAT RECORD" | RT treatment record key element
 | "TOPIC" | Topic key element
 | "VISIT" | Visit key element
 | "RESULTS" | Results key element
 | "INTERPRETATION" | Interpretation key element
 | "STUDY COMPONENT" | Study Component key element
 | "PRESENTATION" | Presentation key element
 | "WAVEFORM" | Waveform key element
 | "SR DOCUMENT" | Structured Reporting Document key element
 | "PRIVATE" | Private key element
 | "KEY OBJECT DOC" | Key Object Document key element

bOptional | Flag that indicates which parts of the key element to insert. Possible values are:
 | Value | Meaning
 | TRUE | Insert all parts of the specified key element.
 | FALSE | Insert only the mandatory parts of the specified key element.

Returns

!NULL | A pointer to a DICOMELEMENT structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

The newly inserted key element is inserted as a child of pParent.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetValueKey, LDicomDS::DeleteKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey, LDicomDS::GetFirstKey, LDicomDS::GetLastKey, LDicomDS::GetPrevKey, LDicomDS::GetNextKey, LDicomDS::GetValueKey, LDicomDS::FindFirstKey, LDicomDS::FindLastKey, LDicomDS::FindPrevKey, LDicomDS::FindNextKey
Topics: | Working with Basic Directory Key Elements

Example

void DisplayKeyInfo1(LDicomDS *pDicomDS)
{
CString strMsg;
CString strTmp;
LDicomDS DicomDS;

//move to root KEY (PATIENT)
pDICOMELEMENT pRootKey = pDicomDS->GetFirstKey(NULL, FALSE);
CString strRootKey = pDicomDS->GetValueKey(pRootKey);
strMsg.Format("Root Key[%s]\n", strRootKey);

//move to child KEY (STUDY)
pDICOMELEMENT pStudyKey = pDicomDS->GetChildKey(pRootKey);
CString strStudyKey = pDicomDS->GetValueKey(pStudyKey);
strTmp.Format("Root Key[%s]\n", strStudyKey);
strMsg = strMsg + strTmp;

//move to child KEY (SERIES)
pDICOMELEMENT pSeriesKey = pDicomDS->GetChildKey(pStudyKey);

//find first SERIES key
pDICOMELEMENT pElement = pDicomDS->FindFirstKey(pSeriesKey, "SERIES", TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("First Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find next series key
pElement = pDicomDS->FindNextKey(pElement, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Next Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find last SERIES key
pElement = pDicomDS->FindLastKey(pElement, "SERIES", TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Last Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find previous SERIES key
pElement = pDicomDS->FindPrevKey(pElement, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Previous Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//Find root KEY another way
pRootKey = pDicomDS->GetRootKey(pElement);
strRootKey = pDicomDS->GetValueKey(pRootKey);
strTmp.Format("Root Key[%s]\n", strRootKey);
strMsg = strMsg + strTmp;

AfxMessageBox(strMsg);
}

void DisplayKeyInfo2(LDicomDS *pDicomDS)
{
CString strMsg;
CString strTmp;
LDicomDS DicomDS;

//move to root KEY (PATIENT)
pDICOMELEMENT pRootKey = pDicomDS->GetFirstKey(NULL, FALSE);
CString strRootKey = pDicomDS->GetValueKey(pRootKey);
strMsg.Format("Root Key[%s]\n", strRootKey);

//move to child KEY (STUDY)
pDICOMELEMENT pStudyKey = pDicomDS->GetChildKey(pRootKey);
CString strStudyKey = pDicomDS->GetValueKey(pStudyKey);
strTmp.Format("Root Key[%s]\n", strStudyKey);
strMsg = strMsg + strTmp;

//move to child KEY (SERIES)
pDICOMELEMENT pSeriesKey = pDicomDS->GetChildKey(pStudyKey);

//find first SERIES key
pDICOMELEMENT pElement = pDicomDS->GetFirstKey(pSeriesKey, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("First Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find next series key
pElement = pDicomDS->GetNextKey(pElement, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Next Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find last SERIES key
pElement = pDicomDS->GetLastKey(pElement, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Last Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//find previous SERIES key
pElement = pDicomDS->GetPrevKey(pElement, TRUE);
pElement = pDicomDS->GetChildElement(pElement, TRUE);
pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("Previous Series[%s]\n", pDicomDS->GetStringValue(pElement, 0, 1) );
strMsg = strMsg + strTmp;

//Find root KEY another way
pRootKey = pDicomDS->GetRootKey(pElement);
strRootKey = pDicomDS->GetValueKey(pRootKey);
strTmp.Format("Root Key[%s]\n", strRootKey);
strMsg = strMsg + strTmp;

AfxMessageBox(strMsg);
}

void Sample ()
{
CString strMsg;
CString strTmp;
LDicomDS DicomDS;
pDICOMELEMENT pElement, pKey;

DicomDS.InitDS(CLASS_BASIC_DIRECTORY, 0);

//insert some keys
pKey = DicomDS.InsertKey(NULL, "PATIENT", TRUE); //insert PATIENT level key
pKey = DicomDS.InsertKey(pKey, "STUDY", TRUE); //insert STUDY level key

//insert 5 SERIES level keys and some data
for (int i=0; i<5; i++)
{
pKey = DicomDS.InsertKey(pKey, "SERIES", TRUE);
pElement = DicomDS.GetChildElement(pKey, FALSE);
pElement = DicomDS.FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE);
strTmp.Format("%d", i);
DicomDS.SetStringValue(pElement, (L_CHAR *)(LPCTSTR)strTmp, 1);
pKey = DicomDS.GetParentKey(pKey);
}

//DisplayKeyInfo1 displays the information in the tree
DisplayKeyInfo1(&DicomDS);
DicomDS.SaveDS("d:\\temp\\one.dic", 0);

//find last SERIES and delete it
pElement = DicomDS.GetChildKey(pKey);
pKey = DicomDS.FindLastKey(pElement, "SERIES", TRUE);
DicomDS.DeleteKey(pKey);
AfxMessageBox("Deleting Last Series Key...");

//DisplayKeyInfo2 displays the same information as DisplayKeyInfo1 using different functions
DisplayKeyInfo2(&DicomDS);
DicomDS.SaveDS("d:\\temp\\two.dic", 0);
}


LDicomDS::InsertModule

#include "Ltdic.h"

pDICOMMODULE LDicomDS::InsertModule(nModule, bOptional)

L_UINT32 nModule; | /* module constant */
L_BOOL bOptional; | /* flag that indicates which elements to insert */

Inserts a new module in the Data Set.

Parameter | Description
nModule | Module constant the indicates the module being inserted. For a list of default values, refer to IOD Module Constants.
bOptional | Flag that indicates which elements of the module to insert. Possible values are:
 | Value | Meaning
 | TRUE | Insert all elements of the specified module.
 | FALSE | Insert only the mandatory elements of the specified module.

Returns

!NULL | A pointer to a DICOMMODULE structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

LEAD controls the placement of the module in the Data Set.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::DeleteElement, LDicomDS::DeleteModule, LDicomDS::InsertElement, LDicomDS::ResetDS
Topics: | Working with Data Sets

Example

/* This example inserts a module in Data Set */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMMODULE pModule;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pModule = pDS->InsertModule(MODULE_PATIENT_STUDY, TRUE);

delete pDS;
}


LDicomDS::IsVolatileElement

#include "Ltdic.h"

L_BOOL LDicomDS::IsVolatileElement(pElement)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

Determines whether the specified element is volatile.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure.

Returns

TRUE | The element is volatile.
FALSE | The element is not volatile.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Working with Data Sets

Example

/* This example checks if an element is volatile */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->InitDS(CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, DS_LITTLE_ENDIAN | DS_EXPLICIT_VR);

pElement = pDS->GetFirstElement(pElement, FALSE, TRUE);

if (pDS->IsVolatileElement(pElement))
{
MessageBox(NULL, "Volatile", "Notice", MB_OK);
}

delete pDS;
}


LDicomDS::LoadDS

#include "Ltdic.h"

L_UINT16 LDicomDS::LoadDS(pszName, nFlags)

L_CHAR * pszName; | /* file name */
L_UINT16 nFlags; | /* flags that indicate file characteristics */

Loads the Data Set from the specified file.

Parameter | Description
pszName | Character string that contains the name of the file.
nFlags | Meta-header flags and Transfer Syntax flags that indicate the file characteristics to use when loading the file. Possible values for the Meta-header flags are:
 | Value | Meaning
 | 0 | [0x0000] LEADTOOLS will automatically determine the presence or absence of the Meta-header.
 | DS_METAHEADER_PRESENT | [0x0001] The header is present.
 | DS_METAHEADER_ABSENT | [0x0002] The header is absent.
 | Possible values and combinations for the Transfer Syntax flags are:
 | 0 | [0x0000] LEADTOOLS will automatically determine the Transfer Syntax.
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit.
 | DS_LITTLE_ENDIAN | DS_IMPLICIT_VR
 | DS_LITTLE_ENDIAN | DS_EXPLICIT_VR
 | DS_BIG_ENDIAN | DS_EXPLICIT_VR

DS_LOAD_CLOSE

[0x0200] The file will be loaded and closed.

Any of the available Meta-header flags given above may be combined with any of the available values or combinations of values for the Transfer Syntax flags given above. For example, you may combine DS_METAHEADER_ABSENT with DS_EXPLICIT_VR, or you may combine DS_METAHEADER_PRESENT with DS_BIG_ENDIAN | DS_EXPLICIT_VR, etc.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

You must call LDicomDS::LDicomDS to allocate memory for the Data Set, prior to calling this function.

If you know certain characteristics of the file, you can set those in nFlags. Any characteristic that you don’t set will be automatically determined. For example, if you know that the metaheader is present, but you do not know the byte order, or whether the Value Representation is implicit or explicit, you can set only DS_METAHEADER_PRESENT in nFlags. During loading LEADTOOLS will determine the byte order and whether the byte order is implicit or explicit.

If you do not know any of the characteristics of the file, set nFlags to 0 and LEADTOOLS will automatically determine all the file characteristics and load the file accordingly.

If DS_LOAD_CLOSE is not included in nFlags, the file will remain open until one of the following functions is called: LDicomDS::~LDicomDS, LDicomDS::ResetDS, LDicomDS::InitDS, or LDicomDS::LoadDS (again).

To load a data set from memory, call LDicomDS::LoadDSMemory.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::LoadDSMemory, LDicomDS::SaveDS
Topics: | Working with Data Sets

Example

/* This example loads the Data Set from a file */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

delete pDS;
}


LDicomDS::LoadDSMemory

#include "Ltdic.h"

L_UINT16 EXT_FUNCTION LDicomDS::LoadDSMemory(pBuffer, uBufferSize, nFlags)

L_UCHAR * pBuffer; | /* pointer to the file in memory to be loaded */
L_UINT32 uBufferSize; | /* size of the file in memory (in bytes) */
L_UINT16 nFlags; | /* flags that indicate file characteristics */

Loads a DICOM Data Set from memory.

Parameter | Description
pBuffer | Pointer to the file in memory to be loaded.
uBufferSize | Size of the file in memory (in bytes).
nFlags | Meta-header flags, Transfer Syntax flags and other flags that indicate the file characteristics to use when loading the file. Possible values for the Meta-header flags are:
 | Value | Meaning
 | 0 | [0x0000] LEADTOOLS will automatically determine the presence or absence of the Meta-header.
 | DS_METAHEADER_PRESENT | [0x0001] The header is present.
 | DS_METAHEADER_ABSENT | [0x0002] The header is absent.
 | Possible values and combinations for the Transfer Syntax flags are:
 | 0 | [0x0000] LEADTOOLS will automatically determine the Transfer Syntax.
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit.
 | Any of the available Meta-header flags given above may be combined with any of the available values or combinations of values for the Transfer Syntax flags given above. For example, you may combine DS_METAHEADER_ABSENT with DS_EXPLICIT_VR, or you may combine DS_METAHEADER_PRESENT with DS_BIG_ENDIAN | DS_EXPLICIT_VR, etc.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function DOES NOT make a copy of the memory pointed to by pBuffer. Therefore, DO NOT free this memory as long as you are using the dataset referenced by this instance of the class, or until you have reset the dataset by calling LDicomDS::ResetDS.

Once you have called LDicomDS::ResetDS, you can repopulate the data set by calling LDicomDS::InitDS, LDicomDS::LoadDS, or LDicomDS::LoadDSMemory.

If you know certain characteristics of the DICOM file in memory, you can set those in nFlags. Any characteristic that you don’t set will be automatically determined. For example, if you know that the metaheader is present, but you do not know the byte order, or whether the Value Representation is implicit or explicit, you can set only DS_METAHEADER_PRESENT in nFlags. During loading LEADTOOLS will determine the byte order and whether the byte order is implicit or explicit.

If you do not know any of the characteristics of the DICOM file in memory, set nFlags to 0 and LEADTOOLS will automatically determine all the file characteristics and load the file accordingly.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

See Also

Functions: | LDicomDS::LoadDS, LDicomDS::SaveDS, LDicomDS::ResetDS
Topics: | Data Sets: Creating, Initializing, Loading, and Saving Data Sets
 | Working with Data Sets

Example

L_VOID TestLoadMemory()
{
LDicomDS Dataset;
HANDLE hFile;
L_UCHAR* pBuffer = NULL;
L_UINT32 uBufferSize = 0;
L_BOOL bResult;
L_UINT32 NumberOfBytesRead;
L_UINT16 uDICOMRet;
L_UINT32 nClass;
L_UINT16 nFlags;
L_CHAR szUnknown[]="Unknown Class";
L_CHAR *pClassName;
pDICOMIOD pIOD;

//Create a handle to the DICOM file on disk
hFile = CreateFile( TEXT("D:\\Program Files\\LEAD
 Technologies, Inc\\LEADTOOLS14\\Images\\IMAGE2.dic"),
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
//Get the file size
uBufferSize = GetFileSize(hFile, NULL);
if(uBufferSize == INVALID_FILE_SIZE)
{
CloseHandle(hFile);
return;
}
//Allocate a buffer that will hold the data in the file
pBuffer = (L_UCHAR*) malloc(uBufferSize);
if(pBuffer == NULL)
{
CloseHandle(hFile);
return;
}
//Read the file data into a buffer
bResult = ReadFile(hFile, pBuffer, uBufferSize, &NumberOfBytesRead,
 NULL);
if(bResult == FALSE)
{
free(pBuffer);
CloseHandle(hFile);
return;
}
//Load DICOM file from memory
uDICOMRet = Dataset.LoadDSMemory(pBuffer,
 uBufferSize, 0);
if(uDICOMRet != DICOM_SUCCESS)
{
free(pBuffer);
CloseHandle(hFile);
return;
}
//Get the information about the DICOM file.
Dataset.GetInfoDS(&nClass,
 &nFlags);
pIOD = LDicomIOD::FindClass(nClass);
if (pIOD != NULL)
{
pClassName = pIOD->pszName;
}
else
{
pClassName = szUnknown;
}
MessageBox(NULL, pClassName, "Notice", MB_OK);

//Make sure to cleanup
free(pBuffer);
CloseHandle(hFile);
}


LDicomDS::OnConvertLEADAnnObjToDicomAnnObj

#include "Ltdic.h"

virtual L_UINT16 LDicomDS::OnConvertLEADAnnObjToDicomAnnObj(pGraphicObject, pTextObject)

const pDICOMGRAPHICOBJECT pGraphicObject; | /* pointer to a DICOM graphic annotation object */
const pDICOMTEXTOBJECT pTextObject; | /* pointer to a DICOM text annotation object */

Called for each DICOM annotation object generated by LDicomDS::ConvertLEADAnnObjToDicomAnnObjs.

Parameter | Description
pGraphicObject | Pointer to a DICOMGRAPHICOBJECT structure, which will hold the attributes of the generated DICOM graphic annotation object. If set to NULL, then the resulting object is a DICOM text annotation and in this case pTextObject cannot be NULL.
pTextObject | Pointer to a DICOMTEXTOBJECT structure, which will hold the attributes of the generated DICOM text annotation object. If set to NULL then the resulting object is a DICOM graphic annotation and in this case pGraphicObject cannot be NULL.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes

Comments

As a result of calling LDicomDS::ConvertLEADAnnObjToDicomAnnObjs one or more DICOM annotation objects will be generated. For each of the resulting objects this overridable virtual function will get called once. If the resulting object is a "Graphic Object", then the parameter pGraphicObject will point to a DICOMGRAPHICOBJECT structure, which describes the new object, and in this case pTextObject will be set to NULL.

If the resulting object is a "Text Object", then the parameter pTextObject will point to a DICOMTEXTOBJECT structure, which describes the new object, and in this case pGraphicObject will be set to NULL. Suppose that a LEAD annotation object will get converted into two DICOM graphic objects and one DICOM text object. This means that this function will get called three times, it will be called twice with pGraphicObject != NULL and pTextObject == NULL and will be called once with pGraphicObject == NULL and pTextObject != NULL.

pTextObject and pGraphicObject cannot both be valid or both be NULL at the same time.

The implementation of the LDicomDS class for the function OnConvertLEADAnnObjToDicomAnnObj simply returns DICOM_SUCCESS. In order to make use of this callback function, you should create a new class derived from the LDicomDS class and override the function OnConvertLEADAnnObjToDicomAnnObj, providing the desired implementation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

virtual L_UINT16 OnConvertLEADAnnObjToDicomAnnObj( const pDICOMGRAPHICOBJECT pGraphicObject,const pDICOMTEXTOBJECT pTextObject)
{
if (pGraphicObject)
{
MessageBox("A Graphical object has been created.");
}
else if (pTextObject)
{
MessageBox("A Textual object has been created.");
}
}


LDicomDS::RemoveAllGraphicObjects

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllGraphicObjects(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Removes all graphical annotation objects under the specified "Graphic Annotation Sequence" (0070,0001) item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllGraphicObjects (LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveAllGraphicObjects(PresStateDS.FindFirstGraphicAnnSQItem());
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"All graphical objects have been successfully removed.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveAllImageRefFromAllLayers

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllImageRefFromAllLayers()

Removes all the referenced images from the "Referenced Image Sequence" in all Graphic Annotation Sequence items.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes all the referenced images from the "Referenced Image Sequence" (0008,1140) in all "Graphic Annotation Sequence" items.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::GetLayerImageRefElement, Class Members, LDicomDS::GetLayerImageRefSOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllRefImages(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveAllImageRefFromAllLayers();
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"All referenced Images have been removed.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveAllImageRefsFromLayer

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllImageRefsFromLayer(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Removes all the referenced images from the "Referenced Image Sequence" in the specified "Graphic Annotation Sequence" item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes all the referenced images from the "Referenced Image Sequence" (0008,1140) in the specified "Graphic Annotation Sequence" (0070,0001) item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members, LDicomDS::GetLayerImageRefSOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllReferencedImageFromLayer(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
L_UINT16 nRet = PresStateDS. RemoveAllImageRefsFromLayer (pGraphicAnnSQItem);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"All referenced Images have been removed successfully from the Graphic Annotation Sequence item.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveAllLayers

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllLayers(bAnnSequence = FALSE)

L_BOOL bAnnSequence;

/* flags */

Removes all layers under the "Graphic Layer Module".

Parameter | Description
bAnnSequence | Boolean flag which indicates whether to remove the items under the "Graphic Annotation Sequence" which correspond to the layers. Possible values are:
 | Value | Meaning
 | TRUE | Remove the items under the "Graphic Annotation Sequence" which correspond to the layers.
 | FALSE | Only remove the layers.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes all items under the "Graphic Layer Sequence"(0070,0060).

If the bAnnSequence parameter is set to TRUE then the function will clean any elements under the "Graphic Annotation Sequence" which are related to the removed layers.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllLayers(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveAllLayers(TRUE);
if(nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"All layers have been removed.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveAllPresStateImageRefs

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllPresStateImageRefs()

Removes all "Referenced Image Sequence(s)", which belong to the "Referenced Series Sequence" under the "Presentation State Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will remove all "Referenced Image Sequence(s)" (0008,1140), which belong to the "Referenced Series Sequence" (0008,1115) under the "Presentation State Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllReferencedImages(LDicomDS& PresStateDS)
{

L_UINT16 nRet = PresStateDS.RemoveAllPresStateImageRefs();
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Images have been successfully removed!",
"Success",
MB_OK);
}
}


LDicomDS::RemoveAllTextObjects

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveAllTextObjects(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Removes all text annotation objects under the specified "Graphic Annotation Sequence" (0070,0001) item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Removes all graphical annotation objects under the specified "Graphic Annotation Sequence" (0070,0001) item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::RemoveTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllTextualObjects (LDicomDS& PresStateDS)
{
pDICOMELEMENT pElement = PresStateDS.FindFirstGraphicAnnSQItem();

L_UINT16 nRet = PresStateDS.RemoveAllTextObjects (pElement);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"All textual objects have been successfully removed.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveGraphicObject

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveGraphicObject(pGraphicAnnSQItem, uGraphicObjIndex)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uGraphicObjIndex; | /* graphic object index */

Removes the graphic annotation object at the specified index.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uGraphicObjIndex | Zero-based index of the graphic annotation object to be removed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will remove the graphical annotation object at the specified index in the specified "Graphic Annotation Sequence" (0070,0001) item. The index is zero-based.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::SetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveFirstGraphicObject(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveGraphicObject(PresStateDS.FindFirstGraphicAnnSQItem(), 0);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Graphical Object has been successfully removed!",
"Note",
MB_OK);
}
}


LDicomDS::RemoveImageRefFromLayer

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveImageRefFromLayer(pGraphicAnnSQItem, pszImageSOPInstance)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_CHAR* pszImageSOPInstance; | /* Referenced image SOP instance UID */

Removes a referenced image from the "Referenced Image Sequence" in the specified "Graphic Annotation Sequence" item.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pszImageSOPInstance | SOP instance UID of the image to be removed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes a referenced image from the "Referenced Image Sequence" (0008,1140) in the specified "Graphic Annotation Sequence" (0070,0001) item.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members, LDicomDS::GetLayerImageRefSOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveReferencedImageFromLayer(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
L_CHAR* pszSOPInstanceUID = PresStateDS.GetPresStateImageRefSOPInstance(PresStateDS.FindFirstPresStateRefSeriesItem(),0);
L_UINT16 nRet = PresStateDS. RemoveImageRefFromLayer (pGraphicAnnSQItem, pszSOPInstanceUID);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Referenced Image has been removed successfully from the Graphic Annotation Sequence item.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveLayerByIndex

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveLayerByIndex(uLayerIndex, bAnnSequence)

L_UINT uLayerIndex; | /* index of the layer to be removed */
L_BOOL bAnnSequence; | /* flag */

Deletes all the elements that describe a layer.

Parameter | Description
uLayerIndex | Index of the layer to be removed from the Graphic Layer Module.
bAnnSequence | Boolean flag which indicates whether to remove the items under the "Graphic Annotation Sequence" which correspond to this layer.
 | Value | Meaning
 | TRUE | Remove the items under the "Graphic Annotation Sequence" which correspond to this layer.
 | FALSE | Only remove the layer.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes the item, which represents a layer under the "Graphic Layer Sequence"(0070,0060).

If the bAnnSequence parameter is set to TRUE then the function will clean any elements under the "Graphic Annotation Sequence" which correspond to the layer being removed.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveFirstLayer(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveLayerByIndex(0,TRUE);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Layer has been removed successfully.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveLayerByName

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveLayerByName(pszLayerName, bAnnSequence)

L_CHAR* pszLayerName; | /* name of layer to be removed */
L_BOOL bAnnSequence; | /* flag */

Deletes all the elements that describe a layer.

Parameter | Description
pszLayerName | The name of the layer to be removed from the Graphic Layer Module.
bAnnSequence | Boolean flag which indicates whether to remove the items under the "Graphic Annotation Sequence" which correspond to this layer. Possible values are:
 | Value | Meaning
 | TRUE | Remove the items under the "Graphic Annotation Sequence" which correspond to this layer.
 | FALSE | Only remove the layer.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes the item, which represents a layer under the "Graphic Layer Sequence"(0070,0060).

If the bAnnSequence parameter is set to TRUE then the function will clean any elements under the "Graphic Annotation Sequence" which correspond to the layer being removed.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveLayerItem(LDicomDS& PresStateDS, L_CHAR* pszLayerName)
{
L_UINT16 nRet = PresStateDS.RemoveLayerByName(pszLayerName);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Layer has been removed successfully.",
"Note",
MB_OK);
}
}


LDicomDS::RemoveLayerGraphicObjects

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveLayerGraphicObjects(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Removes all graphical annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes all graphical annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllGraphicObjectsInAnnItem(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveLayerGraphicObjects(PresStateDS.FindFirstGraphicAnnSQItem());
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Graphic objects have been successfully removed",
"Note",
MB_OK);
}
}


LDicomDS::RemoveLayerTextObjects

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveLayerTextObjects(pGraphicAnnSQItem)

pDICOMELEMENT pGraphicAnnSQItem;

/* pointer to a DICOMELEMENT structure */

Removes all text annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes all text annotation objects, which correspond to the specified item under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveAllTextObjectsInAnnItem(LDicomDS& PresStateDS)
{
L_UINT16 nRet = PresStateDS.RemoveLayerTextObjects(PresStateDS.FindFirstGraphicAnnSQItem());
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Graphic objects have been successfully removed.",
"Note",
MB_OK);
}
}


LDicomDS::RemovePresStateImageRefBySOPInstance

#include "Ltdic.h"

L_UINT16 LDicomDS::RemovePresStateImageRefBySOPInstance( pszSOPInstanceUID)

L_CHAR* pszSOPInstanceUID;

/* SOP Instance UID of the image to be removed */

Removes an item from the "Referenced Image Sequence" under the "Presentation State Module".

Parameter | Description
pszSOPInstanceUID | SOP Instance UID of the image to be removed from the IOD. Returns

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function removes the reference to an image (SOP instance), by removing the item, which represents that instance under the "Referenced Image Sequence" in the "Presentation State Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetPresStateInfo, LDicomDS::GetPresStateInfo, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveReferencedImage(LDicomDS& PresStateDS, L_CHAR* pszSOPInstanceUID)
{
L_UINT16 nRet = PresStateDS.RemovePresStateImageRefBySOPInstance (pszSOPInstanceUID);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Image has been successfully removed!",
"Success",
MB_OK);
}
}


LDicomDS::RemoveTextObject

#include "Ltdic.h"

L_UINT16 LDicomDS::RemoveTextObject(pGraphicAnnSQItem, uTextObjIndex)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uTextObjIndex; | /* text object index */

Removes the text annotation object at the specified index.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uTextObjIndex | Zero-based index of the text annotation object to be removed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will remove the text annotation object at the specified index in the specified "Graphic Annotation Sequence" (0070,0001) item.The index is zero-based.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::SetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::RemoveAllTextObjects, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID RemoveFirstTextualObject(LDicomDS& PresStateDS)
{
pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
L_UINT16 nRet = PresStateDS.RemoveTextObject(pGraphicAnnSQItem, 0);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Textual Object has been successfully removed!",
"Note",
MB_OK);
}
}


LDicomDS::ResetDS

#include "Ltdic.h"

L_VOID LDicomDS::ResetDS(L_VOID)

Removes all items from the Data Set.

Returns

None.

Comments

To allocate the memory for a Data Set, call LDicomDS::LDicomDS.

To create a Data Set that includes elements for a specific class, use LDicomDS::InitDS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::DeleteElement, LDicomDS::DeleteModule
Topics: | Working with Data Sets

Example

/* This example removes all elements from the Data Set */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pDS->ResetDS();

delete pDS;
}


LDicomDS::SaveCertificate

#include "ltdic.h"

L_UINT16 LDicomDS::SaveCertificate(pSignatureItem, pszFilename, uFormat = DICOM_CERTIFICATE_FORMAT_PEM)

pDICOMELEMENT pSignatureItem; | /* pointer to a Digital Signatures Sequence Item */
const L_CHAR* pszFilename; | /* character string that contains the file name */
L_UINT16 uFormat; | /* format */

Saves the signer’s digital certificate associated with the specified Digital Signature to a file.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature. This cannot be NULL.
pszFilename | Character string that contains the name of the file to which the digital certificate should be saved. If the file already exists, it will be overwritten.
uFormat | The format in which the digital certificate should be saved. Possible values are:
 | Value | Meaning
 | DICOM_CERTIFICATE_FORMAT_PEM | [0] Base-64 encoded X.509 Privacy Enhanced Mail (PEM).
 | DICOM_CERTIFICATE_FORMAT_DER | [1] Distinguished Encoding Rules (DER) encoded binary X.509.

Returns

DICOM_SUCCESS | The function was successful.
<> DICOM_SUCCESS | An error occurred. Refer to Return Codes.

Comments

The Certificate of Signer (0400,0115) under the Digital Signatures Sequence Item of a Digital Signature contains the digital certificate of the entity that produced the Digital Signature. You can use this function to save this digital certificate to a file.

The following functions can also be used to get information about the Digital Signature:

LDicomDS::GetSignatureUID

LDicomDS::GetSignatureDateTime

LDicomDS::GetSignedElementsCount

LDicomDS::GetSignedElement

LDicomDS::GetMacTransferSyntax

LDicomDS::GetMacAlgorithm

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::GetSignatureUID, LDicomDS::GetSignatureDateTime, LDicomDS::GetSignedElementsCount, LDicomDS::GetSignedElement, LDicomDS::GetMacTransferSyntax, LDicomDS::GetMacAlgorithm, Class Members
Topics: | Working with Digital Signatures

Example

For an example, refer to LDicomDS::VerifySignature.


LDicomDS::SaveDS

#include "Ltdic.h"

L_UINT16 LDicomDS::SaveDS(pszName, nFlags)

L_CHAR * pszName; | /* file name */
L_UINT16 nFlags; | /* flags that indicate file characteristics */

Saves the Data Set to the specified file.

Parameter | Description
pszName | Character string that contains the name of the file.
nFlags | Meta-header flags, Transfer Syntax flags and other flags that indicate file characteristics to use when saving the file. Possible values for Meta-header flags are.
 | Value | Meaning
 | 0 | [0x0000] Save the Data Set using the characteristics used when loading the Data Set. This can be used with compressed or uncompressed images.
 | DS_METAHEADER_PRESENT | [0x0001] The header is present. This can be used with compressed or uncompressed images.
 | DS_METAHEADER_ABSENT | [0x0002] The header is absent. This can be used only with uncompressed images.
 | Possible values and combinations for the Transfer Syntax flags are:
 | 0 | [0x0000] Save the Data Set using the characteristics used when loading the Data Set. This can be used with compressed or uncompressed images.
 | DS_LITTLE_ENDIAN | [0x0004] Byte order is Little Endian. This can be used with compressed or uncompressed images.
 | DS_BIG_ENDIAN | [0x0008] Byte order is Big Endian. This can be used only with uncompressed images.
 | DS_IMPLICIT_VR | [0x0010] The Value Representation is implicit. This can be used only with uncompressed images.
 | DS_EXPLICIT_VR | [0x0020] The Value Representation is explicit. This can be used with compressed or uncompressed images.
 | The following Transfer Syntax flag combinations can be used only with uncompressed images:
 | DS_LITTLE_ENDIAN | DS_IMPLICIT_VR
 | DS_BIG_ENDIAN | DS_EXPLICIT_VR
 | The following Transfer Syntax flag combination can be used with compressed or uncompressed images:
 | DS_LITTLE_ENDIAN | DS_EXPLICIT_VR
 | Possible values and combinations for other flags are:
 | 0 | [0x0000] Save the Data Set using the characteristics used when loading the Data Set.
 | DS_GROUP_LENGTHS | [0x0040] Include an entry in the file for each group with the group number and the number of elements that group has.
 | DS_LENGTH_EXPLICIT | [0x0080] The length of a sequence (in bytes) is encoded as a 32-bit integer and no Sequence delimitation item is included at the end of the sequence.
 | DS_EXCLUDE_METAHEADER_GROUP | [0x0100] Elements with the tag number 0x0002xxxx will not be saved in the file.

DS_GROUP_LENGTHS | DS_LENGTH_EXPLICIT

Any of the available Meta-header flags options above may be combined with any of the available options for the Transfer Syntax flags and other flags given above, based on whether the images are compressed or uncompressed. For example, you may combine DS_METAHEADER_ABSENT with DS_LITTLE_ENDIAN | DS_IMPLICIT_VR and DS_GROUP_LENGTHS | DS_LENGTH_EXPLICIT when using uncompressed images, or you may combine DS_METAHEADER_PRESENT with DS_LITTLE_ENDIAN | DS_EXPLICIT_VR and DS_GROUP_LENGTHS | DS_LENGTH_EXPLICIT when using compressed images.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If the Data Set was loaded from a file, the file characteristics were included from the file. If you wish to use these same characteristics, save the Data Set with nFlags set to 0.

If you wish to specify the file characteristics for saving the file, set the characteristics using the possible values listed above for nFlags.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::LoadDSMemory, LDicomDS::LoadDS
Topics: | Working with Data Sets

Example

/* This example initializes the Data Set and save it in a file */

L_VOID Test()
{
LDicomDS *pDS;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_CT_IMAGE_STORAGE, 0);

pDS->SaveDS("c:\\ltwin13\\images\\temp.dic", 0);

delete pDS;
}


LDicomDS::SetAgeValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetAgeValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pVALUEAGE pValue; | /* pointer to a VALUEAGE structure */
L_UINT32 nCount; | /* number of values to set */

Sets the Age value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a VALUEAGE structure that contains the Age value(s) to set. If you want to set multiple values in the Value Field, put all Age values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the Age values in pValue and set nCount to the appropriate number.

Returns

TRUE | The Age value(s) were set successfully.
FALSE | Could not set the Age value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the Age values in an array of VALUEAGE structures, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three Age values in the Value Field of the Data Element, create an array of VALUEAGE structures containing the three Age values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_AS. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetStringValue, LDicomDS::SetDoubleValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetBinaryValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetBinaryValue(pElement, pValue, nLength)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_VOID * pValue; | /* pointer to a buffer */
L_UINT32 nLength; | /* length of the buffer */

Sets the binary value of an element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Buffer that contains the binary value to set.
nLength | Length, in bytes, of the buffer you allocated.

Returns

TRUE | The binary value of the Data Element was set successfully.
FALSE | Could not set the binary value of the Data Element.

Comments

This function overwrites the value of the Data Element. The Value Length of the Data Element is then equal to nLength.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

/* This example sets the value for an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
L_CHAR szText[]="Jimmy^Green";

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_PATIENT_NAME, FALSE);
if (pElement != NULL)
{
pDS->SetBinaryValue(pElement, szText, strlen(szText));
}

delete pDS;
}


LDicomDS::SetCharValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetCharValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR * pValue; | /* pointer to a character */
L_UINT32 nCount; | /* number of values to set */

Sets the character value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a character or character string that contains the character value(s) to set. If you want to set multiple values in the Value Field, put all character values in this string and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the character values in pValue and set nCount to the appropriate number.

Returns

TRUE | The character value(s) were set successfully.
FALSE | Could not set the character value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the character values in pValue and set nCount to the corresponding number of entries. For example, if you wish to set three character values in the Value Field of the Data Element, put all three characters in pValue and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

A character has a standard size of one byte. When multiple characters are in pValue, the first byte of data is the first character, the second byte of data is the second character, etc. Therefore no delimiters are needed.

This function can be called only if the Value Representation of the Data Element is VR_OB, VR_SQ, or VR_UN. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

/* This example sets the value for an element */

L_VOID SetValue(LDicomDS *pDS, pDICOMELEMENT pElement, L_VOID *pValue, L_UINT32 nCount)
{
switch (pElement->nVR)
{
case VR_OB: // Other Byte String
case VR_UN: // Unknown
pDS->SetCharValue(pElement, (L_CHAR *)pValue, nCount);
break;

case VR_SS: // Signed Short
case VR_US: // Unsigned Short
case VR_OW: // Other Word String
pDS->SetShortValue(pElement, (L_INT16 *)pValue, nCount);
break;

case VR_SL: // Signed Long
case VR_IS: // Integer String
case VR_UL: // Unsigned Long
case VR_AT: // Attribute Tag
pDS->SetLongValue(pElement, (L_INT32 *)pValue, nCount);
break;

case VR_FL: // Floating Point Single
pDS->SetFloatValue(pElement, (L_FLOAT *)pValue, nCount);
break;

case VR_FD: // Floating Point Double
case VR_DS: // Decimal String
pDS->SetDoubleValue(pElement, (L_DOUBLE *)pValue, nCount);
break;

case VR_CS: // Code String
case VR_SH: // Short String
case VR_LO: // Long String
case VR_AE: // Application Entity
case VR_LT: // Long Text
case VR_ST: // Short Text
case VR_UI: // Unique Identifier
case VR_UT: // Unlimited Text
case VR_PN: // Person Name
pDS->SetStringValue(pElement, (L_CHAR *)pValue, nCount);
break;

case VR_AS: // Age String
pDS->SetAgeValue(pElement, (pVALUEAGE)pValue, nCount);
break;

case VR_DA: // Date
pDS->SetDateValue(pElement, (pVALUEDATE)pValue, nCount);
break;

case VR_TM: // Time
pDS->SetTimeValue(pElement, (pVALUETIME)pValue, nCount);
break;

case VR_DT: // Date Time
pDS->SetDateTimeValue(pElement, (pVALUEDATETIME)pValue, nCount);
break;
}
}

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);
pDS->InitDS( CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED, 0);

pElement = pDS->FindFirstElement(NULL, TAG_IMAGE_TYPE, FALSE);
if (pElement != NULL)
{
SetValue(pDS, pElement, "ORIGINAL\0PRIMARY", 2);
}

delete pDS;
}


LDicomDS::SetConvertValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetConvertValue(pElement, pszText, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR *pszText; | /* character string */
L_UINT32 nCount; | /* number of items in pszText */

Converts a string and sets the value of an element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pszText | Character string that contains the string to be converted to 1 or more values.
nCount | Number of values in pszText.

Returns

TRUE | Function completed successfully.
FALSE | Function did not complete successfully.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetConvertValue
Topics: | Working with Data Sets

Example

/* This example sets the value of an element */

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->InitDS( CLASS_NM_IMAGE_STORAGE, 0);

pElement = pDS->FindFirstElement(NULL, TAG_STUDY_DATE, FALSE);
pDS->SetConvertValue(pElement, "01/02/1999", 1);

pElement = pDS-> FindFirstElement(NULL, TAG_IMAGE_TYPE, FALSE);
pDS->SetConvertValue(pElement, "DERIVED\\PRIMARY", 2);

pElement = pDS->FindFirstElement(NULL, TAG_IMAGE_POSITION_PATIENT, FALSE);
pDS->SetConvertValue(pElement, "0.123\\0.456\\1.789", 3);

delete pDS;
}


LDicomDS::SetDateTimeValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetDateTimeValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pVALUEDATETIME pValue; | /* pointer to a VALUEDATETIME structure */
L_UINT32 nCount; | /* number of values to set */

Sets the Date-Time value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a VALUEDATETIME structure that contains the Date-Time value(s) to set. If you want to set multiple values in the Value Field, put all Date-Time values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the Date-Time values in pValue and set nCount to the appropriate number.

Returns

TRUE | The Date-Time value(s) were set successfully.
FALSE | Could not set the Date-Time value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the Date-Time values in an array of VALUEDATETIME structures, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three Date-Time values in the Value Field of the Data Element, create an array of VALUEDATETIME structures containing the three Date-Time values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_DT. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetStringValue, LDicomDS::SetDoubleValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetDateValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetDateValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pVALUEDATE pValue; | /* pointer to a VALUEDATE structure */
L_UINT32 nCount; | /* number of values to set */

Sets the Date value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a VALUEDATE structure that contains the Date value(s) to set. If you want to set multiple values in the Value Field, put all Date values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the Date values in pValue and set nCount to the appropriate number.

Returns

TRUE | The Date value(s) were set successfully.
FALSE | Could not set the Date value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the Date values in an array of VALUEDATE structures, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three Date values in the Value Field of the Data Element, create an array of VALUEDATE structures containing the three Date values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_DA. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetStringValue, LDicomDS::SetDoubleValue, LDicomDS::SetAgeValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetDebugDS

#include "Ltdic.h"

L_BOOL LDicomDS::SetDebugDS(pfnCallback, pUserData)

CONFORMANCECALLBACK pfnCallback; | /* pointer to a callback function */
L_VOID * pUserData; | /* pointer to additional parameters */

This function is for debugging purposes.

Parameter | Description
pfnCallback | Optional callback function. If you do not provide a callback function, use NULL as the value of this parameter. If you do provide a callback function, use the function pointer as the value of this parameter. The callback function must adhere to the function prototype described in CONFORMANCECALLBACK Function.
pUserData | Void pointer that you can use to pass one or more additional parameters that the callback function needs.
 | To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.
 | If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

TRUE | The Data Set conforms.
FALSE | The Data Set does not conform.

Comments

The DICOM toolkit offers extensive debugging and status information by optionally notifying the user of each internal error that occurs. To enable this feature call the function LDicomDS::SetDebugDS to specify the callback function which will be called each time the user needs to be notified. This feature is disabled by default.

When you access an invalid element, then the callback function will be called to notify you of the error. This may be seen when calling LDicomDS::GetCountImage in the example below. For any error that is found, nFlags should be set with the appropriate error and False returned from the callback function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | CONFORMANCECALLBACK
Topics: | Working with Data Sets

Example

L_BOOL DebugCallback (pDICOMELEMENT pElement, L_UINT16 nFlags, L_VOID *pUserData);
L_VOID TestDebug2(HWND hWnd)
{
LDicomDS DS;
L_UINT32 lCount;
pDICOMELEMENT pElement=(pDICOMELEMENT)0x1234; /* init the element to a bad value */
DS.InitDS( CLASS_CR_IMAGE_STORAGE, 0);
/* set the debug callback */
DS.SetDebugDS(DebugCallback, (L_VOID L_FAR*)hWnd);
/* to access the invalid element */
lCount = DS.GetCountImage(pElement);
return;
}
L_BOOL DebugCallback (pDICOMELEMENT pElement, L_UINT16 nFlags, L_VOID *pUserData)
{
HWND hWnd = (HWND)pUserData;
if(nFlags == CALLBACK_ERROR_ELEMENT)
MessageBox(hWnd, "You accessed an invalid element", "Debug", MB_OK);
return TRUE;
}


LDicomDS::SetDoubleValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetDoubleValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_DOUBLE * pValue; | /* pointer to a double */
L_UINT32 nCount; | /* number of values to set */

Sets the double value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a double that contains the double value(s) to set. If you want to set multiple values in the Value Field, put all double values in pValue and set nCount to the appropriate number of values
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the double values in pValue and set nCount to the appropriate number.

Returns

TRUE | The double value(s) were set successfully.
FALSE | Could not set the double value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the double values in an array of double values, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three double values in the Value Field of the Data Element, create an array of doubles containing the three double values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_DS or VR_FD. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetFloatValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetFloatValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_FLOAT * pValue; | /* pointer to a float */
L_UINT32 nCount; | /* number of values to set */

Sets the float value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a float that contains the float value(s) to set. If you want to set multiple values in the Value Field, put all float values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the float values in pValue and set nCount to the appropriate number.

Returns

TRUE | The float value(s) were set successfully.
FALSE | Could not set the float value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the float values in an array of float values, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three float values in the Value Field of the Data Element, create an array of floats containing the three float values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_FL. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetGraphicObjectInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::SetGraphicObjectInfo(pGraphicAnnSQItem, uGraphicObjectIndex, pGraphicObject)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uGraphicObjectIndex; | /* graphic annotation object index */
pDICOMGRAPHICOBJECT pGraphicObject; | /* pointer to the graphic annotation object attributes structure */

Updates the attributes of a graphic annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uGraphicObjectIndex | Index of the graphic annotation object to be updated
pGraphicObject | Structure containing the graphic annotation object attributes.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pGraphicObject-> uStructSize to be sizeof(DICOMGRAPHICOBJECT) and initialize all the structure members.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateGraphicObject, LDicomDS::RemoveGraphicObject, LDicomDS::GetGraphicObjectInfo, LDicomDS::GetGraphicObjectCount, LDicomDS::RemoveAllGraphicObjects, LDicomDS::GetGraphicObjPointCount, LDicomDS::GetGraphicObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID UpdateFirstGraphicObject(LDicomDS& PresStateDS)
{
DICOMGRAPHICOBJECT GraphicObject;
L_UINT nCount = 1;

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem();
pDICOMANNPOINT pAnnPoints = new DICOMANNPOINT[nCount];

DICOMANNPOINT Point;

Point.fX = (L_FLOAT)8.1;
Point.fY = (L_FLOAT)8.3;

pAnnPoints[0] = Point;

memset(&GraphicObject, 0, sizeof(DICOMGRAPHICOBJECT));
GraphicObject.bFilled = TRUE;
GraphicObject.uType = DICANN_TYPE_POINT;
GraphicObject.pszLayerName = "First Layer";
GraphicObject.nPointCount = nCount;
GraphicObject.uUnits = DICANN_UNIT_PIXEL;
GraphicObject.pAnnPoints = pAnnPoints;
GraphicObject.uStructSize = sizeof(DICOMGRAPHICOBJECT);

L_UINT16 nRet = PresStateDS.SetGraphicObjectInfo(pGraphicAnnSQItem, 0, &GraphicObject);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Graphic Object has been successfully updated!",
"Note",
MB_OK);
}
if (pAnnPoints)
{
delete [] pAnnPoints;
}
}


LDicomDS::SetImage

#include "Ltdic.h"

L_UINT16 LDicomDS::SetImage(pElement, pBitmap, nCompression, nPhotometric, nBitsPerPixel, nQFactor, uFlags, pfnCallback, pUserData)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pBITMAPHANDLE pBitmap; | /* pointer to the bitmap handle */
L_INT32 nCompression; | /* compression type */
L_INT32 nPhotometric; | /* photometric constant */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nQFactor; | /* quality factor */
L_UINT uFlags | /* flags */
FILESAVECALLBACK pfnCallback; | /* optional callback function */
L_VOID L_FAR *pUserData; | /* pointer to more parameters for the callback */

Replaces the image(s) in a Pixel Data element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pBitmap | Pointer to the bitmap handle that references the image to set.
nCompression | Value that indicates the type of compression to use. Possible values are:
 | Value | Meaning
 | IMAGE_COMPRESSION_NONE | [0x00] No compression.
 | IMAGE_COMPRESSION_RLE | [0x01] RLE compression.
 | IMAGE_COMPRESSION_JPEG_LOSSLESS | [0x02] JPEG LossLess compression.
 | IMAGE_COMPRESSION_JPEG_LOSSY | [0x03] JPEG Lossy compression.
 | IMAGE_COMPRESSION_J2K_LOSSLESS | [0x06] JPEG 2000 lossless compression.
 | IMAGE_COMPRESSION_J2K_LOSSY | [0x07] JPEG 2000 lossy compression.
nPhotometric | Photometric constant. Possible values are:
 | Value | Meaning
 | IMAGE_PHOTOMETRIC_MONOCHROME2 | [0x01] 8- or 16-bits per pixel, grayscale image.
 | IMAGE_PHOTOMETRIC_PALETTE_COLOR | [0x02] 8 bits per pixel, palettized color image.
 | IMAGE_PHOTOMETRIC_RGB | [0x03] 24-bits per pixel, RGB color image.
nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:

 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap
nQFactor | The quality factor (Q factor) is a number that determines the degree of loss in the compression process. You can set a value from 2 to 255, where 2 is the highest quality and 255 is the most compression.

uFlags | Flags which control the behaviour of this function. Possible values are:
 | Value | Meaning
 | DICOM_SETIMAGE_AUTO_SAVE_OVERLAYS | [0x0001]If set, the function will automatically insert the overlays associated with the input bitmap into the dataset.
 | DICOM_SETIMAGE_AUTO_SET_VOI_LUT | [0x0002]If set, the function will automatically add a VOI LUT to the dataset.
 | DICOM_SETIMAGE_MINIMIZE_JPEG_SIZE | [0x0004] If set, and the nCompression parameter is IMAGE_COMPRESSION_JPEG_LOSSLESS or IMAGE_COMPRESSION_JPEG_LOSSY, the JPEG compression engine will use optimized Huffman tables, which results in better compression, but slower speed.

pfnCallback | Optional callback function for additional processing.
 | If you do not provide a callback function, use NULL as the value of this parameter.
 | If you do provide a callback function, use the function pointer as the value of this parameter.
 | The callback function must adhere to the function prototype described in FILESAVECALLBACK Function.
pUserData | Void pointer that you can use to pass one or more additional parameters that the callback function needs.
 | To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.
 | If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function replaces all the images in the Pixel Data Element with the image referenced by pBitmap.

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically replace the images of the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element in which the images will be replaced.

If you wish to replace only one image within the Pixel Data Element, you must use LDicomDS::DeleteImage and LDicomDS::InsertImage.

For a table of possible Compression, Photometric, BitsPerPixel, and Quality Factor combinations, refer to Compression Table.

For more options when using the JPEG 2000 compression, refer to LDicomDS::SetJ2KOptions.

This function will either insert, delete or update one or more of the following elements:

Tag | Name
(7FE0,0010) | Pixel Data
(0002,0010) | Transfer Syntax UID
(0028,0101) | Bits Stored
(0028,0100) | Bits Allocated
(0028,0102) | High Bit
(0028,0103) | Pixel Representation
(0028,0010) | Rows
(0028,0011) | Columns
(0028,0002) | Samples per Pixel
(0028,0006) | Planar Configuration
(0028,0004) | Photometric Interpretation
(0028,0106) | Smallest Image Pixel Value
(0028,0107) | Largest Image Pixel Value
(0028,1101) | Red Palette Color Lookup Table Descriptor
(0028,1102) | Green Palette Color Lookup Table Descriptor
(0028,1103) | Blue Palette Color Lookup Table Descriptor
(0028,1201) | Red Palette Color Lookup Table Data
(0028,1202) | Green Palette Color Lookup Table Data
(0028,1203) | Blue Palette Color Lookup Table Data
(0028,1199) | Palette Color Lookup Table UID
(0028,1052) | Rescale Intercept
(0028,1053) | Rescale Slope
(0028,1054) | Rescale Type
(0028,1221) | Segmented Red Palette Color Lookup Table Data
(0028,1222) | Segmented Green Palette Color Lookup Table Data
(0028,1223) | Segmented Blue Palette Color Lookup Table Data
(0028,3010) | VOI LUT Sequence
(0028,1050) | Window Center
(0028,1051) | Window Width
(0028,1055) | Window Center & Width Explanation
(0028,0008) | Number of Frames
(0054,0070) | Time Slot Vector

This function is indifferent to the pixel data restrictions imposed by the various DICOM IOD classes, for example this function will allow the user to insert a colored image into a "Digital X-Ray Image Storage" dataset.

This function will always insert a "Number of Frames" (0028, 0008) element and set its value.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetImageList
Topics: | Working with Data Sets

Example

/* This example sets an image in Data Set */

L_VOID Test(pBITMAPHANDLE pBitmap)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->SetImage(pElement, pBitmap, IMAGE_COMPRESSION_NONE,
IMAGE_PHOTOMETRIC_MONOCHROME1, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT, NULL, NULL);
}

delete pDS;
}


LDicomDS::SetImageList

#include "Ltdic.h"

L_UINT16 LDicomDS::SetImageList(pElement, hList, nCompression, nPhotometric, nBitsPerPixel, nQFactor, uFlags)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
HBITMAPLIST hList; | /* handle to the list of bitmaps */
L_INT32 nCompression; | /* compression type */
L_INT32 nPhotometric; | /* photometric constant */
L_INT32 nBitsPerPixel; | /* resulting bitmap pixel depth */
L_INT32 nQFactor; | /* quality factor */
L_UINT uFlags | /* flags */

Replaces the images in a Pixel Data element with images in a bitmap list.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
hList | Handle to the list of bitmaps.
nCompression | Value that indicates the type of compression to use. Possible values are:
 | Value | Meaning
 | IMAGE_COMPRESSION_NONE | [0x00] No compression.
 | IMAGE_COMPRESSION_RLE | [0x01] RLE compression.
 | IMAGE_COMPRESSION_JPEG_LOSSLESS | [0x02] JPEG LossLess compression.
 | IMAGE_COMPRESSION_JPEG_LOSSY | [0x03] JPEG Lossy compression.
 | IMAGE_COMPRESSION_J2K_LOSSLESS | [0x06] JPEG 2000 lossless compression.
 | IMAGE_COMPRESSION_J2K_LOSSY | [0x07] JPEG 2000 lossy compression.
nPhotometric | Photometric constant. Possible values are:
 | Value | Meaning
 | IMAGE_PHOTOMETRIC_MONOCHROME2 | [0x01] 8- or 16-bits per pixel, grayscale image.
 | IMAGE_PHOTOMETRIC_PALETTE_COLOR | [0x02] 8-bits per pixel, palettized color image.
 | IMAGE_PHOTOMETRIC_RGB | [0x03] 24-bits per pixel, RGB color image.
nBitsPerPixel | Resulting bitmap pixel depth. The following are valid values:

 | Value | Meaning
 | 0 | Keep the original file's pixel depth (Do not convert).
 | 1 to 8 | The specified bits per pixel in the resultant bitmap
 | 12 | 12 bits per pixel in the resultant bitmap.
 | 16 | 16 bits per pixel in the resultant bitmap
 | 24 | 24 bits per pixel in the resultant bitmap
 | 32 | 32 bits per pixel in the resultant bitmap
nQFactor | The quality factor (Q factor) is a number that determines the degree of loss in the compression process. You can set a value from 2 to 255, where 2 is the highest quality and 255 is the most compression.

uFlags | Flags which control the behaviour of this function. Possible values are:
 | Value | Meaning
 | DICOM_SETIMAGE_AUTO_SET_VOI_LUT | [0x0002]If set, the function will automatically add a VOI LUT to the dataset.
 | DICOM_SETIMAGE_MINIMIZE_JPEG_SIZE | [0x0004] If set, and the nCompression parameter is IMAGE_COMPRESSION_JPEG_LOSSLESS or IMAGE_COMPRESSION_JPEG_LOSSY, the JPEG compression engine will use optimized Huffman tables, which results in better compression, but slower speed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function replaces all the images in the Pixel Data Element with the images referenced by hList.

Most DICOM files will only have one Data Element of type TAG_PIXEL_DATA. Therefore, in most instances you can set pElement to NULL, since the function will automatically replace the images of the only Pixel Data Element in the file. If pElement is not NULL, it must point to the Pixel Data Element itself.

If the DICOM file is CLASS_BASIC_DIRECTORY, the file may contain more than one Pixel Data Element. In this case you must specify in pElement the Pixel Data Element in which the images will be replaced.

If you wish to replace only one image within the Pixel Data Element, you must use LDicomDS::DeleteImage and LDicomDS::InsertImage.

For a table of possible Compression, Photometric, BitsPerPixel, and Quality Factor combinations, refer to Compression Table.

For more options when using the JPEG 2000 compression, refer to LDicomDS::SetJ2KOptions.

This function will either insert, delete or update one or more of the following elements:

Tag | Name
(7FE0,0010) | Pixel Data
(0002,0010) | Transfer Syntax UID
(0028,0101) | Bits Stored
(0028,0100) | Bits Allocated
(0028,0102) | High Bit
(0028,0103) | Pixel Representation
(0028,0010) | Rows
(0028,0011) | Columns
(0028,0002) | Samples per Pixel
(0028,0006) | Planar Configuration
(0028,0004) | Photometric Interpretation
(0028,0106) | Smallest Image Pixel Value
(0028,0107) | Largest Image Pixel Value
(0028,1101) | Red Palette Color Lookup Table Descriptor
(0028,1102) | Green Palette Color Lookup Table Descriptor
(0028,1103) | Blue Palette Color Lookup Table Descriptor
(0028,1201) | Red Palette Color Lookup Table Data
(0028,1202) | Green Palette Color Lookup Table Data
(0028,1203) | Blue Palette Color Lookup Table Data
(0028,1199) | Palette Color Lookup Table UID
(0028,1052) | Rescale Intercept
(0028,1053) | Rescale Slope
(0028,1054) | Rescale Type
(0028,1221) | Segmented Red Palette Color Lookup Table Data
(0028,1222) | Segmented Green Palette Color Lookup Table Data
(0028,1223) | Segmented Blue Palette Color Lookup Table Data
(0028,3010) | VOI LUT Sequence
(0028,1050) | Window Center
(0028,1051) | Window Width
(0028,1055) | Window Center & Width Explanation
(0028,0008) | Number of Frames
(0054,0070) | Time Slot Vector

This function is indifferent to the pixel data restrictions imposed by the various DICOM IOD classes, for example this function will allow the user to insert a colored image into a "Digital X-Ray Image Storage" dataset.

This function will always insert a "Number of Frames" (0028, 0008) element and set its value.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetImage, LDicomDS::GetImageList, LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetImage
Topics: | Working with Data Sets

Example

/* This example sets a multi-frame image in Data Set */

L_VOID Test(HBITMAPLIST hList)
{
LDicomDS *pDS;
pDICOMELEMENT pElement;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->SetImageList(pElement, hList, IMAGE_COMPRESSION_JPEG_LOSSLESS,
IMAGE_PHOTOMETRIC_RGB, 0, 0, DICOM_SETIMAGE_AUTO_SET_VOI_LUT);
}

delete pDS;
}


LDicomDS::SetJ2KOptions

#include "ltdic.h"

L_UINT16 LDicomDS::SetJ2KOptions(pOptions)

const pFILEJ2KOPTIONS pOptions;

/* pointer to a structure */

Sets the JPEG 2000 compression options.

Parameter | Description
pOptions | Pointer to a structure that contains the options to use when compressing the image(s) in a Pixel Data element using the JPEG 2000 compression.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

The nSize member of the FILEJ2KOPTIONS structure must be set before calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::InsertImage, LDicomDS::InsertImageList, LDicomDS::SetImage, LDicomDS::SetImageList, LDicomDS::GetJ2KOptions, LDicomDS::GetDefaultJ2KOptions
Topics: | Working with Data Sets
 | Implementing JPEG 2000 Plug in Features

Example

/* This example inserts an image in a Data Set
Using the JPEG 2000 compression with a 100:1
compression ratio
*/

L_VOID MyInsertImage(LDicomDS *pDS ,pBITMAPHANDLE pBitmap)
{
if(pDS && pBitmap)
{
pDICOMELEMENT pElement;
FILEJ2KOPTIONS J2KOptions;

// Get the current JPEG 2000 compression options.
pDS->GetJ2KOptions( &J2KOptions,
sizeof(FILEJ2KOPTIONS));
J2KOptions.uCompressionControl = J2K_COMPRESSION_RATIO;
// set the compression ratio to 100
J2KOptions.fCompressionRatio = 100.0f;
// Update the JPEG 2000 compression options.
pDS->SetJ2KOptions(&J2KOptions);

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->InsertImage( pElement,
pBitmap,
1,
IMAGE_COMPRESSION_J2K_LOSSY,
IMAGE_PHOTOMETRIC_MONOCHROME2,
0,
25,
0,
NULL,
NULL);
}
}
}


LDicomDS::SetKeepPixelDataIntactFlag

#include "Ltdic.h"

L_VOID LDicomDS::SetKeepPixelDataIntactFlag(bSet)

L_BOOL bSet;

/* flag */

Enables or disables the pre-processing of image data when a function that gets a bitmap from a Pixel Data element is called.

Parameter | Description
bSet | Flag the indicates whether to enable or disable the pre-processing of image data when a function that gets a bitmap from a Pixel Data element is called. Possible values are:
 | Value | Meaning
 | TRUE | Do not pre-process the image data.
 | FALSE | Pre-process the image data.

Returns

None

Comments

When a function that gets a bitmap from a data set is called, such as LDicomDS::GetImage or LDicomDS::GetImageList, LEADTOOLS may pre-process the image data in the bitmap handle for optimal display. Call the LDicomDS::GetKeepPixelDataIntactFlag function to determine whether LEADTOOLS will pre-process the image data. By default LEADTOOLS pre-processes the image data.

Calling the LDicomDS::SetKeepPixelDataIntactFlag function with bSet set to TRUE stops LEADTOOLS from pre-processing the image data in the bitmap handle. Please note that this may result in unexpected behavior when a LEADTOOLS display or image processing function is called for that bitmap handle.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetKeepPixelDataIntactFlag, LDicomDS::GetImage, LDicomDS::GetImageList, Class Members
Topics: | Working with Data Sets

Example

L_VOID Test()
{
LDicomDS *pDS;
pDICOMELEMENT pElement;
BITMAPHANDLE Bitmap;
L_BOOL bKeepPixelDataUnchanged;

pDS = new LDicomDS(NULL);

pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);

bKeepPixelDataUnchanged = pDS->GetKeepPixelDataIntactFlag();
if(bKeepPixelDataUnchanged == FALSE)
{
L_INT nRet = AfxMessageBox("Would like to keep pixel data unchanged?\n"
"If you choose Yes, then the resulting bitmap data will represent\n"
"exactly what appears inside the DICOM file, but may not display properly.\n"
"If you choose No, then the resulting bitmap data may not be\n"
"identical to what appears inside the DICOM file, but will display properly. \n",
MB_YESNO);
pDS->SetKeepPixelDataIntactFlag((nRet == IDYES));
}

pElement = pDS->FindFirstElement(NULL, TAG_PIXEL_DATA, FALSE);
if (pElement != NULL)
{
pDS->GetImage(pElement, &Bitmap, sizeof(BITMAPHANDLE), 0, 0, ORDER_BGR, 0, NULL, NULL);
L_FreeBitmap(&Bitmap);
}

delete pDS;
}


LDicomDS::SetLayerInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::SetLayerInfo(uLayerIndex, pGraphicLayer)

L_UINT uLayerIndex; | /* layer index */
pDICOMGRAPHICLAYER pGraphicLayer; | /* pointer to the layer attributes structure */

Sets layer attributes for the layer at the specified index.

Parameter | Description
uLayerIndex | Zero-based index of the layer to be updated.
pGraphicLayer | Structure containing the layer attributes.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pGraphicLayer-> uStructSize to be sizeof(DICOMGRAPHICLAYER) and initialize all the structure members.

The index(uLayerIndex) is based on the number of items under the "Graphic Layer Sequence" (0070,0060), for example the index of the first item is zero.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetLayerInfo, LDicomDS::SetLayerInfo, LDicomDS::RemoveLayerByIndex, LDicomDS::RemoveLayerByName, LDicomDS::RemoveAllLayers, LDicomDS::GetLayerCount, LDicomDS::GetLayerIndex, LDicomDS::GetLayerGraphicObjectCount, LDicomDS::RemoveLayerGraphicObjects, LDicomDS::GetLayerTextObjectCount, LDicomDS::RemoveLayerTextObjects, LDicomDS::GetLayerElementByIndex, LDicomDS::GetLayerElementByName, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID UpdateFirstLayerDescription(LDicomDS& PresStateDS)
{
L_UINT16 uRet;
DICOMGRAPHICLAYER Layer;

memset(&Layer, 0, sizeof(DICOMGRAPHICLAYER));

uRet= PresStateDS.GetLayerInfo(0, &Layer, sizeof(DICOMGRAPHICLAYER));
if(uRet == DICOM_SUCCESS)
{
Layer.pszLayerDescription = "New description";
uRet = PresStateDS.SetLayerInfo(0, &Layer);
if (uRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Layer Description updated successfully",
"Note",
MB_OK);
}
}
}


LDicomDS::SetLayerName

#include "Ltdic.h"

L_UINT16 LDicomDS::SetLayerName(pGraphicAnnSQItem, pszLayerName)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_CHAR* pszLayerName; | /* new layer name */

Sets the value of the "Graphic Layer" element under one of the items under the "Graphic Annotation Sequence" in the "Graphic Annotation Module".

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
pszLayerName | New layer name

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function sets the value of the "Graphic Layer" element under one of the items under the "Graphic Annotation Sequence" in the "Graphic Annotation Module".

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::FindNextGraphicAnnSQItem, LDicomDS::GetLayerName, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::AddLayerImageRef, LDicomDS::GetLayerImageRefCount, LDicomDS::RemoveImageRefFromLayer, LDicomDS::RemoveAllImageRefsFromLayer, LDicomDS::RemoveAllImageRefFromAllLayers, LDicomDS::GetLayerImageRefElement, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID SetLayerNameInAnnSequence(LDicomDS& PresStateDS,L_CHAR* pszLayerName)
{
L_UINT16 nRet = PresStateDS.SetLayerName(PresStateDS.FindFirstGraphicAnnSQItem(), pszLayerName);
if(nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Layer name has been updated successfully",
"Note",
MB_OK);
}
}


LDicomDS::SetLongValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetLongValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_INT32 * pValue; | /* pointer to a long */
L_UINT32 nCount; | /* number of values to set */

Sets the long value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a long that contains the long value(s) to set. If you want to set multiple values in the Value Field, put all long values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the long values in pValue and set nCount to the appropriate number.

Returns

TRUE | The long value(s) were set successfully.
FALSE | Could not set the long value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the long values in an array of long values, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three long values in the Value Field of the Data Element, create an array of longs containing the three long values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_AT, VR_IS, VR_SL, or VR_UL. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetFloatValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetModalityLUT

#include "ltdic.h"

L_UINT16 LDicomDS::SetModalityLUT(pModalityLUTAttributes, pLUTData, uDataSize, uFlags)

pDICOMMLUTATTRIBS pModalityLUTAttributes; | /* pointer to a Modality LUT attributes structure */
L_UINT16 *pLUTData; | /* pointer to the input buffer */
L_UINT uDataSize; | /* size of the input buffer */
L_UINT uFlags; | /* reserved for future use */

Sets the attributes that describe the Modality LUT.

Parameter | Description
pModalityLUTAttributes | Pointer to a structure containing the Modality LUT attributes to set.
pLUTData | Pointer to the buffer that holds the "LUT Data" to set. Pass NULL if you are not trying to set the "LUT Data" (0028,3006) under the "Modality LUT Sequence" (0028,3000).
uDataSize | Size of the buffer pointed to by pLUTData. Pass 0 if pLUTData is set to NULL.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will set the attributes of the "Modality LUT Module". Before calling this function, initialize pModalityLUTAttributes->uStructSize to be sizeof(DICOMMLUTATTRIBS) and initialize all the attributes which you are changing.

If you are trying to set the "Rescale Intercept" (0028,1052) and "Rescale Slope" (0028,1053), set pModalityLUTAttributes->bIsRescaleSlopeIntercept to TRUE and populate pModalityLUTAttributes->RescaleIntercept, pModalityLUTAttributes->RescaleSlope with the new values. You can also populate pModalityLUTAttributes->szRescaleType if you want to set "Rescale Type" (0028,1054).

If you are trying to set the elements under "Modality LUT Sequence", set pModalityLUTAttributes->bIsModalityLUTSequence to TRUE and populate

pModalityLUTAttributes->LUTDescriptor and pModalityLUTAttributes->szModalityLUTType .In this case pLUTData should point to the "LUT Data" (0028,3006) buffer.

This function will return an error if both pModalityLUTAttributes->bIsRescaleSlopeIntercept and pModalityLUTAttributes->bIsModalityLUTSequence are set to TRUE. It will also return an error if pModalityLUTAttributes->bIsModalityLUTSequence is set to TRUE and you pass NULL for pLUTData or 0 for uDataSize.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetModalityLUTAttributes, LDicomDS::GetModalityLUTData, LDicomDS::DeleteModalityLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Modality LUT

Example

// This example will set Rescale Intercept (0028,1052)
// element to -128.0 and Rescale Slope (0028,1053)
// element to 1.0
L_UINT16 MySetRescaleSlopeIntercept
(
LDicomDS &DS//Input dataset
)
{
// Structure that will hold the new modality LUT attributes
DICOMMLUTATTRIBS ModalityLUTAttributes = {0};
L_UINT16 uRet;

//Remember to set the structure size
ModalityLUTAttributes.uStructSize= sizeof(DICOMMLUTATTRIBS);

//No Modality LUT Sequence (0028,3000)
ModalityLUTAttributes.bIsModalityLUTSequence = FALSE;
//Yes there is a rescale slope and intercept
ModalityLUTAttributes.bIsRescaleSlopeIntercept = TRUE;
ModalityLUTAttributes.fRescaleIntercept = -128.0;
ModalityLUTAttributes.fRescaleSlope = 1.0;
strcpy(ModalityLUTAttributes.szRescaleType,"UNSPECIFIED");
// Delete the existing modality LUT,
// although we don't have to !
DS.DeleteModalityLUT (0);
//Set rescale slope and intercept
return DS.SetModalityLUT ( &ModalityLUTAttributes ,// new attributes
NULL ,// no LUT Data
0,0);
}


LDicomDS::SetOverlayAttributes

#include "ltdic.h"

L_UINT16 LDicomDS::SetOverlayAttributes (uOverlayIndex,pOverlayAttributes,uFlags)

L_UINT uOverlayIndex; | /* index */
pOVERLAYATTRIBUTES pOverlayAttributes; | /* pointer to a structure */
L_UINT uFlags; | /* flags */

Sets overlay attributes for a certain index.

Parameter | Description
uOverlayIndex | The index of the overlay for which to set the attributes. This index is zero-based.
pOverlayAttributes | Pointer to a structure containing the overlay attributes to set.
uFlags | Binary flags that determine the behavior of the function. Possible values are:
 | Value | Meaning
 | SET_OVERLAY_ATTRIB_NO_OVERRIDE | Set this flag if you don’t want to update an overlay that already exists in the dataset.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pOverlayAttributes->uStructSize to be sizeof(OVERLAYATTRIBUTES) and initialize all the OVERLAYATTRIBUTES structure members.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayBitmap, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

//This function will delete all overlays in a dataset
L_UINT16 DeleteAllOverlays
(
LDicomDS &InDS
)
{
L_UINT uOverlayCount = 0;
L_UINT16 uRet;
L_UINT16 uOverlayIndex;

uRet = InDS.GetOverlayCount (&uOverlayCount);
if(DICOM_SUCCESS != uRet)
{
return uRet;
}
for(uOverlayIndex = 0 ; uOverlayIndex < uOverlayCount ; uOverlayIndex++)
{
uRet = InDS.DeleteOverlay (uOverlayIndex,0);
if(DICOM_SUCCESS != uRet)
{
return uRet;
}
}
return DICOM_SUCCESS;
}
// This function will store the overlays associated
// with a bitmap handle inside the DICOM dataset
L_UINT16 SaveOverlaysFromBitmap
(
LDicomDS &InDS,
pBITMAPHANDLE pBitmap,
L_UINT uFlags
)
{
OVERLAYATTRIBUTES OverlayAttributes;
BITMAPHANDLE OverlayBitmap;
L_UINT uOverlayCount;
L_UINT uOverlayIndex;
L_INT nLEADRet;
L_UINT16 uDICOMRet;

//(1)Sanity Check !
if(NULL == pBitmap)
{
return DICOM_ERROR_NULL_PTR;
}
//(2)Do we have any overlays at all ?
nLEADRet = L_GetOverlayCount( pBitmap,
&uOverlayCount,
0);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_PARAMETER;
}
// If no overlays just return
if(0 == uOverlayCount)
{
return DICOM_SUCCESS;
}
//(3)Blow away all the overlays in the file
uDICOMRet = DeleteAllOverlays(InDS);
if(DICOM_SUCCESS != uDICOMRet)
{
return uDICOMRet;
}
//(4) Loop through the overlays and add them into the DICOM file
for(uOverlayIndex = 0 ; uOverlayIndex < uOverlayCount ; uOverlayIndex++)
{
memset(&OverlayAttributes , 0 , sizeof(OVERLAYATTRIBUTES));
memset(&OverlayBitmap , 0 , sizeof(BITMAPHANDLE));

// Get overlay attributes
nLEADRet = L_GetOverlayAttributes( pBitmap,
uOverlayIndex,
&OverlayAttributes,
sizeof(OverlayAttributes),
OVERLAYATTRIBUTES_ORIGIN |
OVERLAYATTRIBUTES_FLAGS |
OVERLAYATTRIBUTES_BITINDEX |
OVERLAYATTRIBUTES_DICOM);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_PARAMETER;
}
// Set overlay attributes inside DICOM
uDICOMRet = InDS.SetOverlayAttributes (uOverlayIndex,&OverlayAttributes,0);
if(DICOM_SUCCESS != uDICOMRet)
{
return uDICOMRet;
}
// burn overlays which need to be part of the image
if(OverlayAttributes.uFlags &OVERLAY_USEBITPLANE)
{
nLEADRet = L_UpdateBitmapOverlayBits( pBitmap,
uOverlayIndex,
SETOVERLAYBITS_FROMOVERLAY);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_PARAMETER;
}
}
// Get the overlay data (if it's not part of the image)
nLEADRet = L_GetOverlayBitmap ( pBitmap,
uOverlayIndex,
&OverlayBitmap,
sizeof(BITMAPHANDLE),
OVERLAY_NOCOPY);
if(SUCCESS != nLEADRet)
{
return DICOM_ERROR_PARAMETER;
}
// Set overlay data into DICOM
uDICOMRet = InDS.SetOverlayBitmap (uOverlayIndex,&OverlayBitmap,0);
if(DICOM_SUCCESS != uDICOMRet)
{
return uDICOMRet;
}
}

return DICOM_SUCCESS;
}


LDicomDS::SetOverlayBitmap

#include "ltdic.h"

L_UINT16 LDicomDS::SetOverlayBitmap (uOverlayIndex,pBitmap,uFlags)

L_UINT uOverlayIndex; | /* index */
pBITMAPHANDLE pBitmap; | /* pointer to a handle */
L_UINT uFlags; | /* reserved for future use */

Sets the "Overlay Data" (60xx,3000) for a certain overlay index.

Parameter | Description
uOverlayIndex | The index of the overlay being affected. This index is zero-based.
pBitmap | Pointer to a bitmap handle which will be used to update the overlay data. Cannot be NULL.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will update the stream of bytes under the "Overlay Data" (60xx, 3000) element with the data in the specified bitmap handle.

This function will fail if the bitmap width doesn’t match the "Overlay Columns" (60xx, 0011) or if the bitmap height doesn’t match the "Overlay Rows" (60xx, 0011) for the overlay being updated.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmapList, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

For an example, refer to LDicomDS::SetOverlayAttributes.


LDicomDS::SetOverlayBitmapList

#include "ltdic.h"

L_UINT16 LDicomDS::SetOverlayBitmapList(uOverlayIndex, hList, uFlags)

L_UINT uOverlayIndex; | /* index */
HBITMAPLIST hList; | /* handle to the list of bitmaps */
L_UINT uFlags; | /* reserved for future use */

Sets the "Overlay Data" (60xx,3000) for the specified overlay index from a list of bitmaps.

Parameter | Description
uOverlayIndex | The index of the overlay for which to set the bitmap list.
hList | Handle to the list of bitmaps.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will update the stream of bytes under the "Overlay Data" (60xx, 3000) element with the data of the bitmaps included in a bitmap list.

Before calling this function you must call LDicomDS::SetOverlayAttributes to set the attributes of the bitmap you are trying to update. Make sure that the number of bitmaps in the list doesn’t exceed the value of the "Number of Frames in Overlay" (60xx,0015) element.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetOverlayCount, LDicomDS::GetOverlayAttributes, LDicomDS::GetOverlayActivationLayer, LDicomDS::GetOverlayBitmap, LDicomDS::GetOverlayBitmapList, LDicomDS::SetOverlayAttributes, LDicomDS::SetOverlayBitmap, LDicomDS::DeleteOverlay
Topics: | Overlays Overview
 | Overlays

Example

L_VOID Test(HBITMAPLIST hList)
{
LDicomDS *pDS;
pDS = new LDicomDS(NULL);
pDS->LoadDS("c:\\ltwin13\\images\\image1.dic", 0);
pDS->SetOverlayBitmapList(0, hList, 0);
delete pDS;
}


LDicomDS::SetPaletteColorLUTAttributes

#include "ltdic.h"

L_UINT16 LDicomDS::SetPaletteColorLUTAttributes (pPaletteColorLUTAttributes,uFlags)

pDICOMPALCOLORLUTATTRIBS pPaletteColorLUTAttributes; | /* pointer to a structure */
L_UINT uFlags; | /* reserved for future use */

Sets the attributes that describe the "Palette Color Lookup Table".

Parameter | Description
pPaletteColorLUTAttributes | Pointer to a structure containing the "Palette Color Lookup Table" attributes.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will set the attributes of the "Palette Color Lookup Table". Before calling this function, initialize pPaletteColorLUTAttributes ->uStructSize to be sizeof(DICOMPALCOLORLUTATTRIBS) and initialize all the members of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPaletteColorLUTAttributes, LDicomDS::GetPaletteColorLUTData, LDicomDS::SetPaletteColorLUTData, LDicomDS::DeletePaletteColorLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Palette Color Table

Example

For an example, refer to LDicomDS::SetPaletteColorLUTData.


LDicomDS::SetPaletteColorLUTData

#include "ltdic.h"

L_UINT16 LDicomDS::SetPaletteColorLUTData(pLUTData, uDataSize, PaletteColorLUTType, uFlags)

L_UINT16 * pLUTData; | /* pointer to the input buffer */
L_UINT uDataSize; | /* size of the input buffer */
DICOMPALETTECOLORLUTTYPE PaletteColorLUTType; | /* type of palette color lookup table */
L_UINT uFlags; | /* reserved for future use */

Sets red, green or blue "Palette Color Lookup Table" data.

Parameter | Description
pLUTData | Pointer to the buffer that holds the "Palette Color Lookup Table Data" to set.
uDataSize | Size of the buffer pointed to by pLUTData.
PaletteColorLUTType | Type of palette color lookup table data to set. The following are possible values:
 | Value | Meaning
 | DICOMPALETTECOLORLUTTYPE_RED | Set "Red Palette Color Lookup Table Data" (0028,1201)
 | DICOMPALETTECOLORLUTTYPE_GREEN | Set "Green Palette Color Lookup Table Data" (0028,1202)
 | DICOMPALETTECOLORLUTTYPE_BLUE | Set "Blue Color Lookup Table Data" (0028,1203)
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will set the data for the "Red", "Green" or "Blue" "Palette Color Lookup Table".

Before calling this function you must call LDicomDS::SetPaletteColorLUTAttributes to set the attributes of the "Palette Color Lookup Table", otherwise this function will fail and return DICOM_ERROR_LUT_DESCRIPTOR_MISSING.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPaletteColorLUTAttributes, LDicomDS::GetPaletteColorLUTData, LDicomDS::SetPaletteColorLUTAttributes, LDicomDS::DeletePaletteColorLUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: Palette Color Table

Example

//This example will set the attributes and the date for a
// Palette Color Lookup Table
L_UINT16 MySetPaletteColorLUTData(LDicomDS &InDS)
{
L_INT nLUTIndex;
L_UINT16 uRet;
L_UINT16 *pRedLUTData = NULL;
L_UINT16 *pGreenLUTData = NULL;
L_UINT16 *pBlueLUTData = NULL;
DICOMPALCOLORLUTATTRIBS PaletteColorLUTAttributes = {0} ;

// Remember to set the size for each structure
SET_SIZE(&PaletteColorLUTAttributes);
SET_SIZE(&(PaletteColorLUTAttributes.RedLUTDescriptor));
SET_SIZE(&(PaletteColorLUTAttributes.GreenLUTDescriptor));
SET_SIZE(&(PaletteColorLUTAttributes.BlueLUTDescriptor));

// Initialize Red Palette Color Lookup Table Descriptor (0028,1101)
PaletteColorLUTAttributes.RedLUTDescriptor.nFirstStoredPixelValueMapped = 0;
PaletteColorLUTAttributes.RedLUTDescriptor.uEntryBits = 16;
PaletteColorLUTAttributes.RedLUTDescriptor.uNumberOfEntries = 0x10000;

// Initialize Green Palette Color Lookup Table Descriptor (0028,1102)
PaletteColorLUTAttributes.GreenLUTDescriptor.nFirstStoredPixelValueMapped = 0;
PaletteColorLUTAttributes.GreenLUTDescriptor.uEntryBits = 16;
PaletteColorLUTAttributes.GreenLUTDescriptor.uNumberOfEntries = 0x10000;

// Initialize Blue Palette Color Lookup Table Descriptor (0028,1103)
PaletteColorLUTAttributes.BlueLUTDescriptor.nFirstStoredPixelValueMapped = 0;
PaletteColorLUTAttributes.BlueLUTDescriptor.uEntryBits = 16;
PaletteColorLUTAttributes.BlueLUTDescriptor.uNumberOfEntries = 0x10000;

// Allocate a buffer to hold Red Palette Color Lookup Table Data
pRedLUTData = (L_UINT16*)malloc(0x10000 * sizeof(L_UINT16));
if(!pRedLUTData)
{
return DICOM_ERROR_MEMORY;
}
// Allocate a buffer to hold Green Palette Color Lookup Table Data
pGreenLUTData = (L_UINT16*)malloc(0x10000 * sizeof(L_UINT16));
if(!pGreenLUTData)
{
free(pRedLUTData);
return DICOM_ERROR_MEMORY;
}
// Allocate a buffer to hold Blue Palette Color Lookup Table Data
pBlueLUTData = (L_UINT16*)malloc(0x10000 * sizeof(L_UINT16));
if(!pBlueLUTData)
{
free(pRedLUTData);
free(pGreenLUTData);
return DICOM_ERROR_MEMORY;
}
for(nLUTIndex = 0; nLUTIndex <= 0xFFFF; nLUTIndex++)
{
pRedLUTData [nLUTIndex] = nLUTIndex;
pGreenLUTData [nLUTIndex] = nLUTIndex/2;
pBlueLUTData [nLUTIndex] = nLUTIndex/4;
}
// Delete all the elements that describe the "Palette Color Lookup Table".
uRet = InDS.DeletePaletteColorLUT (0);
if(uRet != DICOM_SUCCESS)
{
free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return uRet;
}
// Set the new "Palette Color Lookup Table" attributes
uRet = InDS.SetPaletteColorLUTAttributes (&PaletteColorLUTAttributes, 0);
if(uRet != DICOM_SUCCESS)
{
free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return uRet;
}
// Set Red Palette Color Lookup Table Data
uRet = InDS.SetPaletteColorLUTData (pRedLUTData,0x10000,DICOMPALETTECOLORLUTTYPE_RED,0);
if(uRet != DICOM_SUCCESS)
{
free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return uRet;
}
// Set Green Palette Color Lookup Table Data
uRet = InDS.SetPaletteColorLUTData (pGreenLUTData,0x10000,DICOMPALETTECOLORLUTTYPE_GREEN,0);
if(uRet != DICOM_SUCCESS)
{
free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return uRet;
}
// Set Blue Palette Color Lookup Table Data
uRet = InDS.SetPaletteColorLUTData (pBlueLUTData,0x10000,DICOMPALETTECOLORLUTTYPE_BLUE,0);
if(uRet != DICOM_SUCCESS)
{
free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return uRet;
}

free(pRedLUTData);
free(pGreenLUTData);
free(pBlueLUTData);
return DICOM_SUCCESS;

}


LDicomDS::SetPreamble

#include "Ltdic.h"

L_VOID LDicomDS::SetPreamble(pPreamble, nLength)

L_CHAR * pPreamble; | /* character string */
L_UINT16 nLength; | /* length of pPreamble */

Sets the contents of the preamble.

Parameter | Description
pPreamble | Character string that contains the preamble to set.
nLength | Length of pPreamble. The maximum length is DS_PREAMBLE_LENGTH, which is defined as 128.

Returns

None.

Comments

The standard length of the Preamble is 128 bytes. You may use the constant DS_PREAMBLE_LENGTH, which is defined as 128, when setting nLength.

If the value specified in nLength is > DS_PREAMBLE_LENGTH, then the Preamble will be set with the first 128 bytes of pPreamble. If nLength is <= DS_PREAMBLE_LENGTH, then the Preamble will be set with the entire contents of pPreamble.

To retrieve the contents of the Preamble, call LDicomDS::GetPreamble.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPreamble
Topics: | Working with Data Sets

Example

/* This example sets the preamble */

L_VOID Test()
{
LDicomDS *pDS;
L_CHAR szPreamble[DS_PREAMBLE_LENGTH];

pDS = new LDicomDS(NULL);

memset(szPreamble, 0xFF, sizeof(szPreamble));
pDS->SetPreamble(szPreamble, sizeof(szPreamble));

delete pDS;
}


LDicomDS::SetPresStateInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::SetPresStateInfo(pPresState)

pDICOMPRESSTATEINFO pPresState;

/* pointer to a structure */

Sets the attributes of the "Presentation State Module".

Parameter | Description
pPresState | Pointer to a "Presentation State Module" attributes structure.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function will set the attributes of the "Presentation State Module". Before calling this function, initialize pPresState->uStructSize to be sizeof(DICOMPRESSTATEINFO) and initialize all the members of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetPresStateInfo, LDicomDS::AddPresStateImageRefByFileName, LDicomDS::AddPresStateImageRefByDS, LDicomDS::RemovePresStateImageRefBySOPInstance, LDicomDS::RemoveAllPresStateImageRefs, LDicomDS::GetPresStateImageRefSOPInstance, LDicomDS::GetPresStateImageRefCount, LDicomDS::FindFirstPresStateRefSeriesItem, LDicomDS::FindNextPresStateRefSeriesItem, LDicomDS::GetPresStateImageRefBySOPInstance
Topics: | Working with DICOM Annotations

Example

L_VOID UpdatePresentationStateValues(LDicomDS& PresStateDS)
{
VALUEDATE Date;
VALUETIME Time;
DICOMPRESSTATEINFO PresState;
SYSTEMTIME SysTime;

GetSystemTime(&SysTime);
Date.nYear = SysTime.wYear;
Date.nMonth = SysTime.wMonth;
Date.nDay = SysTime.wDay;

Time.nHours = SysTime.wHour;
Time.nMinutes = SysTime.wMinute;
Time.nSeconds = SysTime.wSecond;

PresState.nInstanceNumber = 1;
PresState.pszPresLabel = "Label";
PresState.pszPresDescription = "Description";
PresState.pszPresCreator = "Creator";
PresState.pPresCreationDate = &Date;
PresState.pPresCreationTime = &Time;
PresState.uStructSize = sizeof(DICOMPRESSTATEINFO);
L_UINT16 nRet = PresStateDS.SetPresStateInfo(&PresState);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Presentation state has been successfully updated",
"Error",
MB_OK);
}
}


LDicomDS::SetShortValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetShortValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_INT16 * pValue; | /* pointer to a short */
L_UINT32 nCount; | /* number of values to set */

Sets the short value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a short that contains the short value(s) to set. If you want to set multiple values in the Value Field, put all short values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the short values in pValue and set nCount to the appropriate number.

Returns

TRUE | The short value(s) were set successfully.
FALSE | Could not set the short value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the short values in an array of short values, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three short values in the Value Field of the Data Element, create an array of shorts containing the three short values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_OW, VR_SS, or VR_US. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetStringValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetStringValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
L_CHAR * pValue; | /* pointer to a character */
L_UINT32 nCount; | /* number of values to set */

Sets the string value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a or character string that contains the string value(s) to set. If you want to set multiple values in the Value Field, put all string values in this string and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the string values in pValue and set nCount to the appropriate number.

Returns

TRUE | The string value(s) were set successfully.
FALSE | Could not set the string value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the string values in pValue and set nCount to the corresponding number of entries. For example, if you wish to set three string values in the Value Field of the Data Element, put all three strings in pValue, separated by the "0" delimiter and set nCount to three. For example, the illustration below shows a character string, containing three strings separated by the 0 delimiter.

For more information on required delimiters between multiple values, refer to An Overview of the DICOM File Format and the DICOM Standard.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_AE, VR_CS, VR_LO, VR_LT, VR_SH, VR_ST, VR_UI, VR_UT, or VR_PN. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetDoubleValue, LDicomDS::SetStringValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetTimeValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetTextObjectInfo

#include "Ltdic.h"

L_UINT16 LDicomDS::SetTextObjectInfo(pGraphicAnnSQItem, uTextObjectIndex, pTextObject)

pDICOMELEMENT pGraphicAnnSQItem; | /* pointer to a DICOMELEMENT structure */
L_UINT uTextObjectIndex; | /* text annotation object index */
pDICOMTEXTOBJECT pTextObject; | /* pointer to the text annotation object attributes structure */

Updates the attributes of a text annotation object.

Parameter | Description
pGraphicAnnSQItem | Pointer to an item element under the "Graphic Annotation Sequence" (0070,0001) in the "Graphic Annotation Module".
uTextObjectIndex | Index of the text annotation object to be updated
pTextObject | Structure containing the text annotation object attributes.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Before calling this function, initialize pTextObject->uStructSize to be sizeof(DICOMTEXTOBJECT) and initialize all the structure members.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::FindFirstGraphicAnnSQItem, LDicomDS::CreateGraphicAnnSQItem, LDicomDS::CreateTextObject, LDicomDS::RemoveTextObject, LDicomDS::GetTextObjectInfo, LDicomDS::GetTextObjectCount, LDicomDS::RemoveAllTextObjects, LDicomDS::GetTextObjElement, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertLEADAnnObjToDicomAnnObjs, LDicomDS::ConvertDicomAnnObjToLEADAnnObj, Class Members
Topics: | Working with DICOM Annotations

Example

L_VOID UpdateFirstTextObject(LDicomDS& PresStateDS)
{
DICOMTEXTOBJECT TextObject;

pDICOMELEMENT pGraphicAnnSQItem = PresStateDS.FindFirstGraphicAnnSQItem() ;

memset(&TextObject, 0, sizeof(DICOMTEXTOBJECT));

L_FLOAT pAnchorPoint[2];
L_FLOAT pBRHCorner[2];
L_FLOAT pTLHCorner[2];

pAnchorPoint[0] = (L_FLOAT)1.188;
pAnchorPoint[1] = (L_FLOAT)1.188;

pBRHCorner[0] = (L_FLOAT)1.288;
pBRHCorner[1] = (L_FLOAT)1.288;

pTLHCorner[0] = (L_FLOAT)1.388;
pTLHCorner[1] = (L_FLOAT)1.388;

TextObject.bAnchorPointVisible = FALSE;
TextObject.pAnchorPoint = pAnchorPoint;
TextObject.pBRHCorner = pBRHCorner;
TextObject.pszTextValue = "Text Value updated";
TextObject.pTLHCorner = pTLHCorner;
TextObject.uAnchorPointUnits = DICANN_UNIT_PIXEL;
TextObject.uBoundingBoxUnits = DICANN_UNIT_PIXEL;
TextObject.pszLayerName = "First Layer";
TextObject.uTextJustification = DICANN_TEXT_LEFT;
TextObject.uStructSize = sizeof(DICOMTEXTOBJECT);

L_UINT16 nRet = PresStateDS.SetTextObjectInfo(pGraphicAnnSQItem, 0, &TextObject);
if (nRet == DICOM_SUCCESS)
{
MessageBox( NULL,
"Object has been successfully updated.",
"Note",
MB_OK);
}
}


LDicomDS::SetTimeValue

#include "Ltdic.h"

L_BOOL LDicomDS::SetTimeValue(pElement, pValue, nCount)

pDICOMELEMENT pElement; | /* pointer to a DICOMELEMENT structure */
pVALUETIME pValue; | /* pointer to a VALUETIME structure */
L_UINT32 nCount; | /* number of values to set */

Sets the Time value(s) of a Data Element.

Parameter | Description
pElement | Pointer to a DICOMELEMENT structure within the Data Set.
pValue | Pointer to a VALUETIME structure that contains the Time value(s) to set. If you want to set multiple values in the Value Field, put all Time values in pValue and set nCount to the appropriate number of values.
nCount | Value that indicates the number of values to set in the Value Field. If you want to set multiple values in the Value Field, put all the Time values in pValue and set nCount to the appropriate number.

Returns

TRUE | The Time value(s) were set successfully.
FALSE | Could not set the Time value(s) of the Data Element.

Comments

Note: You must allocate the memory for pValue.

If you want to set more than one value in the Value Field of the Data Element, put all the Time values in an array of VALUETIME structures, set pValue to the address of the array, and set nCount to the corresponding number of entries. For example, if you wish to set three Time values in the Value Field of the Data Element, create an array of VALUETIME structures containing the three Time values, set pValue to the address of the array, and set nCount to three.

If more than one value is stored in the Value Field of the Data Element, you must set all values at the same time.

This function can be called only if the Value Representation of the Data Element is VR_TM. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::SetBinaryValue, LDicomDS::SetCharValue, LDicomDS::SetShortValue, LDicomDS::SetLongValue, LDicomDS::SetFloatValue, LDicomDS::SetStringValue, LDicomDS::SetDoubleValue, LDicomDS::SetAgeValue, LDicomDS::SetDateValue, LDicomDS::SetDateTimeValue
Topics: | Working with Data Sets

Example

For an example, refer to LDicomDS::SetCharValue.


LDicomDS::SetVOILUT

#include "ltdic.h"

L_UINT16 LDicomDS::SetVOILUT(uVOILUTIndex, pVOILUTAttributes, pLUTData, uDataSize,uFlags)

L_UINT uVOILUTIndex; | /* index */
pDICOMVOILUTATTRIBS pVOILUTAttributes; | /* pointer to a structure */
L_UINT16 *pLUTData; | /* pointer to the input buffer */
L_UINT uDataSize; | /* size of the input buffer */
L_UINT uFlags; | /* reserved for future use */

Sets the attributes that describe the VOI LUT.

Parameter | Description
uVOILUTIndex | Index to the VOI LUT to be set. According to the DICOM standard one or more items could exist under one VOI LUT Sequence (0028,3010), use this index to specify which item to update. This index is zero-based.
pVOILUTAttributes | Pointer to a structure containing the VOI LUT attributes to set.
pLUTData | Pointer to the buffer that holds the "LUT Data" (0028,3006) to set. This pointer can’t be NULL.
uDataSize | Size of the buffer pointed to by pLUTData, can’t be 0.This value should at least equal pVOILUTAttributes->LUTDescriptor.uNumberOfEntries.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will set the attributes of the VOI LUT. Before calling this function, initialize pVOILUTAttributes ->uStructSize to be sizeof(DICOMVOILUTATTRIBS) and initialize all the members of the structure.

The size of the input buffer should at least equal the number of entries in the lookup table.

According to the DICOM standard pVOILUTAttributes-> LUTDescriptor. uNumberOfEntries should be set to 0 if the number of entries in the lookup table is 2^16, however you should NOT do that when calling this function. This function will handle correctly setting the value inside the dataset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::SetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

// This example will add a new VOI LUT to the dataset or
// replace the existing one(s)
L_UINT16 MySetVOILUT
(
LDicomDS &InDS,
L_BOOL bAdd
)
{
DICOMVOILUTATTRIBS VOILUTAttribs ={0};
L_UINT16 uRet;
L_UINT uVOILUTCount=0;
L_UINT16 *pVOILUTData = NULL;
L_UINT uDataSize = 0;
L_INT nLUTIndex;
L_UINT uNewLUTIndex = 0;

// Remember to set the size for each structure
SET_SIZE(&VOILUTAttribs);
SET_SIZE(&VOILUTAttribs.LUTDescriptor);

// Get the number of VOI LUT(s) in the file
uRet = InDS.GetVOILUTCount (&uVOILUTCount);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
if(uVOILUTCount>0)
{
// Get he attributes of the first VOI LUT
uRet = InDS.GetVOILUT (0,&VOILUTAttribs,sizeof(DICOMVOILUTATTRIBS),0);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
uDataSize = VOILUTAttribs.LUTDescriptor.uNumberOfEntries;
pVOILUTData = (L_UINT16*)malloc(uDataSize* sizeof(L_UINT16));
if(!pVOILUTData)
{
return DICOM_ERROR_MEMORY;
}
// Get the LUT data
uRet = InDS.GetVOILUTData (0,pVOILUTData,uDataSize,0);
if(uRet != DICOM_SUCCESS)
{
free(pVOILUTData);
return uRet;
}
// Remap the data
for(nLUTIndex = 0; nLUTIndex <= (uDataSize-1); nLUTIndex++)
{
pVOILUTData[nLUTIndex] = pVOILUTData[nLUTIndex]/2;
}
}
else
{
// Define our own LUT
VOILUTAttribs.LUTDescriptor.nFirstStoredPixelValueMapped = 0;
VOILUTAttribs.LUTDescriptor.uEntryBits = 16;
VOILUTAttribs.LUTDescriptor.uNumberOfEntries = 0x10000;
uDataSize = VOILUTAttribs.LUTDescriptor.uNumberOfEntries;
pVOILUTData = (L_UINT16*)malloc(uDataSize* sizeof(L_UINT16));
if(!pVOILUTData)
{
return DICOM_ERROR_MEMORY;
}
memset(pVOILUTData,0,uDataSize* sizeof(L_UINT16));
for(nLUTIndex = 0; nLUTIndex <= (uDataSize-1); nLUTIndex++)
{
pVOILUTData[nLUTIndex] = nLUTIndex;
}
}
uNewLUTIndex = uVOILUTCount;
if(!bAdd)
{
// Delete existing LUT
uRet = InDS.DeleteVOILUT (0);
if(uRet != DICOM_SUCCESS)
{
free(pVOILUTData);
return uRet;
}
uNewLUTIndex = 0 ;
}
// Set the new LUT
uRet = InDS.SetVOILUT(uNewLUTIndex,&VOILUTAttribs,pVOILUTData,uDataSize,0);
if(uRet != DICOM_SUCCESS)
{
free(pVOILUTData);
return uRet;
}
if(pVOILUTData)
{
free(pVOILUTData);
}
return DICOM_SUCCESS;
}


LDicomDS::SetWindow

#include "ltdic.h"

L_UINT16 LDicomDS::SetWindow(uWindowIndex, pWindowAttributes, uFlags)

L_UINT uWindowIndex; | /* index */
pDICOMWINDOWATTRIBS pWindowAttributes; | /* pointer to a structure */
L_UINT uFlags; | /* reserved for future use */

Sets the attributes that describe the window center and the window width.

Parameter | Description
uWindowIndex | Index to the window center, window width value to be updated. According to the DICOM standard if multiple values are present for the window center and window width, both attributes shall have the same number of values and shall be considered as pairs. This index is zero-based.
pWindowAttributes | Pointer to a structure containing the window-related attributes to set.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function will set the attributes that describe window center and window width.

Before calling this function, initialize pWindowAttributes->uStructSize to be sizeof (DICOMWINDOWATTRIBS) and initialize all the members of the structure.

If "Window Center" (0028,1050) does not already exist in the dataset this function will insert it and set its value to pWindowAttributes-> fWindowCenter.

If "Window Width" (0028,1051) does not already exist in the dataset this function will isnert it and set its value to pWindowAttributes-> fWindowWidth.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetWindowCount, LDicomDS::GetVOILUTCount, LDicomDS::GetWindow, LDicomDS::DeleteWindow, LDicomDS::GetVOILUT, LDicomDS::SetVOILUT, LDicomDS::GetVOILUTData, LDicomDS::DeleteVOILUT, Class Members
Topics: | LUT Encoding Overview
 | LUT Encoding: VOI LUT

Example

// This example will add a new "Window Width" and
// "Window Center" to the dataset , or replace
// the existing one(s)
L_UINT16 MySetWindow
(
LDicomDS &InDS,
L_UINT uBitsStored,
L_BOOL bAdd/*Add a new window or replace the existing one(s)*/
)
{
DICOMWINDOWATTRIBS WindowAttributes ={0};
L_UINT16 uRet;
L_UINT uWindowCount=0;
L_UINT uWindowIndex=0;

SET_SIZE(&WindowAttributes);
uRet = InDS.GetWindowCount (&uWindowCount);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
if(uWindowCount>0)
{
uRet = InDS.GetWindow (0,&WindowAttributes, sizeof(DICOMWINDOWATTRIBS),0);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
// Half the width for the first window
WindowAttributes.fWindowWidth = WindowAttributes.fWindowWidth/2;
WindowAttributes.fWindowCenter = WindowAttributes.fWindowCenter /2;
}
else
{
// This represents an identity VOI LUT transformation in the case
// where no Modality LUT is specified and the stored pixel data are
// uBitsStored bit unsigned integers.
WindowAttributes.fWindowWidth = 1 << uBitsStored ;
WindowAttributes.fWindowCenter = 1 << (uBitsStored-1) ;
}
uWindowIndex = uWindowCount;
if(!bAdd)
{
// Delete the existing window(s)
uRet = InDS.DeleteWindow (0);
if(uRet != DICOM_SUCCESS)
{
return uRet;
}
uWindowIndex = 0;
}

// Add the new window
return InDS.SetWindow (uWindowIndex,&WindowAttributes,0);
}


LDicomDS::VerifySignature

#include "ltdic.h"

L_UINT16 LDicomDS::VerifySignature(pSignatureItem, uReserved = 0)

pDICOMELEMENT pSignatureItem; | /* pointer to a Digital Signatures Sequence Item */
L_UINT16 uReserved; | /* reserved */

Verifies Digital Signatures in the Data Set.

Parameter | Description
pSignatureItem | Pointer to a DICOMELEMENT structure that specifies the Digital Signatures Sequence Item which corresponds to the Digital Signature to be verified. To verify all the Digital Signatures in the entire Data Set, set this parameter to NULL.
uReserved | Reserved for future use. This must be set to 0.

Returns

DICOM_SUCCESS | The Digital Signature(s) was/were verified successfully.
DICOM_ERROR_INVALID_SIGNATURE | The Digital Signature is invalid or at least one of the Digital Signatures is invalid.
(Otherwise) | An error occurred. Refer to Return Codes.

Comments

To verify all the Digital Signatures in the entire Data Set, set the pSignatureItem parameter to NULL. If at least one of these Digital Signatures is invalid, the function returns DICOM_ERROR_INVALID_SIGNATURE and does not examine the remaining Digital Signatures, if there are any.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomDS::GetSignature, LDicomDS::FindSignature, LDicomDS::DeleteSignature, LDicomDS::CreateSignature, Class Members
Topics: | Working with Digital Signatures

Example

L_VOID ExamineSignature(LDicomDS& DataSet, pDICOMELEMENT pSignatureItem)
{
L_CHAR szMsg[1024] = "";

// Verify the Digital Signature; if pSignatureItem is NULL, the function
// will verify all the Digital Signatures that exist in the Data Set
L_UINT16 uRet = DataSet.VerifySignature(pSignatureItem);
switch (uRet)
{
case DICOM_SUCCESS:
if (pSignatureItem)
{
::MessageBox(NULL,
"The Digital Signature was verified.",
"Sample",
MB_OK);
}
else
{
::MessageBox(NULL,
"All Digital Signatures were verified "
"(if there are any).",
"Sample",
MB_OK);
return;
}
break;

case DICOM_ERROR_INVALID_SIGNATURE:
if (pSignatureItem)
{
::MessageBox(NULL,
"The Digital Signature is invalid.",
"Sample",
MB_OK);
}
else
{
::MessageBox(NULL,
"At least one Digital Signature is invalid.",
"Sample",
MB_OK);
}
return;

default:
wsprintf(szMsg, "An error occurred [Error: %hu].", uRet);
::MessageBox(NULL, szMsg, "Sample", MB_OK);
return;
}

// The Digital Signature UID
L_CHAR* pszSignatureUID;
pszSignatureUID = DataSet.GetSignatureUID(pSignatureItem);
if (pszSignatureUID)
{
wsprintf(szMsg, "Digital Signature UID: %s\n", pszSignatureUID);
}

// The Digital Signature DateTime
pVALUEDATETIME pSignatureDateTime;
pSignatureDateTime = DataSet.GetSignatureDateTime(pSignatureItem);
if (pSignatureDateTime)
{
wsprintf(szMsg, "%sDigital Signature DateTime: "
"%02hu/%02hu/%04hu %02hu:%02hu:%02hu.%06lu %c%04li\n",
szMsg,
pSignatureDateTime->nMonth,
pSignatureDateTime->nDay,
pSignatureDateTime->nYear,
pSignatureDateTime->nHours,
pSignatureDateTime->nMinutes,
pSignatureDateTime->nSeconds,
pSignatureDateTime->nFractions,
(pSignatureDateTime->nOffset >= 0) ? '+' : '-',
pSignatureDateTime->nOffset);
}

// The MAC Calculation Transfer Syntax UID
L_CHAR* pszMacTransferSyntax;
pszMacTransferSyntax = DataSet.GetMacTransferSyntax(pSignatureItem);
if (pszMacTransferSyntax)
{
wsprintf(szMsg, "%sMAC Calculation Transfer Syntax UID: %s\n",
szMsg,
pszMacTransferSyntax);
}

// The MAC Algorithm
L_CHAR* pszMacAlgorithm;
pszMacAlgorithm = DataSet.GetMacAlgorithm(pSignatureItem);
if (pszMacAlgorithm)
{
wsprintf(szMsg, "%sMAC Algorithm: %s\n",
szMsg,
pszMacAlgorithm);
}

// The Data Elements Signed
if (DataSet.GetSignedElementsCount(pSignatureItem) > 0)
{
lstrcat(szMsg, "Data Elements Signed: ");

// We will display only one
pDICOMELEMENT pSignedElement;
pSignedElement = DataSet.GetSignedElement(pSignatureItem, 0);
if (pSignedElement)
{
wsprintf(szMsg, "%s(%04X,%04X), ...",
szMsg,
GETGROUP(pSignedElement->nTag),
GETELEMENT(pSignedElement->nTag));
}

lstrcat(szMsg, "\n");
}

lstrcat(szMsg, "\nDo you want to save the Certificate of Signer?");

// Display the information we have about the Digital Signature
if (::MessageBox(NULL, szMsg, "Sample", MB_YESNO) == IDYES)
{
// Save the Certificate of Signer
DataSet.SaveCertificate(pSignatureItem, "C:\\CertOfSigner.cer");
}
}


LDicomIOD::Default

#include "Ltdic.h"

static L_VOID LDicomIOD::Default(L_VOID)

Resets the IOD Tree to the default values.

Returns

None.

Comments

If you remove the contents of the IOD Structure using LDicomIOD::Reset, you can reset the IOD Structure to the default values by calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Insert, LDicomIOD::Delete, LDicomIOD::Reset
Topics: | Working with Information Object Definitions (IODs)

Example

/* This example restores the default IOD table */

L_VOID Test()
{
LDicomIOD::Default();
}


LDicomIOD::Delete

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::Delete(pIOD)

pDICOMIOD pIOD;

/* pointer to a DICOMIOD structure */

Deletes the specified item from the IOD Structure.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure that contains the item to be deleted.

Returns

!NULL | A pointer to an adjacent item. If the item being deleted has a sibling (same level, same parent), following it, the returned pointer will point to this sibling. If the item being deleted does not have a sibling following it, but has a sibling preceding it, the returned pointer points to the preceding sibling. If the item being deleted is an only child, the returned pointer points to the parent.
NULL | The item being deleted has no siblings and no parent.

Comments

You can remove all items from the IOD Structure using LDicomIOD::Reset.

Since the IOD Structure is stored internally as a tree, the deletion must be carried out as a tree.

When deleting an item from the tree, if the item being deleted has a sibling (same level, same parent), following it, this function returns a pointer to this sibling. If the item being deleted does not have a sibling following it, but has a sibling preceding it, this function returns a pointer to the preceding sibling. If the item being deleted is an only child, this function returns a pointer to the parent. If there is no parent this function returns NULL.

Below are illustrations of these situations:

For the sake of these illustrations, the order of siblings is top to bottom. A preceding sibling is drawn above the sibling it precedes, a following sibling is drawn below the sibling it follows.

Please note that the numbering of the items of interest is arbitrary, and does not imply order.

In this illustration item 2 will be deleted. Since it has a following sibling, the returned pointer will point to item 3.

In this illustration item 3 will be deleted. Since it does not have a following sibling, but does have a preceding sibling, the returned pointer will point to item 2.

In this illustration item 2 will be deleted. Since it is an only child, the returned pointer will point to the parent, item 1.

In this illustration item 1 will be deleted. Since it has no siblings and no parent, this function will return NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Reset, LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetPrev, LDicomIOD::GetNext, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild, LDicomIOD::Find, LDicomIOD::FindClass, LDicomIOD::FindModule, LDicomIOD::FindIndexModule, LDicomIOD::Insert
Topics: | Working with Information Object Definitions

Example

/* This example removes a class from the IOD table */

L_VOID Test()
{
pDICOMIOD pClass;

pClass = LDicomIOD::FindClass( CLASS_CT_IMAGE_STORAGE);
if (pClass != NULL)
{
LDicomIOD::Delete(pClass);
}
}

/* This example removes a module from the IOD table */

L_VOID Test()
{
pDICOMIOD pModule;

pModule = LDicomIOD::FindModule( CLASS_US_IMAGE_STORAGE, MODULE_GENERAL_STUDY);
if (pModule != NULL)
{
LDicomIOD::Delete(pModule);
}
}

/* This example removes an element from the IOD table */

L_VOID Test()
{
pDICOMIOD pModule;
pDICOMIOD pElement;

pModule = LDicomIOD::FindModule( CLASS_NM_IMAGE_STORAGE, MODULE_PATIENT_STUDY);
if (pModule != NULL)
{
pElement = LDicomIOD::GetChild(pModule);
if (pElement != NULL)
{
LDicomIOD::Delete(pElement);
}
}
}


LDicomIOD::Exists

#include "Ltdic.h"

L_BOOL LDicomIOD::Exists(pIOD)

pDICOMIOD pIOD;

/* pointer to a DICOMIOD structure */

Determines whether the pointer to the structure is valid.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure.

Returns

TRUE | pIOD is a valid pointer.
FALSE | pIOD is NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetPrev, LDicomIOD::GetNext, LDicomIOD::Find, LDicomIOD::FindClass
Topics: | Working with Information Object Definitions

Example

/* This example checks an IOD pointer */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::FindClass( CLASS_CT_IMAGE_STORAGE);

if (LDicomIOD::Exists(pIOD) == FALSE)
{
MessageBox(NULL, "The IOD does not exist", "Notice", MB_OK);
}
}


LDicomIOD::Find

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::Find(pIOD, nCode, nType, bTree)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_UINT32 nCode; | /* code */
L_CHAR nType; | /* type */
L_BOOL bTree; | /* flag that indicates how to evaluate the IOD structure */

Returns a pointer to an item in the IOD Structure that contains the IOD with the specified code and type.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure that contains an item in the IOD Structure. A pointer to the item in the IOD Structure that contains the IOD with the specified nCode and nType will be returned.
nCode | Code value that specifies the Information Object Definition. The information object may be a Class, a Module or a Tag. For lists of default values, refer to Data Element Tag Constants, IOD Class Constants, and IOD Module Constants.
nType | The type of Information Object Definition you are working with. Possible values are:
 | Value | Meaning
 | IOD_TYPE_CLASS | [0x00] Class type Information Object Definition.
 | IOD_TYPE_MODULE | [0x01] Module type Information Object Definition.
 | IOD_TYPE_ELEMENT | [0x02] Element type Information Object Definition.
bTree | Flag that indicates how the IOD Structure will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the IOD Structure as a tree.
 | FALSE | Evaluate the IOD Structure as a list.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the item in the IOD Structure of the specified code and type.
NULL | An item with the specified code and type was not found.

Comments

The nCode and nType parameters must correspond. For example, if you specify IOD_TYPE_CLASS in nType, you must specify a value from the IOD Class Constants in nCode. If you specify some other value, the item will not be found in the IOD Structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::FindClass, LDicomIOD::FindModule, LDicomIOD::FindIndexModule
Topics: | Working with Information Object Definitions

Example

/* This example displays the name of an item */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::Find(NULL, TAG_PATIENT_NAME, IOD_TYPE_ELEMENT, FALSE);
if (pIOD != NULL)
{
MessageBox(NULL, pIOD->pszName, "Notice", MB_OK);
}
}


LDicomIOD::FindClass

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::FindClass(nClass)

L_UINT32 nClass;

/* class constant */

Returns a pointer to the item in the IOD Structure that contains the IOD for the specified class.

Parameter | Description
nClass | Class constant that specifies the class to find. For a list of default values, refer to IOD Class Constants.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the IOD for for the specified class.
NULL | An IOD for the specified class was not found.

Comments

To find the IOD of modules within a class, use LDicomIOD::FindModule or LDicomIOD::FindIndexModule.

LDicomIOD::Find lets you find IODs for classes, modules or elements in the IOD Structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Find, LDicomIOD::FindModule, LDicomIOD::FindIndexModule
Topics: | Working with Value Representations

Example

/* This example displays the name of a class */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::FindClass(CLASS_US_IMAGE_STORAGE);
if (pIOD != NULL)
{
MessageBox(NULL, pIOD->pszName, "Notice", MB_OK);
}
}


LDicomIOD::FindIndexModule

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::FindIndexModule(nClass, nIndex)

L_UINT32 nClass; | /* class constant */
L_UINT32 nIndex; | /* index value */

Returns a pointer to the item in the IOD Structure that contains the IOD for the module in the specified class at the specified index.

Parameter | Description
nClass | Class constant that specifies the class in which to look for the module. For a list of default values, refer to IOD Class Constants.
nIndex | Index value that indicates the position of the module within the class. This index is zero-based. For example, if nIndex is 2 and nClass is CLASS_NM_IMAGE_STORAGE, this function will return a pointer to the item in the IOD Structure that contains the IOD for the module at index position 2 in the Nuclear Medicine Image class.

Returns

!NULL | A pointer to the item in the IOD Structure that contains the IOD for the module at the specified index position in the specified class.
NULL | An IOD for the module at the specified index position in the specified class was not found.

Comments

To find the IOD of a module within a class use LDicomIOD::FindModule. To find the IOD for a specific class use LDicomIOD::FindClass.

LDicomIOD::Find lets you find IODs for classes, modules or elements in the IOD Structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Find, LDicomIOD::FindClass, LDicomIOD::FindModule
Topics: | Working with Information Object Definitions

Example

For an example, refer to LDicomIOD::GetCountModule.


LDicomIOD::FindModule

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::FindModule(nClass, nModule)

L_UINT32 nClass; | /* class constant */
L_UINT32 nModule; | /* module constant */

Returns a pointer to the item in the IOD Structure that contains the IOD for the specified module in the specified class.

Parameter | Description
nClass | Class constant that specifies the class in which to look for the module. For a list of default values, refer to IOD Class Constants.
nModule | Module constant that specifies the module to look for within the class specified in nClass. For a list of default module constants, refer to IOD Module Constants.

Returns

!NULL | A pointer to the item in the IOD Structure that contains the IOD for the specified module in the specified class.
NULL | An IOD for the specified module in the specified class was not found.

Comments

To find the IOD of a module at a specific index within a class use LDicomIOD::FindIndexModule. To find the IOD for a specific class use LDicomIOD::FindClass.

LDicomIOD::Find lets you find IODs for classes, modules or elements in the IOD Structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Find, LDicomIOD::FindClass, LDicomIOD::FindIndexModule
Topics: | Working with Information Object Definitions

Example

/* This example displays the name of a module */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::FindModule(CLASS_US_IMAGE_STORAGE, MODULE_PATIENT_STUDY);
if (pIOD != NULL)
{
MessageBox(NULL, pIOD->pszName, "Notice", MB_OK);
}
}


LDicomIOD::GetChild

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetChild(pIOD)

pDICOMIOD pIOD;

/* pointer to a DICOMIOD structure */

Returns a pointer to the item in the IOD Structure that contains the first child of the specified item.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure that contains an item in the IOD Structure.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the item in the IOD Structure that is the first child of the item specified in pIOD.
NULL | pIOD has no child items.

Comments

This function requires that the IOD Structure is evaluated as a tree structure.

The child is the offspring one level lower than the specified item. If the specified item has no child items, this function will return NULL. For example:

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item 5
Item 6 | NULL

The following functions will also help you navigate the IOD Structure:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetRoot

LDicomIOD::GetParent

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent
Topics: | Working with Information Object Definitions

Example

/* This example displays in a tree control the tree of the IOD table */

L_VOID ShowTree(CTreeCtrl *pDlg, HTREEITEM hParentItem, pDICOMIOD pParentIOD)
{
HTREEITEM hItem;
pDICOMIOD pIOD;

if (pParentIOD == NULL)
{
pIOD = LDicomIOD::GetFirst(pParentIOD, TRUE);
}
else
{
pIOD = LDicomIOD::GetChild(pParentIOD);
}

while (pIOD != NULL)
{
hItem = pDlg->InsertItem(pIOD->pszName, hParentItem, TVI_LAST);

if (LDicomIOD::GetChild(pIOD) != NULL)
{
ShowTree(pDlg, hItem, pIOD);
}

pIOD = LDicomIOD::GetNext(pIOD, TRUE);
}
}

L_VOID Test(CTreeCtrl *pDlg)
{
ShowTree(pDlg, TVI_ROOT, NULL);
}


LDicomIOD::GetCountModule

#include "Ltdic.h"

static L_UINT32 LDicomIOD::GetCountModule(nClass)

L_UINT32 nClass;

/* class constant */

Returns the number of modules in the specified class.

Parameter | Description
nClass | Value that specifies the class. For a list of default values refer to IOD Class Constants.

Returns

The number of modules in the specified class.

Comments

The following functions will also help you navigate the IOD Structure as either a tree or a list:

LDicomIOD::GetFirst

LDicomIOD::GetPrev

LDicomIOD::GetNext

LDicomIOD::GetLast

If you evaluate the IOD Structure as a tree, you can also use the following functions to navigate the tree:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays in a list-box control all modules from a class */

L_VOID Test(CListBox *pDlg)
{
L_UINT32 i;
L_UINT32 nCount;
pDICOMIOD pIOD;

nCount = LDicomIOD::GetCountModule(CLASS_MR_IMAGE_STORAGE);

for (i = 0; i < nCount; i++)
{
pIOD = LDicomIOD::FindIndexModule( CLASS_MR_IMAGE_STORAGE, i);
if (pIOD != NULL)
{
pDlg->AddString(pIOD->pszName);
}
}
}


LDicomIOD::GetFirst

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetFirst(pIOD, bTree)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the IOD Structure */

Returns a pointer to the first item in the IOD Structure.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure within the IOD Structure. A pointer to the DICOMIOD structure that contains the first item in the IOD Structure will be returned.
bTree | Flag that indicates how the IOD Structure will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the IOD Structure as a tree.
 | FALSE | Evaluate the IOD Structure as a list.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the first item in the IOD Structure.
NULL | The IOD Structure is empty.

Comments

If the IOD Structure is evaluated as a tree structure, this function returns the first item on the same level as pIOD with the same parent as pIOD. Please note that the numbering of the items in this first illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the IOD Structure is evaluated as a list, the first item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the IOD Structure is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 1
Item 12 | Item 1
Item 14 | Item 1
Item 22 | Item 1
Item 25 | Item 1

The following functions will also help you navigate the IOD Structure as either a tree or a list:

LDicomIOD::GetLast

LDicomIOD::GetPrev

LDicomIOD::GetNext

If you evaluate the IOD Structure as a tree, you can also use the following functions to navigate the tree:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetLast, LDicomIOD::GetPrev, LDicomIOD::GetNext, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays in a tree control the list of the IOD table */

L_VOID ShowList(CTreeCtrl *pDlg)
{
HTREEITEM hItem;
pDICOMIOD pIOD;

pIOD = LDicomIOD::GetFirst(NULL, FALSE);

while (pIOD != NULL)
{
hItem = pDlg->InsertItem(pIOD->pszName, TVI_ROOT, TVI_LAST);

pIOD = LDicomIOD::GetNext(pIOD, FALSE);
}
}

L_VOID Test(CTreeCtrl *pDlg)
{
ShowList(pDlg);
}


LDicomIOD::GetLast

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetLast(pIOD, bTree)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the IOD Structure */

Returns a pointer to the last item in the IOD Structure.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure within the IOD Structure. A pointer to the DICOMIOD structure that contains the last item in the IOD Structure will be returned.
bTree | Flag that indicates how the IOD Structure will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the IOD Structure as a tree.
 | FALSE | Evaluate the IOD Structure as a list.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the last item in the IOD Structure.
NULL | The IOD Structure is empty.

Comments

If the IOD Structure is evaluated as a tree structure, this function returns the last item on the same level as pIOD with the same parent as pIOD. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | Item 5
Item 6 | Item 7
NULL | Item 2

If the IOD Structure is evaluated as a list, the last item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the IOD Structure is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
NULL | Item 30
Item 12 | Item 30
Item 14 | Item 30
Item 22 | Item 30
Item 25 | Item 30

The following functions will also help you navigate the IOD Structure as either a tree or a list:

LDicomIOD::GetFirst

LDicomIOD::GetPrev

LDicomIOD::GetNext

If you evaluate the IOD Structure as a tree, you can also use the following functions to navigate the tree:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetPrev, LDicomIOD::GetNext, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays the name of the last item in the current level */

L_VOID Test()
{
pDICOMIOD pElement;
pDICOMIOD pLast;

pElement = LDicomIOD::Find(NULL, TAG_PATIENT_NAME, IOD_TYPE_ELEMENT, FALSE);
if (pElement != NULL)
{
pLast = LDicomIOD::GetLast(pElement, TRUE);
MessageBox(NULL, pLast->pszName, "Notice", MB_OK);
}
}

/* This example displays the name of the last item in the IOD table */

L_VOID Test()
{
pDICOMIOD pLast;

pLast = LDicomIOD::GetLast(NULL, FALSE);
if (pLast != NULL)
{
MessageBox(NULL, pLast->pszName, "Notice", MB_OK);
}
}


LDicomIOD::GetNext

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetNext(pIOD, bTree)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the IOD Structure */

Returns a pointer to the item in the IOD Structure that immediately follows the specified item.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure that contains an item in the IOD Structure. A pointer to the item in the IOD Structure that immediately follows this item will be returned.
bTree | Flag that indicates how the IOD Structure will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the IOD Structure as a tree.
 | FALSE | Evaluate the IOD Structure as a list.

Returns

!NULL | A pointer to a DICOMIOD structure that contains the item in the IOD Structure that immediately follows the item specified in pIOD.
NULL | There is not an item following pIOD. (pIOD is the last item in the IOD Structure.)

Comments

If the IOD Structure is evaluated as a tree structure, this function returns the next item on the same level as pIOD with the same parent as pIOD. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the IOD Structure is evaluated as a list, the next item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the IOD Structure is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 14 | Item 15
Item 4 | Item 5
Item 8 | Item 9
Item 19 | Item 20
Item 27 | Item 28
Item 30 | NULL

The following functions will also help you navigate the IOD Structure as either a tree or a list:

LDicomIOD::GetFirst

LDicomIOD::GetPrev

LDicomIOD::GetLast

If you evaluate the IOD Structure as a tree, you can also use the following functions to navigate the tree:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetPrev, LDicomIOD::GetLast, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays in a list-box control all classes from the IOD table */

L_VOID Test(CListBox *pDlg)
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::GetFirst(NULL, TRUE);
while (pIOD != NULL)
{
pDlg->AddString(pIOD->pszName);

pIOD = LDicomIOD::GetNext(pIOD, TRUE);
}
}


LDicomIOD::GetParent

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetParent(pIOD)

pDICOMIOD pIOD;

/* pointer to a DICOMIOD structure */

Returns a pointer to the item in the IOD Structure that contains the parent of the specified item.

Parameter | Description
pIOD | Pointer to a DICOMIODstructure that contains an item in the IOD Structure.

Returns

!NULL | A pointer to a DICOMIODstructure that contains the item in the IOD Structure that is the parent of the item specified in pIOD.
NULL | pIOD has no parent. (pIOD is a Level 0 item.)

Comments

This function requires that the IOD Structure is evaluated as a tree structure.

The parent is the ancestor one level higher than the specified item. If the specified item is a Level 0 item, this function will return NULL. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 2 | Item 3
Item 4 | Item3
Item 5 | Item 6

The following functions will also help you navigate the IOD Structure:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetRoot

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays the parent’s name of an item */

L_VOID Test()
{
pDICOMIOD pParent;
pDICOMIOD pElement;

pElement = LDicomIOD::Find(NULL, TAG_PATIENT_NAME, IOD_TYPE_ELEMENT, FALSE);
if (pElement != NULL)
{
pParent = LDicomIOD::GetParent(pElement);
MessageBox(NULL, pParent->pszName, "Notice", MB_OK);
}
}


LDicomIOD::GetPrev

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetPrev(pIOD, bTree)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_BOOL bTree; | /* flag that indicates how to evaluate the IOD Structure */

Returns a pointer to the item in the IOD Structure that immediately precedes the specified item.

Parameter | Description
pIOD | Pointer to a DICOMIODstructure that contains an item in the IOD Structure. A pointer to the item in the IOD Structure that immediately precedes this item will be returned.
bTree | Flag that indicates how the IOD Structure will be evaluated. Possible values are:
 | Value | Meaning
 | TRUE | Evaluate the IOD Structure as a tree.
 | FALSE | Evaluate the IOD Structure as a list.

Returns

!NULL | A pointer to a DICOMIODstructure that contains the item in the IOD Structure that immediately precedes the item specified in pIOD.
NULL | There is not an item preceding pIOD. (pIOD is the first item in the IOD Structure.)

Comments

If the IOD Structure is evaluated as a tree structure, this function returns the previous item on the same level as pIOD with the same parent as pIOD. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 4
Item 5 | NULL
Item 6 | Item 7

If the IOD Structure is evaluated as a list, the previous item in the list is returned. Please note that the numbering of the items in this illustration does indicate the order of the items when the IOD Structure is evaluated as a list.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | NULL
Item 15 | Item 14
Item 5 | Item 4
Item 9 | Item 8
Item 22 | Item 21
Item 25 | Item 24

The following functions will also help you navigate the IOD Structure as either a tree or a list:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

If you evaluate the IOD Structure as a tree, you can also use the following functions to navigate the tree:

LDicomIOD::GetRoot

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetCountModule, LDicomIOD::GetRoot, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays in a list-box control all classes from the IOD table */

L_VOID Test(CListBox *pDlg)
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::GetLast(NULL, TRUE);
while (pIOD != NULL)
{
pDlg->AddString(pIOD->pszName);

pIOD = LDicomIOD::GetPrev(pIOD, TRUE);
}
}


LDicomIOD::GetRoot

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::GetRoot(pIOD)

pDICOMIOD pIOD;

/* pointer to a DICOMIOD structure */

Returns a pointer to the root of the specified item.

Parameter | Description
pIOD | Pointer to a DICOMIOD structure that contains an item in the IOD Structure.

Returns

!NULL | A pointer to a DICOMIODstructure that contains the item in the IOD Structure that is the root of the item specified in pIOD.
NULL | The IOD Structure is empty or pIOD is NULL.

Comments

The root is the Level 0 ancestor of pIOD. If pIOD points to an item on Level 0, a pointer to that same item will be returned. Please note that the numbering of the items in this illustration is arbitrary and does not imply order.

If the passed pointer points to : | The function returns a pointer to :
Item 1 | Item 2
Item 3 | Item 2
Item 4 | Item4
Item 5 | Item 6

The following functions will also help you navigate the IOD Structure:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetParent

LDicomIOD::GetChild

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetParent, LDicomIOD::GetChild
Topics: | Working with Information Object Definitions

Example

/* This example displays the root’s name of an item */

L_VOID Test()
{
pDICOMIOD pRoot;
pDICOMIOD pElement;

pElement = LDicomIOD::Find(NULL, TAG_PATIENT_NAME, IOD_TYPE_ELEMENT, FALSE);
if (pElement != NULL)
{
pRoot = LDicomIOD::GetRoot(pElement);
MessageBox(NULL, pRoot->pszName, "Notice", MB_OK);
}
}


LDicomIOD::Insert

#include "Ltdic.h"

static pDICOMIOD LDicomIOD::Insert(pNeighbor, bChild, nCode, pszName, nType, nUsage, pszDescription)

pDICOMIOD pNeighbor; | /* pointer to a DICOMIOD structure */
L_BOOL bChild; | /* flag that indicates where to insert the item */
L_UINT32 nCode; | /* code */
L_CHAR * pszName; | /* name of the inserted item */
L_CHAR nType; | /* type */
L_UINT16 nUsage; | /* usage */
L_CHAR * pszDescription; | /* description */

Inserts a new item in the IOD Structure.

Parameter | Description
pNeighbor | Pointer to a DICOMIOD structure that contains an item in the IOD Structure. The inserted item will be inserted as a neighbor to this item, or as a child, depending on the value of bChild.
bChild | Flag that indicates where to insert the item. Possible values are:
 | Value | Meaning
 | TRUE | The new item will be inserted as the last child of pNeighbor.
 | FALSE | The new item will be inserted as the last sibling of pNeighbor.
nCode | Code value that indicates which Information Object Definition you are inserting. The information object may be a Class, a Module or a Tag. For lists of default values, refer to Data Element Tag Constants, IOD Class Constants, and IOD Module Constants.
pszName | Character string that contains the name of the inserted item.
nType | The type of Information Object Definition you are working with. Possible values are:
 | Value | Meaning
 | IOD_TYPE_CLASS | [0x00] Class type Information Object Definition.
 | IOD_TYPE_MODULE | [0x01] Module type Information Object Definition.
 | IOD_TYPE_ELEMENT | [0x02] Element type Information Object Definition.
nUsage | Value that indicates whether the Information Object is mandatory, conditional or optional, and the type of usage. For a list of possible values, refer to IOD Usage Constants. For more information on mandatory, conditional and optional usage, refer to An Overview of Dicom or the DICOM Spec.
pszDescription | Character string that contains a description of the inserted Information Object Definition.

Returns

!NULL | A pointer to a DICOMIOD structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

The illustrations below show how items are added to the IOD Structure (internally maintained as a tree), based on the value of bChild.

For the sake of these illustrations, the order of siblings is top to bottom. Therefore, since added items become the last sibling or the last child, these are drawn at the bottom of the appropriate group of items.

In this illustration, pNeighbor points to Item 1 and bChild is False. The new item is added as the last sibling of Item 1.

In this illustration, pNeighbor points to Item 1 and bChild is True. The new item is added as the last child of Item 1.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Delete, LDicomIOD::Reset, LDicomIOD::Default
Topics: | Working with Unique Identifiers

Example

/* This example inserts a new class in the IOD table */

L_VOID Test()
{
pDICOMIOD pClass;
pDICOMIOD pModule;
pDICOMIOD pElement;

/* Inserts a new class */
pClass = LDicomIOD::Insert(NULL, FALSE, 7000, "New Class", IOD_TYPE_CLASS, 0, "");

/* Inserts a module in the class */
pModule = LDicomIOD::Insert(pClass, TRUE, 7000, "AAA Module", IOD_TYPE_MODULE,
IOD_USAGE_M, "This is a module");

/* Inserts an element in the module */
pElement = LDicomIOD::Insert(pModule, TRUE, TAG_CONTENT_DATE, "XXX Element", IOD_TYPE_MODULE,
IOD_USAGE_1, "This is an element");

/* Inserts an element in the module */
pElement = LDicomIOD::Insert(pModule, TRUE, TAG_INSTITUTION_NAME, "YYY Element",
IOD_TYPE_MODULE, IOD_USAGE_3, "This is an element");
}


LDicomIOD::SetDescription

#include "Ltdic.h"

static L_BOOL LDicomIOD::SetDescription(pIOD, pszDescription)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_CHAR * pszDescription; | /* character string */

Sets the description of the specified item in the IOD Structure.

Parameter | Description
pIOD | Pointer to a structure that contains an item in the IOD Structure. The description of this item will be set using the string contained in pszDescription.
pszDescription | Character string that contains the description to be set.

Returns

TRUE | The description was successfully set.
FALSE | Not enough memory.

Comments

The following functions will also help you navigate the IOD Structure:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetParent

LDicomIOD::GetChild

LDicomIOD::GetRoot

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetParent, LDicomIOD::GetChild, LDicomIOD::GetRoot
Topics: | Working with Information Object Definitions

Example

/* This example changes the module’s description */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::FindModule(CLASS_US_IMAGE_STORAGE, MODULE_PATIENT_STUDY);
if (pIOD != NULL)
{
LDicomIOD::SetDescription(pIOD, "New Description");
}
}


LDicomIOD::Reset

#include "Ltdic.h"

static L_VOID LDicomIOD::Reset(L_VOID)

Removes all items from the IOD Structure.

Returns

None.

Comments

To reset the IOD Structure to the default values, use LDicomIOD::Default.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::Default, LDicomIOD::Delete
Topics: | Working with Information Object Definitions

Example

/* This example removes all items from the IOD table */

L_VOID Test()
{
LDicomIOD::Reset();
}


LDicomIOD::SetName

#include "Ltdic.h"

static L_BOOL LDicomIOD::SetName(pIOD, pszName)

pDICOMIOD pIOD; | /* pointer to a DICOMIOD structure */
L_CHAR * pszName; | /* character string */

Sets the name of the specified item in the IOD Structure.

Parameter | Description
pIOD | Pointer to a structure that contains an item in the IOD Structure. The name of this item will be set using the string contained in pszName.
pszName | Character string that contains the name to be set.

Returns

TRUE | The name was successfully set.
FALSE | Not enough memory.

Comments

The following functions will also help you navigate the IOD Structure:

LDicomIOD::GetFirst

LDicomIOD::GetLast

LDicomIOD::GetNext

LDicomIOD::GetParent

LDicomIOD::GetChild

LDicomIOD::GetRoot

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomIOD::GetFirst, LDicomIOD::GetLast, LDicomIOD::GetNext, LDicomIOD::GetPrev, LDicomIOD::GetCountModule, LDicomIOD::GetParent, LDicomIOD::GetChild, LDicomIOD::GetRoot
Topics: | Working with Information Object Definitions

Example

/* This example changes the module’s name */

L_VOID Test()
{
pDICOMIOD pIOD;

pIOD = LDicomIOD::FindModule( CLASS_US_IMAGE_STORAGE, MODULE_PATIENT_STUDY);
if (pIOD != NULL)
{
LDicomIOD::SetName(pIOD, "New Name");
}
}


LDicomNet::LDicomNet

#include "ltdic.h"

L_VOID LDicomNet::LDicomNet(pszPath, nMode)

L_VOID LDicomNet::LDicomNet(pszPath, nMode, bReserved)

L_CHAR * pszPath; | /* character string */
L_UINT32 nMode; | /* initialization mode */
L_BOOL bReserved; | /* reserved for future use */

Allocates memory for the network structure and sets the site of the temporary files. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszPath | Character string containing the location of the temporary files. DICOM uses temporary files during the course of creating a file. If this parameter is NULL, the DICOM temporary files are kept in the directory Windows places its own temporary files. If this parameter is not NULL, the temporary files are placed in the specified directory.
nMode | Flag that indicates the security mode to use when initializing the network structure. Possible values are:
 | Value | Meaning
 | DICOM_SECURE_NONE | No security mode.
 | DICOM_SECURE_ISCL | Integrated Secure Communication Layer security mode.
 | DICOM_SECURE_TLS | Transport Layer Security security mode.
bReserved | Reserved for future use. Pass 0.

Returns

None.

Comments

LDicomNet::LDicomNet(pszPath,nMode) Free any allocated memory by calling LDicomNet::~LDicomNet.

To initialize the LEADTOOLS DICOM DLL, call LDicomNet::StartUp.

The LEADTOOLS DICOM DLL must be initialized before using any of the Network operation functions.

If an incorrect value is passed for the nMode parameter, the object will be initialized without using a security mode.

LDicomNet::LDicomNet(pszPath,nMode,bReserved) Use this version of the LDicomNet constructor to modify the default security settings, or to use non-default security settings. As with LDicomNet::LDicomNet(pszPath,nMode), free any allocated memory by calling LDicomNet::~LDicomNet, and initialize the LEADTOOLS DICOM DLL by calling LDicomNet::StartUp. If an incorrect value is passed for the nMode parameter, the object will be initialized without using a security mode. In addition, when using LDicomNet::LDicomNet(pszPath,nMode,bReserved) it is also necessary to call LDicomNet::Initialize. For more information, refer to LDicomNet::Initialize. Note that the following uses of the LDicomNet constructors are functionally equivalent:

1.

LDicomNet *pNet = new LDicomNet(pszPath, nMode);

2.

LDicomNet *pNet = new LDicomNet(pszPath, nMode, 0);
If (pNet)
pNet->Initialize(pszPath, nMode, NULL);

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::~LDicomNet, LDicomNet::StartUp, LDicomNet::Initialize
Topics: | Working with DICOM Network Connections

Example

This is an example for LDicomNet::LDicomNet(pszPath,nMode).

{
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
int nRet;

//start the network
nRet = m_pDicomNet->StartUp();

if (nRet == DICOM_SUCCESS)
AfxMessageBox("StartUp() Successful");
else
AfxMessageBox("StartUp() Failed");

//set the temporary file path
m_pDicomNet = new LMyDicomNet("d:\\temp", DICOM_SECURE_NONE);

//...
//...do some network communication here
//...

//shut down the network
m_pDicomNet->ShutDown();

//this calls the LDicomNet destructor
delete m_pDicomNet;
}

For an example of LDicomNet::LDicomNet(pszPath,nMode,bReserved), refer to LDicomNet::Initialize.


LDicomNet::~LDicomNet

#include "ltdic.h"

virtual L_VOID LDicomNet::~LDicomNet(L_VOID)

Destroys the DICOM Network object and frees the memory. This function is available in the Medical Suite Toolkit.

Returns

None.

Comments

This function frees the memory allocated by LDicomNet::LDicomNet.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::LDicomNet
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::LDicomNet.


LDicomNet::Accept

#include "ltdic.h"

L_INT LDicomNet::Accept(hNet)

LDicomNet hNet;

/* a DICOM Network object */

Accepts a connection request from an SCU. This function is available in the Medical Suite Toolkit.

Parameter | Description
hNet | A DICOM Network object that references the host (the SCP).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

When an SCU requests a connection by calling LDicomNet::Connect, a call to the LDicomNet::OnAccept function is generated on the SCP. Within the LDicomNet::OnAccept function the SCP can decide whether to accept the connection or not. If the connection is accepted, LDicomNet::Accept is called. This generates a call to the LDicomNet::OnConnect function on the SCU, letting the SCU know the connection has been made.

You should always accept a connection request. Once the connection is made you can check the SCU and close the connection if you do not wish to maintain it. Since the connection requests are queued, if you do not accept a connection, it remains in the queue. When the next request is received, it is placed in the queue behind the first request. Calling LDicomNet::Accept at this point will connect the first request, not the second, since the first request is still in the queue.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Connect, LDicomNet::Listen, LDicomNet::OnConnect, LDicomNet::OnAccept
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnAccept.


LDicomNet::Close

#include "ltdic.h"

L_VOID LDicomNet::Close(L_VOID)

Closes the connection between an associated SCU and SCP. This function is available in the Medical Suite Toolkit.

Returns

None.

Comments

Calling this function generates a call to the LDicomNet::OnClose function. The LDicomNet::OnClose function is useful to both SCUs and SCPs.

Calling LDicomNet::Close closes the connection between an associated client and server. The Network connection itself is not shutdown until LDicomNet::ShutDown is called.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Accept, LDicomNet::Connect, LDicomNet::OnClose
Topics: | Working with DICOM Network Connections

Example

{
//This function is called by the server to close the connection from the
// most recently connect client.
//
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
//
//In this example, assume
//1. m_pDicomNet points to a valid object
//2. A connection exists between client and server
//3. An associate request has been sent and accepted

CString strMsg;
LDicomNet *pDicomNetClient;
L_UINT32 lClientCount;
L_CHAR szClientAddress[100];
L_UINT lClientPort;

//get the latest client, and close the connection
lClientCount = m_pDicomNet->GetClientCount();

if (lClientCount > 0)
{
pDicomNetClient = m_pDicomNet->GetClient(lClientCount - 1);
pDicomNetClient->GetPeerInfo(szClientAddress, &lClientPort);
strMsg.Format("Total Clients[%d]\nClosing Client [%s]", lClientCount, szClientAddress);
AfxMessageBox(strMsg);
pDicomNetClient->Close();
}
else
{
AfxMessageBox("No Active Clients");
}
}


LDicomNet::CloseForced

#include "ltdic.h"

L_INT LDicomNet::CloseForced (bForced)

L_BOOL bForced;

/* flag */

Closes an ISCL connection. This function is available in the Medical Suite toolkits.

Parameter | Description
bForced | Flag that indicates whether to force the disconnection. Possible values are:
 | Value | Meaning
 | TRUE | Kill the connection. (Force the disconnection.)
 | FALSE | Request disconnection. The disconnection can be refused by a peer.

Returns

DICOM_SUCCESS | Success.
>0 | An error occurred. Refer to Return Codes.

Comments

When bForced is set to TRUE, the connection is closed immediately. Therefore, it is best to determine if the ISCL message queue is empty before calling this function. To determine whether the ISCL queue is empty, use the LDicomNet::IsISCLQueueEmpty function.

Please note that LDicomNet::CloseForced (FALSE) is queued in the ISCL message queue. (It will be processed later.) LDicomNet::CloseForced (TRUE) is immediate, however.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::IsISCLQueueEmpty, Class Members
Topics: | Closing an ISCL Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

void CMainFrame::OnNetworkDisconnect()
{
// code from simple ISCL example
theApp.m_pConnectDicomNet->CloseForced (TRUE);
}


LDicomNet::Connect

#include "ltdic.h"

L_INT LDicomNet::Connect(pszHostAddress, nHostPort, pszPeerAddress, nPeerPort)

L_CHAR * pszHostAddress; | /* host IP address */
L_UINT nHostPort; | /* host port number */
L_CHAR * pszPeerAddress; | /* peer IP address */
L_UINT nPeerPort; | /* peer port number */

Connects an SCU to an SCP. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszHostAddress | Character string that contains the IP address of the host computer (the SCU's address).
nHostPort | Port number of the host (the SCU's port).
pszPeerAddress | Character string that contains the IP address of the peer computer to which to connect (the SCP's address).
nPeerPort | Port number of the peer computer to which to connect (the SCP's port).

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If pszHostAddress is "" or NULL, the IP address will be the local computer's address.

If nHostPort is 0, the port number will be the number of the first available port.

To connect to an SCP as an SCU, you must first create a DICOM Network object using LDicomNet::LDicomNet. Then call LDicomNet::Connect to establish the connection.

To use your computer as an SCP, you must first create a DICOM Network object using LDicomNet::LDicomNet. Then call LDicomNet::Listen to listen for incoming connection requests.

When an SCU calls this function, it generates an LDicomNet::OnAccept function call on the SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::LDicomNet, LDicomNet::StartUp, LDicomNet::Listen
Topics: | Working with DICOM Network Connections

Example

{
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
int nRet;
int iHostPort = 0; //Use first available port
int iPeerPort = PEER_PORT;
char *strHostIP = ""; //empty string means use local IP
char *strPeerIP = "207.238.49.190"; //Put a valid IP addres of a computer to connect to

//set the temporary file path
m_pDicomNet = new LMyDicomNet("d:\\temp", DICOM_SECURE_NONE);

//startup the network
nRet = m_pDicomNet->StartUp();

if (nRet == DICOM_SUCCESS)
AfxMessageBox("StartUp() Successful");
else
AfxMessageBox("StartUp() Failed");

//connect to a server
nRet = m_pDicomNet->Connect(strHostIP, iHostPort, strPeerIP, iPeerPort);

//Display "Connect" in window pane
this->SetWindowText("Connect");
m_nStatus = STATUS_CLIENT;
}


LDicomNet::ExternalAuthenticateISCL

#include "ltdic.h"

virtual L_UINT32 LDicomNet::ExternalAuthenticateISCL(nChallenge, nResponse, nParameter)

L_UINT64 nChallenge; | /* challenge code */
L_UINT64 nResponse; | /* response code */
L_UINT64 nParameter; | /* key */

Determines whether the response code is a valid response for the challenge code. This function is available in the Medical Suite toolkits.

Parameter | Description
nChallenge | Value that represents the challenge code sent to the peer computer. This value is similar to a time stamp. This function will determine whether the response code in the nResponse parameter is a valid response for this challenge code.
nResponse | Value that represents the response code generated by the peer computer. This value is similar to a time stamp. This function will determine whether this response code is a valid response for the challenge code in the nChallenge parameter.
nParameter | Value that indicates the current mutual authentication key.

Returns

DICOM_SUCCESS | The response code and challenge code match.
<> DICOM_SUCCESS | The response code and challenge code do not match.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetErrorSecure; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::GetAssociate

#include "ltdic.h"

LDicomAssociate * LDicomNet::GetAssociate(L_VOID)

Returns the DICOM Associate for the DICOM Network object. This function is available in the Medical Suite Toolkit.

Returns

The DICOM Associate associated with the DICOM Network object.

Comments

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

When the DICOM Association is no longer needed, it should be closed. For more information, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Working with DICOM Associate Connections

Example

{
//This example is called by the client after a connection has been made with the
//server, and an association has been sent and accepted.
//
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
//
//In this example, assume
//1. m_pDicomNet points to a valid object
//2. A connection exists between client and server
//3. An associate request has been sent and accepted

L_UCHAR nID;

//get the associate object for this client computer's connection
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//find the id for UID_VERIFICATION_CLASS within this association
//if it is supported by the association
nID = pDicomAssociate->FindAbstract(UID_VERIFICATION_CLASS);
if (nID == 0)
AfxMessageBox("Not Supported by this association!");
else
{
CString strMsg;
strMsg.Format("Found[%d]", nID);
AfxMessageBox(strMsg);
}
}


LDicomNet::GetAuthenticationAlgorithmTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetAuthenticationAlgorithmTLS(cipher)

L_CIPHERSUITE cipher;

/* ciphersuite */

Returns the mutual authentication mode or algorithm for the cipher. This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that indicates the ciphersuite for which to get the authentication mode or algorithm.

Returns

A value that represents the authentication mode or algorithm. Possible values are:

Value | Meaning
L_MUTUALAUTH_RSA | [0x20] Mutual authentication through RSA certificates.

Comments

There are several different cipher suites. Some differ only in the mutual authentication algorithm. Usually the authentication algorithm is based on RSA or DSS certificates.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetEncryptionAlgorithmTLS, LDicomNet::GetIntegrityAlgorithmTLS, LDicomNet::GetKeyExchangeAlgorithmTLS, LDicomNet::GetEncryptKeyLengthTLS, LDicomNet::GetMutualAuthKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
// create and initialize pDicomNet
int nRet;
nRet = pDicomNet->GetAuthenticationAlgorithmTLS(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
if(nRet == L_MUTUALAUTH_RSA)
AfxMessageBox(" Mutual authentication in TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA with L_MUTUALAUTH_RSA");
}


LDicomNet::GetChallengeISCL

#include "ltdic.h"

virtual L_UINT32 LDicomNet::GetChallengeISCL(nChallenge, nParameter)

L_UINT64 *nChallenge; | /* pointer to a variable */
L_UINT64 nParameter; | /* key */

Generates a random number. This function is available in the Medical Suite toolkits.

Parameter | Description
nChallenge | Pointer to a variable to be updated with the random number generated in the callback. This number is similar to a time stamp.
nParameter | Value that indicates the current mutual authentication key.

Returns

DICOM_SUCCESS | The generation of the random number was successful.
<> DICOM_SUCCESS | The generation of the random number was not successful.

Comments

The generation of a random number can use a pool of random (or pseudo-random) data. If the pool is empty, the GetChallenge function may fail. In this case, try to call GetChallenge later in the application, when some random data has been added to the pool.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetErrorSecure; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::GetCipherFromIndexTLS

#include "ltdic.h"

L_CIPHERSUITE LDicomNet::GetCipherFromIndexTLS(nIndex);

L_UINT32 nIndex;

/* index of the ciphersuite */

Returns a value that represents the ciphersuite present at the specified index. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Index of the ciphersuite to get. This is a zero-based index into an 8-position array that contains available ciphersuites, listed by preference.

Returns

<>0 | A value that indicates the ciphersuite agreed upon during the TLS protocol.
0 | No cipher suite has been agreed upon yet.

Comments

More ciphersuites from the TLS standard can be added. Currently however, LEADTOOLS only supports those ciphersuites listed in the L_CIPHERSUITE enumerated type.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::LDicomNet, LDicomNet::SetCipherToIndexTLS, LDicomNet::GetCiphersuiteTLS
Topics: | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
pDicomNet = new LDicomNet("", DICOM_SECURE_TLS);
pDicomNet->SetCipherToIndexTLS(0, TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
L_CIPHERSUITE test;
test = pDicomNet->GetCipherFromIndexTLS(0);
}


LDicomNet::GetCiphersuiteTLS

#include "ltdic.h"

L_CIPHERSUITE LDicomNet::GetCiphersuiteTLS()

Returns the cipher suite agreed upon during the TLS protocol. This function is available in the Medical Suite toolkits.

Returns

<>0 | A value that indicates the ciphersuite agreed upon during the TLS protocol.
0 | No cipher suite has been agreed upon yet.

Comments

The ciphersuite is chosen by the server as the first client proposed ciphersuite that the server can understand.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetCipherFromIndexTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
// LMyDicomNet is a class derived from LDicomNet
// pDicomNet is a pointer to a LMyDicomNet object: LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_TLS);
pDicomNet->SetCipherToIndexTLS(0, TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
pDicomNet->Connect(NULL, 0, "127.0.0.1", 2762);
}
// in a OnConnect callback:
L_VOID LMyDicomNet::OnConnect()
{
L_CIPHERSUITE test = pDicomNet->GetCiphersuiteTLS();
if(test == TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA)
AfxMessageBox(" Ciphersuite is TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA");
}


LDicomNet::GetClient

#include "ltdic.h"

LDicomNet LDicomNet::GetClient(nIndex)

L_UINT nIndex;

/* index of the SCU to get */

Returns the DICOM Network object of the SCU at the specified index. This function is available in the Medical Suite Toolkit.

Parameter | Description
nIndex | Index of the SCU to retrieve. The maximum number of SCUs allowed is set in LDicomNet::Listen. This index is zero based.

Returns

The DICOM Network object of the SCU at the specified index.

Comments

This function is only valid when called by an SCP. If this function is called by an SCU, it will return NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetClientCount, LDicomNet::GetServer
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::Close.


LDicomNet::GetClientCount

#include "ltdic.h"

L_UINT32 LDicomNet::GetClientCount(L_VOID)

Returns the number of SCUs connected to the SCP. This function is available in the Medical Suite Toolkit.

Returns

The number of SCUs connected to the SCP.

Comments

This value is only valid when called by an SCP. If this function is called by an SCU, it will return 0.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetClient, LDicomNet::GetServer
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::Close.


LDicomNet::GetCommBlockLengthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetCommBlockLengthISCL()

Returns the communication block length agreed upon during mutual authentication. This function is available in the Medical Suite toolkits.

Returns

The communication block length agreed upon during mutual authentication.

Comments

Using a block size that is too small or too big could impact performance.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetMaxCommBlockLengthISCL, Class Members
Topics: | Establishing an ISCL Line Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMaxCommBlockLengthISCL(8160);
// size of the blocks sent to the network
// layer will be 8192 bytes (a 32-bytes header is added)
pDicomNet->Connect(NULL, 0, "127.0.0.1", 2761);
// connect to a server running on local
// computer at port 2761
int nCommBlock = pDicomNet->GetCommBlockLengthISCL();
char str[40];
sprintf(str, "Negotiated communication block size is %d", nCommBlock);
AfxMessageBox(str);
}


LDicomNet::GetEncryptionAlgorithmTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetEncryptionAlgorithmTLS(cipher)

L_CIPHERSUITE cipher;

/* the ciphersuite */

Returns the encryption mode (DES, 3DES, etc) for the cipher. This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that indicates the ciphersuite for which to get the encryption mode or algorithm.

Returns

A value that indicates the encryption mode or algorithm. Possible values are:

Value | Meaning
L_CRYPT_DES | [0x01] DES encryption
L_CRYPT_3DES | [0x02] 3DES encryption

Comments

There are several different cipher suites. Some of these differ only in encryption mode or algorithm.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetAuthenticationAlgorithmTLS, LDicomNet::GetIntegrityAlgorithmTLS, LDicomNet::GetKeyExchangeAlgorithmTLS, LDicomNet::GetEncryptKeyLengthTLS, LDicomNet::GetMutualAuthKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
// create and initialize pDicomNet
nRet = pDicomNet->GetEncryptionAlgorithmTLS(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
if(nRet == L_CRYPT_3DES)
AfxMessageBox(" Encryption in TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA with L_CRYPT_3DES");
}


LDicomNet::GetEncryptKeyLengthTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetEncryptKeyLengthTLS(cipher)

L_CIPHERSUITE cipher;

/* ciphersuite */

Returns the effective length (in bits) of the encryption key associated with the specified ciphersuite (56 for DES etc). This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that indicates the ciphersuite for which to get the length of the encryption key.

Returns

Returns the effective length of the encryption key associated with the specified ciphersuite.

Comments

There are differences between the size of the key and the effective length. The security of a key is given by the effective length, not by the size (a DES key has 8 bytes, just like a DES40 key, but the first has 56 bits effective, and the second only 40.)

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetAuthenticationAlgorithmTLS, LDicomNet::GetIntegrityAlgorithmTLS, LDicomNet::GetEncryptionAlgorithmTLS, LDicomNet::GetKeyExchangeAlgorithmTLS, LDicomNet::GetMutualAuthKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
// create and initialize pDicomNet
nRet = pDicomNet->GetEncryptKeyLengthTLS(TLS_DHE_RSA_WITH_DES_EDE_CBC_SHA);
char strMsg[64];
sprintf(strMsg, "Effective key length for TLS_DHE_RSA_WITH_DES_EDE_CBC_SHA is %d", nRet);
AfxMessageBox(strMsg);
}


LDicomNet::GetErrorSecure

#include "ltdic.h"

L_UINT32 LDicomNet::GetErrorSecure()

Returns a special ISCL or TLS error. This function is available in the Medical Suite toolkits.

Returns

Returns the last occurring error code.

Returns a specialized ISCL or TLS error code. For a list of possible values, refer to Return Codes.

Comments

The errors returned by this function may be useful for debugging purposes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetStatusISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

// myLDicomNet is a class derived from LDicomNet. The methods are overridden as follows:

#include <stdlib.h> // for definition of rand()

L_UINT64 GetRandom()
{
L_UINT64 nRet;

nRet = ((L_UINT64)(rand())<<48) + ((L_UINT64)(rand())<<32) + (rand()<<16) + (rand()<<8) + rand();

return nRet;
}

L_UINT32 myLDicomNet::GetChallengeISCL(L_UINT64 *pChallenge, L_UINT64 nParameter)
{
*pChallenge = GetRandom();
return 0;
}
L_UINT32 myLDicomNet::InternalAuthenticateISCL(L_UINT64 nChallenge, L_UINT64 *pResponse, L_UINT64 nParameter)
{
*pResponse = nChallenge + 1;
return 0;
}

L_UINT32 myLDicomNet::ExternalAuthenticateISCL(L_UINT64 nChallenge, L_UINT64 nResponse, L_UINT64 nParameter)
{
if (nResponse == nChallenge + 1)
return 0;
else
return 1;
}

L_VOID myLDicomNet::OnReceive (L_INT nError, L_UCHAR nType, L_CHAR *pBuffer, L_UINT32 nBytes)
{
if (nError == DICOM_ERROR_ISCL_MSG_TRANSMISSION)
{
L_UINT32 nErrorStatus, nErrorCode;
nErrorStatus = GetStatusISCL();
nErrorCode = GetErrorSecure();
// usually GetErrorSecure is the same as the nError parameter. However, the internal error code keeps
// its value until another error happens and set it to another value.
// Even when nError is DICOM_SUCCESS, the GetErrorSecure will return the last error code generated
if(nErrorStatus == 57)
{
CString strTmp;
// I know that the message transmission request was refused
L_UINT32 nMutualAuthIndex, nEncryptIndex, nRequestedMessageLength;
nMutualAuthIndex = GetIndexForMutualAuthISCL();
nEncryptIndex = GetIndexForEncryptISCL();
nRequestedMessageLength = GetPeerRequestedMessageLengthISCL();
strTmp.Format("Error during receive\n Current auth index:%d\nCurrent encryption index %d\nPeer requested message length %d\n"
AfxMessageBox(strTmp);
}
}
};


LDicomNet::GetHostInfo

#include "ltdic.h"

L_INT LDicomNet::GetHostInfo(pszAddress, nPort)

L_CHAR * pszAddress; | /* pointer to an address variable */
L_UINT * nPort; | /* pointer to a port variable */

Gets the local address and port for the current connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszAddress | Pointer to a variable to be updated with the IP address of the Host.
nPort | Pointer to a variable to be updated with the port of the Host.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

To get information about a peer, use LDicomNet::GetPeerInfo.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetPeerInfo
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnClose.


LDicomNet::GetIndexForEncryptISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetIndexForEncryptISCL()

Gets the current index of the encryption key. This function is available in the Medical Suite toolkits.

Returns

The index for the key used for encryption. This value must be between 1 and 8, inclusively, where 1 represents the first key in the array.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetEncryptKeyISCL, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::GetIndexForMutualAuthISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::GetIndexForMutualAuthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetIndexForMutualAuthISCL()

Gets the current index of the mutual authentication key to be used during the mutual authentication process. This function is available in the Medical Suite toolkits.

Returns

The index for the key used for mutual authentication. This value must be between 1 and 8, inclusively, where 1 represents the first key in the array.

Comments

This function gets the index of the actual key used for mutual authentication operations. This index can be between 1 and 8, inclusively.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::GetIntegrityAlgorithmTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetIntegrityAlgorithmTLS(cipher)

L_CIPHERSUITE cipher;

/* ciphersuite */

Returns the message authentication code type (MD5, SHA) for the cipher. This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that indicates the ciphersuite for which to get the message authentication mode or algorithm.

Returns

A value that represents the message authentication code type. Possible values are:

Value | Meaning
L_MAC_SHA1 | [0x10] Secure Hash Algorithm (New and improved algorithm)

Comments

There are several different cipher suites. Some differ only in the MAC algorithm.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetAuthenticationAlgorithmTLS, LDicomNet::GetEncryptionAlgorithmTLS, LDicomNet::GetKeyExchangeAlgorithmTLS, LDicomNet::GetEncryptKeyLengthTLS, LDicomNet::GetMutualAuthKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
// create and initialize pDicomNet
nRet = pDicomNet->GetIntegrityAlgorithmTLS(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
if(nRet == L_MAC_SHA1)
AfxMessageBox(" Message authentication codes in TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA with L_MAC_SHA1");
}


LDicomNet::GetKeyExchangeAlgorithmTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetKeyExchangeAlgorithmTLS(cipher)

L_CIPHERSUITE cipher;

/* ciphersuite */

Returns a value that represents the key exchange algorithm. This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that indicates the ciphersuite for which to get the key exchange algorithm.

Returns

Value that represents the key exchange algorithm. Possible values are:

Value | Meaning
L_KEYEXCHANGE_RSA_SIGNED_DHE | [0x40] RSA signed Diffie-Hellman ephemereal.

Comments

The key exchange algorithm is the algorithm for securely generating secret keys.

There are several different cipher suites. Some differ only in the key exchange algorithm.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetAuthenticationAlgorithmTLS, LDicomNet::GetIntegrityAlgorithmTLS, LDicomNet::GetEncryptionAlgorithmTLS, LDicomNet::GetEncryptKeyLengthTLS, LDicomNet::GetMutualAuthKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
// create and initialize pDicomNet
nRet = pDicomNet->GetKeyExchangeAlgorithmTLS(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
if(nRet == L_MAC_SHA1)
AfxMessageBox(" Key exchange in TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA with L_KEYEXCHANGE_DHE");
}


LDicomNet::GetMutualAuthKeyLengthTLS

#include "ltdic.h"

L_UINT32 LDicomNet::GetMutualAuthKeyLengthTLS(cipher)

L_CIPHERSUITE cipher;

/* ciphersuite */

Returns the effective length (in bits) of the mutual authentication key associated with the specified ciphersuite. This function is available in the Medical Suite toolkits.

Parameter | Description
cipher | Value that represents the current ciphersuite for which to get the length of the mutual authentication key.

Returns

Returns the effective length of the mutual authentication key.

Comments

The usual sizes for a RSA key is 512 and 1024 bits. There is a limitation for import in Europe – a RSA key must be at least 768 bits long. There are no known export restrictions. In addition, the length of the mutual authentication key can be found only after a successful call to the LDicomNet::SetClientCertificateTLS or LDicomNet::SetServerCertificateTLS function.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetAuthenticationAlgorithmTLS, LDicomNet::GetIntegrityAlgorithmTLS, LDicomNet::GetEncryptionAlgorithmTLS, LDicomNet::GetKeyExchangeAlgorithmTLS, LDicomNet::GetEncryptKeyLengthTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
// create and initialize pDicomNet
nRet = pDicomNet->GetMutualAuthKeyLengthTLS(TLS_DHE_RSA_WITH_DES_EDE_CBC_SHA);
char strMsg[64];
sprintf(strMsg, "Mutual authentication key length for TLS_DHE_RSA_WITH_DES_EDE_CBC_SHA is %d", nRet);
AfxMessageBox(strMsg);
}


LDicomNet::GetPeerAuthDataISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetPeerAuthDataISCL(pBuffer, nLength);

L_VOID *pBuffer; | /* pointer to a buffer */
L_UINT32 *nLength; | /* pointer to a 32-bit unsigned integer */

Gets the authentication data the peer computer sent during mutual authentication. This function is available in the Medical Suite toolkits.

Parameter | Description
pBuffer | Pointer to a buffer to be updated with the authentication data of the peer computer. This buffer must be 128 bytes long to hold the longest possible authentication data.
nLength | Pointer to an integer variable. This variable contains initially the size of the pBuffer array. After this function returns, it is updated with the actual size of the peer authentication data.

Returns

DICOM_SUCCESS | Success. The peer authentication data were copied into pBuffer and the variable pointed to by pLength was updated with the length of the authentication data.
DICOM_ERROR_PARAMETER | A parameter error occurred. The authentication data could not be retrieved. (pBuffer is NULL, or the value pointed to by pLength is not large enough to contain the entire peer authentication data.)

Comments

If pBuffer is NULL or the value pointed to by pLength (size of pBuffer) is too small for the peer authentication data, the return value is DICOM_ERROR_PARAMETER and *nLength is updated with the required length of the peer authentication data. No other actions are performed.

This function can only be called by the receiver of a message, if the message is not successfully received.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::GetPeerMACISCL, LDicomNet::GetPeerEncryptionISCL, LDicomNet::GetPeerRequestedMessageLengthISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

// LMyDicomNet is derived from LDicomNet
L_VOID LMyDicomNet::OnSecureLinkReady(L_UINT32 nError)
{
if(nError != DICOM_SUCCESS)
{
AfxMesageBox("ISCL parameter negotiation and mutual authentication failed");
return;
}
L_CHAR peerAuthData[128];
L_UINT32 n = 128;
GetPeerAuthDataISCL(peerAuthData, &n);
CString strMsg;
strMsg.Format("Connected with the peer identified by: %s\n", peerAuthData);
AfxMessageBox(strMsg);
};


LDicomNet::GetPeerEncryptionISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetPeerEncryptionISCL();

Returns a value that represents the encryption mode the sender used when sending a message. This function is available in the Medical Suite toolkits.

Returns

Returns a value representing the current encryption mode used by the sender. Possible values are:

Value | Meaning
DICOM_ISCL_ENCRYPT_NONE | The data is transmitted without encryption.
DICOM_ISCL_ENCRYPT_DESCBC | The data is transmitted encrypted using the DES algorithm in cipher block chaining mode.

Comments

This function returns a value that represents the encryption mode the sender used when sending a message to the receiver. If the encryption mode is not the same for the sender and the receiver, the message will not be sent successfully. If the MAC type is not the same on the sender and the receiver, the message will not be sent successfully.

This function can only be called by the receiver, once the sender has attempted to send a message.

To set the encryption mode, use the LDicomNet::SetDefaultEncryptionISCL function.

To set the MAC type, use the LDicomNet::SetDefaultSigningISCL function.

The encryption mode and the MAC are specified for every message, not for each connection. Every message can have a different encryption mode and MAC, keeping the connection parameters unchanged.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::GetPeerMACISCL, LDicomNet::GetPeerAuthDataISCL, LDicomNet::GetPeerRequestedMessageLengthISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

// LMyDicomNet is a class derived from LDicomNet
void LMyDicomNet::OnReceive(L_INT nError, L_UCHAR nType, L_CHAR *pBuffer, L_UINT32 nBytes)
{
if (nError == DICOM_ERROR_ISCL_MSG_TRANSMISSION)
{
char message[120], cryptalg[64];
if(GetPeerEncryptionISCL() == DICOM_ISCL_ENCRYPT_NONE)
strcpy(cryptalg, "no encryption");
else
strcpy(cryptalg, "DES in cipher block chaining mode");
sprintf(message, "Sender tried to send a message encrypted with %s", cryptalg);
AfxMessageBox(message);
}
}


LDicomNet::GetPeerInfo

#include "ltdic.h"

L_INT LDicomNet::GetPeerInfo(pszAddress, nPort)

L_CHAR * pszAddress; | /* pointer to an address variable */
L_UINT * nPort; | /* pointer to a port variable */

Gets the peer address and port for the current connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszAddress | Pointer to a variable to be updated with the IP address of the Peer of the connection.
nPort | Pointer to a variable to be updated with the port of the Peer of the connection.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetHostInfo
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnClose.


LDicomNet::GetPeerMACISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetPeerMACISCL();

Returns a value that represents the MAC type the sender used when sending a message. This function is available in the Medical Suite toolkits.

Returns

Returns a value representing the current MAC type used by the sender. Possible values are:

Value | Meaning
DICOM_ISCL_MAC_NONE | No message authentication code was used.
DICOM_ISCL_MAC_MD5 | A 128 bit MD5 message authentication code was transmitted with the message.
DICOM_ISCL_MAC_DESMAC | A 64 bit DESMAC authentication code was transmitted with the message.

Comments

This function returns a value that represents the type of MAC the sender used when sending a message to the receiver. If the type of MAC is not the same for the sender and the receiver, the message will not be sent successfully. If the encryption mode is not the same on the sender and the receiver, the message will not be sent successfully.

This function can only be called by the receiver, once the sender has attempted to send a message.

To set the MAC type, use the LDicomNet::SetDefaultSigningISCL function.

To set the encryption mode, use the LDicomNet::SetDefaultEncryptionISCL function.

The encryption mode and the MAC are specified for every message, not for each connection. Every message can have a different encryption mode and MAC, keeping the connection parameters unchanged.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::GetPeerEncryptionISCL, LDicomNet::GetPeerAuthDataISCL, LDicomNet::GetPeerRequestedMessageLengthISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

// LMyDicomNet is a class derived from LDicomNet
void LMyDicomNet::OnReceive(L_INT nError, L_UCHAR nType, L_CHAR *pBuffer, L_UINT32 nBytes)
{
if (nError == DICOM_ERROR_ISCL_MSG_TRANSMISSION)
{
char message[120], signalg[64];
if(GetPeerMACISCL() == DICOM_ISCL_MAC_NONE)
strcpy(signalg, "no message authentication code");
else if(GetPeerMACISCL() == DICOM_ISCL_MAC_MD5)
strcpy(signalg, "MD5 algorithm");
else
strcpy(signalg, "SHA algorithm");
sprintf(message, "Sender tried to send a message with MAC %s", signalg);
AfxMessageBox(message);
}
}


LDicomNet::GetPeerRequestedMessageLengthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetPeerRequestedMessageLengthISCL()

Gets the length of the message sent unsuccessfully by a peer computer. This function is available in the Medical Suite toolkits.

Returns

Size of the message that was refused, in bytes.

Comments

If on a server there is a limit for message size smaller than the one of the client, a client can try to send a very long message. This can lead to problems on the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::GetPeerMACISCL, LDicomNet::GetPeerAuthDataISCL, LDicomNet::GetPeerEncryptionISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::GetQueueSend

#include "ltdic.h"

L_UINT32 LDicomNet::GetQueueSend(L_VOID)

Returns the number of bytes in the send queue. This function is available in the Medical Suite Toolkit.

Returns

The number of bytes in the send queue.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Working with DICOM Network Connections

Example

/* This example displays the number of bytes not sent */

L_VOID Test(LDicomNet *pNet)
{
L_CHAR szText[80];

sprintf(szText, "%u", pNet->GetQueueSend());
MessageBox(NULL, szText, "Notice", MB_OK);
}


LDicomNet::GetServer

#include "ltdic.h"

LDicomNet LDicomNet::GetServer(L_VOID)

Returns the DICOM Network object of the SCP. This function is available in the Medical Suite Toolkit.

Returns

The DICOM Network object of the SCP connected to the SCU.

Comments

The object returned is valid only if the calling object is an SCU. If the calling object is an SCP, this function will return NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetClient, LDicomNet::GetClientCount
Topics: | Working with DICOM Network Connections

Example

/* This example displays the number of clients connected to the some server */

L_VOID Test(LDicomNet *pNet)
{
LDicomNet *pServer;
L_CHAR szText[80];

pServer = pNet->GetServer();

sprintf(szText, "%u", pServer->GetClientCount());
MessageBox(NULL, szText, "Notice", MB_OK);
}


LDicomNet::GetStatusISCL

#include "ltdic.h"

L_UINT32 LDicomNet::GetStatusISCL()

Returns the internal ISCL status when an error occurs. This function is available in the Medical Suite toolkits.

Returns

Returns a value that indicates the internal status. Possible values are:

Value | Meaning
0 | Not connected
1 | Wait for line connection check request
2 | Got a line connection check request
3 | Wait for mutual authentication request
4 | Got mutual authentication request
5 | Wait for mutual authentication pass 1
6 | Got mutual authentication pass 1
7 | Wait for mutual authentication pass 3
8 | Got mutual auth pass 3
11 | Wait for message transmission response
12 | Encrypt and send message
14 | Compute, encrypt and send MAC
16 | Wait for random number for generating session key response
33 | Wait for line disconnection response
50 | Wait for line connection response
51 | Got line connection response, sending mutual authentication request
52 | Wait for mutual authentication response
53 | Sending mutual authentication pass 1
54 | Wait for mutual authentication pass 2
55 | Got mutual authenticate pass 2, sending mutual authenticate pass 3
56 | Wait for mutual authentication completion
57 | Neutral status
22 | Wait for random number for generating key request
23 | Computing session key
24 | Wait for packets with data
25 | Received all data, wait for MAC code

Comments

The current ISCL status is set to neutral if certain errors occur, and to 0 if other errors occur.

Use returned error codes with the ISCL internal status returned by this function, to find where a error occurred. For example, DICOM_ERROR_ISCL_LOCAL_ICCARD can occur during GetChallenge, InternalAuthenticate or ExternalAuthenticate.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetErrorSecure, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::Initialize

#include "ltdic.h"

L_INT LDicomNet::Initialize(pszPath, nMode, pCtxCreate)

L_CHAR *pszPath; | /* character string */
L_UINT32 nMode; | /* initialization mode */
L_SSL_CTX_CREATE *pCtxCreate; | /* pointer to a structure */

This function is to be used in conjunction with the LDicomNet::LDicomNet(*pszPath, nMode, bReserved) constructor in order to change security options from the defaults. This function is available in the Medical Suite toolkits.

Parameter | Description
pszPath | Character string that contains the location of the temporary files. This should be the same string that was used in the LDicomNet constructor.
nMode | Flag that indicates the security mode to use when initializing the network structure. This should be the same flag that was used in the LDicomNet constructor. Possible values are:
 | Value | Meaning
 | DICOM_SECURE_NONE | No security mode.
 | DICOM_SECURE_ISCL | Integrated Secure Communication Layer security mode.
 | DICOM_SECURE_TLS | Transport Layer Security security mode.
pCtxCreate | Pointer to the L_SSL_CTX_CREATE structure that is used to modify the security defaults. This structure is used only if the nMode flag is DICOM_SECURE_TLS. Pass NULL to get the default values.

Returns

SUCCESS | The function was successful.
> 0 | An error occurred. Refer to Return Codes..

Comments

This function is to be used in conjunction with the LDicomNet::LDicomNet(*pszPath, nMode, bReserved) constructor when changing security options from the defaults. Note that when using the LDicomNet::LDicomNet(*pszPath, nMode, bReserved) version of the constructor, in addition to calling LDicomNet::Startup it is also necessary to call LDicomNet::Initialize in order to prepare the LDicomNet object for use. Use the pCtxCreate parameter when the nMode flag is set to DICOM_SECURE_TLS.

Note that the following uses of the LDicomNet constructors are functionally equivalent:

1.

LDicomNet *pNet = new LDicomNet(pszPath, nMode);

2.

LDicomNet *pNet = new LDicomNet(pszPath, nMode, 0);
If (pNet)
pNet->Initialize(pszPath, nMode, NULL);

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::~LDicomNet, LDicomNet::StartUp, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information
 | DICOM Network Connection: Creating a Network Connection
 | DICOM Connection: TLS Security

Example

// This sample creates a CMyDicomNet object with security
// The CMyDicomNet object is configured so that if a client connects:
// 1. it requires and verifies the client certificate
// 2. it will support SSL version 3 or TLS Version 1 for the handshake
// 3. it uses trusted certificate authority CA_CERT_NAME to verify the client certificate
// 4. it verifies the client certificate chain to a maximum depth of 2
//
// The CMyDicomNet object is assigned the certificate SERVER_CERT_NAME, which
// contains a password encrypted private key.
// The CMyDicomNet class implements the OnPrivateKeyPassword virtual function, which is
// used to supply the encryption password of the private key.

// Class CMyDicomNet

class CMyDicomNet : public LDicomNet
{
public:
CMyDicomNet(L_CHAR *pszPath, L_INT32 nMode, L_BOOL bReserved);
virtual ~CMyDicomNet();

virtual L_INT OnPrivateKeyPassword(L_CHAR *pszPassword, L_INT nSize, L_INT nFlag);

};

CMyDicomNet::CMyDicomNet(L_CHAR *pszPath, L_INT32 nMode, L_BOOL bReserved ) : LDicomNet(pszPath, nMode, bReserved)

{

}

CMyDicomNet::~CMyDicomNet()
{

}

L_INT CMyDicomNet::OnPrivateKeyPassword(L_CHAR *pszPassword, L_INT nSize, L_INT nFlag)
{
LPCSTR pszMyPassword= "test";
L_INT nRet = 0;

if ((L_INT)strlen(pszMyPassword) < nSize)
{
strcpy(pszPassword, pszMyPassword);
nRet = strlen(pszMyPassword);
}
return nRet;
}

#ifndef CA_CERT_NAME
#define CA_CERT_NAME "E:\\certificates\\CA.pem"
#endif

#ifndef SERVER_CERT_NAME
#define SERVER_CERT_NAME "E:\\certificates\\Server.pem"
#endif

void CClDicomSamplesDlg::OnButtonLdicomnet()
{
L_INT nRet = DICOM_SUCCESS;
LDicomNet::StartUp();

CMyDicomNet *pNet = new CMyDicomNet(NULL, DICOM_SECURE_TLS, 0);
if (pNet)
{
L_SSL_CTX_CREATE ctxCreate;
memset(&ctxCreate, 0, sizeof(L_SSL_CTX_CREATE));
ctxCreate.uStructSize = sizeof(L_SSL_CTX_CREATE);
ctxCreate.uFlags = FLAG_SSL_CTX_CREATE_METHOD_TYPE | FLAG_SSL_CTX_CREATE_VERIFY_MODE |
FLAG_SSL_CTX_CREATE_VERIFY_DEPTH | FLAG_SSL_CTX_CREATE_OPTIONS | FLAG_SSL_CTX_CREATE_CAFILE;
ctxCreate.nMethodTypeSSL= TYPE_SSLV23_METHOD;

ctxCreate.pszCAfile = CA_CERT_NAME;
ctxCreate.uVerifyMode = L_SSL_VERIFY_PEER | L_SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
ctxCreate.nVerifyDepth = 2;
ctxCreate.nOptions = L_SSL_OP_NO_SSLv2|L_SSL_OP_ALL;
ctxCreate.nReserved1 = 0;
ctxCreate.nReserved2 = 0;

nRet = pNet->Initialize(NULL, DICOM_SECURE_TLS, &ctxCreate);

if (nRet == DICOM_SUCCESS)
{
// Assign the server the certificate
// Note that SERVER_CERT_NAME contains both the password and an ecnrypted private key
// When loading the private key, the OnPrivateKeyPassword virtual function is called
// so that the encryption password "test" can be supplied
nRet = pNet->SetServerCertificateTLS (SERVER_CERT_NAME, L_TLS_FILETYPE_PEM, NULL);

CString csMsg;
if (nRet == DICOM_SUCCESS)
csMsg.Format("%s loaded successfully", SERVER_CERT_NAME);
else
csMsg.Format("%s could not be loaded successfully -- error[%d]", SERVER_CERT_NAME, nRet);
AfxMessageBox(csMsg);
}

//
// Use the CMyDicomNet object
//

// Cleanup
delete pNet;
LDicomNet::ShutDown();
}
}


LDicomNet::InternalAuthenticateISCL

#include "ltdic.h"

virtual L_UINT32 LDicomNet::InternalAuthenticateISCL(nChallenge, nResponse, nParameter)

L_UINT64 nChallenge; | /* challenge code */
L_UINT64 *nResponse; | /* pointer to a variable to be updated */
L_UINT64 nParameter; | /* key */

Generates a response code, based on the specified challenge code. This function is available in the Medical Suite toolkits.

Parameter | Description
nChallenge | Challenge code received by the callback function. This challenge code will be used in the generation of the response code. This value is similar to a time stamp.
nResponse | Pointer to a variable to be updated with the response code generated by the callback function.
nParameter | Value that indicates the current mutual authentication key.

Returns

DICOM_SUCCESS | The generation of the response code was successful.
<> DICOM_SUCCESS | The generation of the response code was not successful.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::GetErrorSecure; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::GetErrorSecure.


LDicomNet::IsActivated

#include "ltdic.h"

L_BOOL LDicomNet::IsActivated(L_VOID)

Indicates whether the connection has been activated. This function is available in the Medical Suite Toolkit.

Returns

TRUE | The connection has been activated.
FALSE | The connection has not been activated.

Comments

A connection is activated by calling LDicomNet::Listen, LDicomNet::Connect, or LDicomNet::Accept. Therefore, if any of these functions have been called for the connection, this function will return TRUE. Otherwise it will return FALSE.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Connect, LDicomNet::Listen, LDicomNet::Accept, LDicomNet::LDicomNet, LDicomNet::StartUp
Topics: | Working with DICOM Network Connections
 | Creating a DICOM Network Connection
 | Creating an DICOM Associate Connection

Example

{
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
//
//In this example, assume
//1. m_pDicomNet points to a valid object
//2. A connection exists between client and server
//3. An associate request has been sent
CString strMsg;
BOOL bActivated, bConnected, bAssociated;

bActivated = m_pDicomNet->IsActivated();
bConnected = m_pDicomNet->IsConnected();
bAssociated = m_pDicomNet->IsAssociated();

strMsg.Format("IsActive[%d]\nIsConnected[%d]\nIsAssociated[%d]", bActivated, bConnected, bAssociated);
AfxMessageBox(strMsg);
}


LDicomNet::IsAssociated

#include "ltdic.h"

L_BOOL LDicomNet::IsAssociated(L_VOID)

Indicates whether the connection has been associated. This function is available in the Medical Suite Toolkit.

Returns

TRUE | The connection has been associated.
FALSE | The connection has not been associated.

Comments

A connection has been associated if the SCP of the connection has called LDicomNet::SendAssociateAccept and the LDicomNet::OnReceiveAssociateAccept was generated on the SCU of the connection. If this exchange has occurred, this function will return TRUE, otherwise it will return FALSE.

For more information on creating an associated connection, refer to Creating a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendAssociateAccept, LDicomNet::OnReceiveAssociateAccept, LDicomAssociate::LDicomAssociate, LDicomNet::LDicomNet, LDicomNet::StartUp, LDicomNet::SendAssociateRequest
Topics: | Working with DICOM Network Connections
 | Creating a DICOM Network Connection
 | Creating an DICOM Associate Connection

Example

For an example, refer to LDicomNet::IsActivated.


LDicomNet::IsConnected

#include "ltdic.h"

L_BOOL LDicomNet::IsConnected(L_VOID)

Indicates whether a connection has been established. This function is available in the Medical Suite Toolkit.

Returns

TRUE | A connection has been established.
FALSE | A connection has not been established.

Comments

A connection is created by an SCU calling LDicomNet::Connect and the SCP responding by calling LDicomNet::Accept. If this has occurred successfully, this function will return TRUE. Otherwise, it will return FALSE.

For more information on creating a connection, refer to Creating a DICOM Network Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Connect, LDicomNet::Accept, LDicomNet::LDicomNet, LDicomNet::StartUp
Topics: | Working with DICOM Network Connections
 | Creating a DICOM Network Connection
 | Creating an DICOM Associate Connection

Example

For an example, refer to LDicomNet::IsActivated.


LDicomNet::IsISCLQueueEmpty

#include "ltdic.h"

L_BOOL LDicomNet::IsISCLQueueEmpty()

Determines whether the ISCL transmission queue is empty. This function is available in the Medical Suite toolkits.

Returns

Returns a value that indicates whether the ISCL transmission queue is empty. Possible values are:

TRUE | The ISCL transmission queue is empty.
FALSE | The ISCL transmission queue is not empty.

Comments

The ISCL messages are added to the ISCL transmission queue, and will be sent in order on the network. Every object has its own ISCL transmission queue.

The ISCL transmission queue contains requests to send data, to send non-secure data and the requests for closing the connection. Closing the connection does not start until all send requests are processed.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCEchoRequest, LDicomNet::CloseForced, Class Members
Topics: | Closing an ISCL Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

void CMainFrame::OnNetworkSendcechorequest()
{
// taken from ISCL simple application
theApp.m_pConnectDicomNet->SendCEchoRequest('A', 10, "pClass");
L_BOOL bRet;
bRet = theApp.m_pConnectDicomNet->IsISCLQueueEmpty();
if(bRet == TRUE)
AfxMessageBox("ISCL queue is empty");
else
AfxMessageBox("ISCL queue is not empty");
}


LDicomNet::Listen

#include "ltdic.h"

L_INT LDicomNet::Listen(pszHostAddress, nHostPort, nNbPeers)

L_CHAR * pszHostAddress; | /* host IP address */
L_UINT nHostPort; | /* host port number */
L_INT nNbPeers; | /* maximum number of peers */

Establishes a connection to listen for incoming connection requests. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszHostAddress | Character string that contains the IP address of the host computer (the SCP's address).
nHostPort | Port number of the host (the SCP's port).
nNbPeers | The maximum number of (SCUs) that may be connected to the SCP.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

If pszHostAddress is "" or NULL, the IP address will be the local computer's address.

If nHostPort is 0, the port number will be the number of the first available port.

To connect to a server as a client, you must first create and initialize a DICOM Network object using LDicomNet::LDicomNet . Then call LDicomNet::Connect to establish the connection.

To use your computer as an SCP, you must first create a DICOM Network object using LDicomNet::LDicomNet. Then call LDicomNet::Listen to listen for incoming connection requests.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::LDicomNet, LDicomNet::StartUp, LDicomNet::Listen
Topics: | Working with DICOM Network Connections

Example

{
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
int nRet;

//set the temporary file path
m_pDicomNet = new LMyDicomNet("d:\\temp", DICOM_SECURE_NONE);

char *strHostIP = "";
int iPeerPort = PEER_PORT;

//startup the network
nRet = m_pDicomNet->StartUp();

//create a server to accept up to 25 clients
m_pDicomNet->Listen(strHostIP, iPeerPort, 25);
}


LDicomNet::OnAccept

#include "ltdic.h"

virtual L_VOID LDicomNet::OnAccept(nError)

L_INT nError;

/* error code */

Notifies a listening connection (SCP) that it can accept pending connection requests. This function is available in the Medical Suite Toolkit.

Parameter | Description
nError | Error code. Refer to Return Codes.

Returns

None.

Comments

A call to this function is generated on an SCP when an SCU calls LDicomNet::Connect.

To accept a connection request, call LDicomNet::Accept.

You should always accept a connection request. Once the connection is made you can check the client and close the connection if you do not wish to maintain it. Since the connection requests are queued, if you do not accept a connection, it remains in the queue. When the next request is received, it is placed in the queue behind the first request. Calling LDicomNet::Accept at this point will connect the first request, not the second, since the first request is still in the queue.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Connect, LDicomNet::Accept, LDicomNet::OnConnect
Topics: | Creating a DICOM Network Connection

Example

L_VOID LMyDicomNet::OnAccept(L_INT nError)
{
L_CHAR szClientAddress[100], szServerAddress[100];
L_UINT lServerPort, lClientPort;
CString strMsg;
CString strTmp;
LMyDicomNet *pDicomNetClient;
L_UINT32 lClientCount;

strMsg.Format("*** OnAccept ***\n");
if (nError == DICOM_SUCCESS)
{
//Server must accept the connection attempt--can reject it later
pDicomNetClient = new LMyDicomNet(NULL, DICOM_SECURE_NONE);
Accept(pDicomNetClient);
strMsg = strMsg + "Accepted\n";

//display some information about the connection
GetHostInfo(szServerAddress, &lServerPort);
strTmp.Format("ServerAddress[%s]\nServerPort[%d]\n", szServerAddress, lServerPort);
strMsg = strMsg + strTmp;

//get total client count
lClientCount = GetClientCount();
strTmp.Format("ClientCount[%d]\n", lClientCount);
strMsg = strMsg + strTmp;

//Get client information
pDicomNetClient->GetPeerInfo(szClientAddress, &lClientPort);
strTmp.Format("ClientAddress[%s]\nClientPort[%d]\n", szClientAddress, lClientPort);
strMsg = strMsg + strTmp;

}
else
{
strTmp.Format("Error[%d]\n",nError);
strMsg = strMsg + strTmp;
}

AfxMessageBox(strMsg);

//reject the connection if we do not like the address
if (strcmp(szClientAddress,"207.238.49.190")==0)
{ //close the connection
CString strTmp;
strTmp.Format("Closing connection with client [%s]...", szClientAddress);
AfxMessageBox(strTmp);
Close();
}
}


LDicomNet::OnClose

#include "ltdic.h"

virtual L_VOID LDicomNet::OnClose(nError, pNet)

L_INT nError; | /* error code */
LDicomNet *pNet; | /* a DICOM Network object */

Notifies a member of a connection that the connection was closed. This function is available in the Medical Suite Toolkit.

Parameter | Description
nError | Error code. Refer to Return Codes.
pNet | The DICOM Network object for the peer member of the connection.

Returns

None.

Comments

A call to this function is generated by a call to LDicomNet::Close. The LDicomNet::OnClose function is useful to both SCUs and SCPs.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions:

LDicomNet::Close

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event
//the IP that generated the event, the IP that received the event
//any other relevant data

//For the entire derived class, see (hyperlink)LMyDicomNet class

//OnClose()--server or client receives this
L_VOID LMyDicomNet::OnClose(L_INT nError, LDicomNet *pNet)
{
L_CHAR szHostAddress[100], szPeerAddress[100];
L_UINT lHostPort, lPeerPort;
CString strMsg;
CString strTmp;

strMsg = "*** OnClose ***\n";
GetHostInfo(szHostAddress, &lHostPort);
strTmp.Format("HostAddress[%s]\nHostPort[%d]\n", szHostAddress, lHostPort);
strMsg = strMsg + strTmp;

pNet->GetPeerInfo(szPeerAddress, &lPeerPort);
strTmp.Format("PeerAddress[%s]\nPeerPort[%d]\n", szPeerAddress, lPeerPort);
strMsg = strMsg + strTmp; AfxMessageBox(strMsg);
}


LDicomNet::OnConnect

#include "ltdic.h"

virtual L_VOID LDicomNet::OnConnect(nErro)

L_INT nError;

/* error code */

Notifies the SCU that the connection attempt is complete. This function is available in the Medical Suite Toolkit.

Parameter | Description
nError | Error code. Refer to Return Codes.

Returns

None.

Comments

A call to this function is generated on an SCU when an SCP calls LDicomNet::Accept. It is generated whether or not the connection attempt is successful. It is also generated when a connection attempt has timed-out.

To customize this function, you must derive a class from LDicomNet and override this function.

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::Connect, LDicomNet::Accept, LDicomNet::OnConnect
Topics: | Creating a DICOM Network Connection

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event
//any other relevant data

//For the entire derived class, see (hyperlink)LMyDicomNet class

//OnConnect()--client receives this event
L_VOID LMyDicomNet::OnConnect(L_INT nError)
{
L_UINT lServerPort, lClientPort;
L_CHAR szServerAddress[100], szClientAddress[100];
CString strMsg;
CString strTmp;

strMsg.Format("*** OnConnect ***\n");
if (nError == DICOM_SUCCESS)
{
GetHostInfo(szClientAddress, &lClientPort);
strTmp.Format("ClientAddress[%s]\nClientPort[%d]\n", szClientAddress, lClientPort);
strMsg = strMsg + strTmp;

GetPeerInfo(szServerAddress, &lServerPort);
strTmp.Format("ServerAddress[%s]\nServerPort[%d]\n", szServerAddress, lServerPort);
strMsg = strMsg + strTmp;
}
else
{
strTmp.Format("Error[%d]\n",nError);
strMsg = strMsg + strTmp;
}

AfxMessageBox(strMsg);
}


LDicomNet::OnNonSecureReceivedISCL

#include "ltdic.h"

virtual L_VOID LDicomNet::OnNonSecureReceivedISCL(nError, pBuffer, nLength)

L_UINT32 nError; | /* error code */
L_VOID *pBuffer; | /* pointer to a buffer */
L_UINT32 nLength; | /* length of data received */

This function is called after data sent in non-secure mode is received. This function is available in the Medical Suite toolkits.

Parameter | Description
nError | Error code. Refer to Return Codes.
pBuffer | Pointer to a buffer that contains the data that was received from the non-secure send process.
nLength | The length of the received data, in bytes.

Returns

None.

Comments

After data is received in a non-secure send process, this function is called. The data from pBuffer will be freed after this callback function returns.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnNonSecureSendISCL; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

L_VOID LMyDicomNet::OnNonSecureReceivedISCL(L_VOID *pBuffer, L_UINT32 nLength)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];
GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnNonSecureReceivedISCL***\nPeer[%s]\n ",
szPeerAddress);
AfxMessageBox(strMsg);
};


LDicomNet::OnNonSecureSendISCL

#include "ltdic.h"

virtual L_VOID LDicomNet::OnNonSecureSendISCL(nError, nType, nLength)

L_UINT32 nError; | /* error code */
L_UCHAR nType; | /* type of data transmitted */
L_UINT32 nLength; | /* length of data transmitted */

This function is called after data has been sent using the LDicomNet::SendNonSecureISCL function. This function is available in the Medical Suite toolkits.

Parameter | Description
nError | Error code. Refer to Return Codes.
nType | Type of data transmitted. This can be either the first byte of the DICOM message or 0, if it cannot be identified.
nLength | The length of the sent data, in bytes.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnNonSecureReceivedISCL, LDicomNet::SendNonSecureISCL; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

L_VOID myLDicomNet::OnNonSecureSendISCL(L_INT nError, L_UCHAR nType, L_UINT32 nLength)
{
if(nError == DICOM_SUCCESS)
{
AfxMessageBox("Data sent succesfully");
}
else
{
CString strTmp, strErrorCode;
if(nError == DICOM_ERROR_MEMORY)
strErrorCode = "Memory allocation error";
else
strErrorCode = "Unknown error";
strTmp.Format("Error during sending data, code = %s, explanation is %s", nError, strErrorCode);
AfxMessageBox(strTmp);
}
};


LDicomNet::OnPrivateKeyPassword

#include "ltdic.h"

virtual L_INT LDicomNet::OnPrivateKeyPassword(pszPassword, nSize, nFlag)

L_CHAR * pszPassword; | /* character string containing the password*/
L_INT nSize; | /* size of buffer pointed to by pszPassword */
L_INT nFlag; | /* flag specifying how pszPassword is used (encrypt/decrypt) */

The LDicomNet::SetClientCertificateTLS or LDicomNet::SetServerCertificateTLS functions call this function whenever the private key file is password encrypted in order to obtain the password. To use this function, copy the private key into the pszPassword buffer, and have LDicomNet::OnPrivateKeyPassword return the length of the password. This function is available in the Medical Suite Toolkit.

Parameter | Description
pszPassword | (in,out) pointer to a character string buffer to be used to hold the password. Copy the password for the private key file into this buffer.
nSize | (in) size of the buffer pointed to by pszPassword. This is an incoming parameter.
nFlag | (in) flag specifying whether pszPassword is being used for decryption or encryption. Possible values are:
 | Value | Meaning
 | 0 | The pszPassword is being used for decryption.
 | 1 | The pszPassword is being used for encryption.

Returns

When processing this function, have LDicomNet::OnPrivateKeyPassword return the length of the password copied into the pszPassword buffer here.

Comments

A call to this virtual function may be generated after a call to LDicomNet::SetClientCertificateTLS or LDicomNet::SetServerCertificateTLS. Calling either of these functions with a private key file that is password encrypted will result in a call to this virtual function in order to obtain the password. To process this function, perform the following steps:

1. | Copy the password used to encrypt the private key into the pszPassword buffer.
2. | Have this function return the length of the password copied into pszPassword.

The nSize and nFlag arguments are provided for information, and should not be changed. The length of the pszPassword buffer is given in the nSize parameter. The input parameter nFlag indicates whether the password is being used for encryption or decryption.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetClientCertificateTLS, LDicomNet::SetServerCertificateTLS
Topics: | Adding TLS Security to a DICOM Connection Working with DICOM Network Connections| DICOM Network Connection: TLS Security

Example

For an example, refer to LDicomNet::Initialize.


LDicomNet::OnReceive

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceive(nError, nType, pBuffer, nBytes)

L_INT nError; | /* error code */
L_UCHAR nType; | /* type of message/data received */
L_CHAR * pBuffer; | /* buffer */
L_UINT32 nBytes; | /* number of bytes in pBuffer */

Notifies a connection that data was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nError | Error code. Refer to Return Codes.
nType | The type of data that was sent. Possible values are:
 | Value | Meaning
 | PDU_UNKNOWN | [0x00] Unknown data sent.
 | PDU_ASSOCIATE_REQUEST | [0x01] Associate Request message sent
 | PDU_ASSOCIATE_ACCEPT | [0x02] Associate Accept message sent
 | PDU_ASSOCIATE_REJECT | [0x03] Associate Reject message sent
 | PDU_DATA_TRANSFER | [0x04] Data transfer made.
 | PDU_RELEASE_REQUEST | [0x05] Release Request message sent
 | PDU_RELEASE_RESPONSE | [0x06] Release Response message sent
 | PDU_ABORT | [0x07] Abort message sent.
pBuffer | Buffer that contains all the data that was sent. This includes the command set and any associated data set.
nBytes | Number of bytes of data in pBuffer.

Returns

None.

Comments

This is a low level means of receiving DICOM messages and data. It allows you to process messages yourself, instead of using the high level message processing functions provided.

This function is generated for each LDicomNet::SendXXX function provided by LEADTOOLS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Receiving Messages

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data.

For the entire derived class, see (hyperlink)LMyDicomNet class

//OnReceive()
L_VOID LMyDicomNet::OnReceive(L_INT nError, L_UCHAR nType, L_CHAR *pBuffer, L_UINT32 nBytes)
{
CString strMsg, strTmp, strType;

strMsg = "*** OnReceive ***\n";
if (nError == DICOM_SUCCESS)
{
switch(nType)
{
case PDU_ASSOCIATE_REQUEST:
strType = "PDU_ASSOCIATE_REQUEST";
break;

case PDU_ASSOCIATE_ACCEPT:
strType = "PDU_ASSOCIATE_ACCEPT";
break;

case PDU_ASSOCIATE_REJECT:
strType = "PDU_ASSOCIATE_REJECT";
break;

case PDU_DATA_TRANSFER:
strType = "PDU_DATA_TRANSFER";
break;

case PDU_RELEASE_REQUEST:
strType = "PDU_RELEASE_REQUEST";
break;

case PDU_RELEASE_RESPONSE:
strType = "PDU_RELEASE_RESPONSE";
break;

case PDU_ABORT:
strType = "PDU_ABORT";
break;
}
strTmp.Format("\nType[%s]\nlSize[%d]", strType, nBytes);
}
else
{
strTmp.Format("Error[%d]\n",nError);
}

strMsg = strMsg + strTmp;
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveAbort

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveAbort(nSource, nReaso)

L_UCHAR nSource; | /* source of the abort */
L_UCHAR nReason; | /* reason for the abort */

Notifies a connection that an Abort message was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nSource | The source of the abort. Possible values are:
 | Value | Meaning
 | PDU_ABORT_SOURCE_USER | [0] Service user. (client)
 | PDU_ABORT_SOURCE_PROVIDER | [2] Service provider. (server)
nReason | The reason for the abort. If the source of the abort is PDU_ABORT_SOURCE_USER, the reasons for the abort are not significant. If the source of the abort is PDU_ABORT_SOURCE_PROVIDER, the possible values are:

Value | Meaning
PDU_ABORT_REASON_UNKNOWN | [0] Unknown
PDU_ABORT_REASON_UNRECOGNIZED | [1] Unrecognized PDU
PDU_ABORT_REASON_UNEXPECTED | [2] Unexpected PDU
PDU_ABORT_REASON_UNRECOGNIZED_PARAM | [4] Unrecognized PDU parameter
PDU_ABORT_REASON_UNEXPECTED_PARAM | [5] Unexpected PDU parameter
PDU_ABORT_REASON_INVALID_PARAM | [6] Invalid PDU parameter value

Returns

None.

Comments

A call to this function is generated on a connection when the peer member of the connection calls LDicomNet::SendAbort.

To customize this function, you must derive a class from LDicomNet and override this function.

Please note that it is preferable to close a DICOM Association using the LDicomNet::SendReleaseRequest and LDicomNet::SendReleaseResponse. For more information on closing a DICOM Association, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions:

LDicomNet::SendAbort, LDicomNet::SendReleaseRequest, LDicomNet::SendReleaseResponse, LDicomNet::OnReceiveReleaseRequest, LDicomNet::OnReceiveReleaseResponse

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data

//For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveAbort(L_UCHAR nSource, L_UCHAR nReason)
{
CString strMsg;
strMsg.Format("*** OnReceiveAbort ***\nSource[%d]\nReason[%d]", nSource, nReason);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveAssociateAccept

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveAssociateAccept(pPDU)

LDicomAssociate *pPDU;

/* a DICOM Associate object */

Notifies a connection that an Associate Accept message was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
hPDU | A DICOM Associate object.

Returns

None.

Comments

A call to this function is generated on an SCU when an SCP calls LDicomNet::SendAssociateAccept.

To customize this function, you must derive a class from LDicomNet and override this function.

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

When a DICOM Associate Connection is no longer needed, the connection should be closed. For more information, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateReject, LDicomNet::SendAssociateRequest, LDicomNet::OnReceiveAssociateReject, LDicomNet::OnReceiveAssociateRequest
Topics: | Creating a DICOM Associate Connection
 | Creating an SCU

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data

For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveAssociateAccept(LDicomAssociate *pPDU)
{
//Client receives this event
CString strMsg;
strMsg.Format("*** OnReceiveAssociateAccept ***\nIsAssociated[%d]",IsAssociated());
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveAssociateReject

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveAssociateReject(nResult, nSource, nReason)

L_UCHAR nResult; | /* type of rejection */
L_UCHAR nSource; | /* source of rejection */
L_UCHAR nReason; | /* reason for rejection */

Notifies a connection that an Associate Reject message was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nResult | Type of rejection. Possible values are:
 | Value | Meaning
 | PDU_REJECT_RESULT_PERMANENT | [1] Rejected permanently.
 | PDU_REJECT_RESULT_TRANSIENT | [2] Rejected transiently.
nSource | The source of the rejection. Possible values are:
 | Value | Meaning
 | PDU_REJECT_SOURCE_USER | [1] DICOM Upper Layer Service – User.
 | PDU_REJECT_SOURCE_PROVIDER1 | [2] DICOM Upper Layer Service – Provider (ASCE related function)
 | PDU_REJECT_SOURCE_PROVIDER2 | [3] DICOM Upper Layer Service – Provider (Presentation related function)
nReason | Reason for the rejection. This depends on the value of nSource. If nSource is PDU_REJECT_SOURCE_USER, the possible values are:
 | Value | Meaning
 | PDU_REJECT_REASON_UNKNOWN | [1] Unknown
 | PDU_REJECT_REASON_APPLICATION | [2] Application context name not supported.
 | PDU_REJECT_REASON_CALLING | [3] Calling AE Title not recognized.
 | PDU_REJECT_REASON_CALLED | [7] Called AE Title not recognized.
 | If nSource is PDU_REJECT_SOURCE_PROVIDER1, the possible values are:
 | Value | Meaning
 | PDU_REJECT_REASON_UNKNOWN | [1] Unknown.
 | PDU_REJECT_REASON_VERSION | [2] Protocol version not supported.
 | if nSource is PDU_REJECT_SOURCE_PROVIDER2, the possible vlaues are:
 | Value | Meaning
 | PDU_REJECT_REASON_CONGESTION | [1] Temporary congestion.
 | PDU_REJECT_REASON_LIMIT | [2] Local client limit exceeded.

Returns

None.

Comments

A call to this function is generated on an SCU when an SCP calls LDicomNet::SendAssociateReject. For more information on DICOM Associate connections, refer to Creating a DICOM Associate Connection.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendAssociateReject, LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateRequest, LDicomNet::OnReceiveAssociateAccept, LDicomNet::OnReceiveAssociateRequest
Topics: | Creating a DICOM Associate Connection
 | Receiving Messages
 | Diagram of a Basic SCU-SCP Set-up
 | Creating an SCU
 | Creating an SCP

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event, and
//any other relevant data.

For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveAssociateReject(L_UCHAR nResult, L_UCHAR nSource, L_UCHAR nReason)
{
//Client receives this event
CString strMsg;
strMsg.Format("*** OnReceiveAssociateReject ***\nResult[%d]\nSource[%d]\nReason[%d]",
nResult, nSource, nReason);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveAssociateRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveAssociateRequest(pPDU)

LDicomAssociate *pPDU;

/* a DICOM Association object */

Notifies a connection that an Associate Request message was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
pPDU | A DICOM Associate object.

Returns

None.

Comments

A call to this function is generated on an SCP when an SCU calls LDicomNet::SendAssociateRequest. For more information on DICOM Associate connections, refer to Creating a DICOM Associate Connection.

To customize this function, you must derive a class from LDicomNet and override this function.

When the DICOM Association is no longer needed, it should be ended. For more information, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendAssociateReject, LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateRequest, LDicomNet::OnReceiveAssociateAccept, LDicomNet::OnReceiveAssociateRequest
Topics: | Creating a DICOM Associate Connection
 | Receiving Messages
 | Diagram of a Basic SCU-SCP Set-up
 | Creating an SCU
 | Creating an SCP

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event, and
//any other relevant data.

For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveAssociateRequest(LDicomAssociate *pPDU)
{
CString strMsg;
int i;
int nId;
int nResult;
CString strAbstract;
CString strTransfer;

strMsg = "*** OnReceiveAssociateRequest ***\n";

//check the version, if not 1, reject it
if (pPDU->GetVersion() != 1)
{
SendAssociateReject(
PDU_REJECT_RESULT_PERMANENT,
PDU_REJECT_SOURCE_USER,
PDU_REJECT_REASON_UNKNOWN
);
}
else
{
//send associate accept class back
LDicomAssociate DicomAssociate(FALSE);

//copy all presentation objects from received
//Reply that we only support the first Transfer Syntax from the received hPDU

L_INT iPresentationCount = pPDU->GetPresentationCount();
for (i = 0; i<iPresentationCount; i++)
{
nId = pPDU->GetPresentation(i);
strTransfer = pPDU->GetTransfer(nId, 0);
nResult = PDU_ACCEPT_RESULT_SUCCESS;
strAbstract = pPDU->GetAbstract(nId);
DicomAssociate.AddPresentation( nId, nResult, (L_CHAR *)(LPCTSTR)strAbstract);
DicomAssociate.AddTransfer( nId, (L_CHAR *)(LPCTSTR)strTransfer);
}
SendAssociateAccept(&DicomAssociate);
}

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCCancelRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCCancelRequest(nPresentationID, nMessageID)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */

Notifies a connection that a C-CANCEL-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendCCancelRequest is called.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCCancelRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCCancelRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

//This sample receives the cancel request, but does not actually perform the cancel
GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCCancelRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\n",
szPeerAddress,
nPresentationID,
nMessageID
);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCEchoRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCEchoRequest(nPresentationID, nMessageID, pszClass)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */

Notifies a connection that a C-ECHO-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendCEchoRequest is called.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCEchoRequest, LDicomNet::SendCEchoResponse, LDicomNet::OnReceiveCEchoResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCEchoRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCEchoRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass);

int nStatus = COMMAND_STATUS_SUCCESS;
SendCEchoResponse(nPresentationID, nMessageID, pszClass, nStatus);
strMsg = strMsg + "SendCEchoResponse\n";

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCEchoResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCEchoResponse(nPresentationID, nMessageID, pszClass, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status */

Notifies a connection that a C-ECHO-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendCEchoResponse is called.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCEchoRequest, LDicomNet::SendCEchoResponse, LDicomNet::OnReceiveCEchoRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCEchoResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nStatus)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveCEchoResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnStatus[%d]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nStatus);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCFindRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCFindRequest(nPresentationID, nMessageID, pszClass, nPriority, hDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
LDicomDS *pDS; | /* data set to be found */

Notifies a connection that a C-FIND-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pDS | Pointer to the data set to be found.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendCFindRequest is called.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCFindRequest, LDicomNet::SendCFindResponse, LDicomNet::OnReceiveCFindResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveCFindRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nPriority, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCFindRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnPriority[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nPriority,
pDS);

//Load each file and send it to the calling AE
//For this example, assume the following two files match the find criteria

//load sample file 1
LDicomDS DicomDS1;
DicomDS1.LoadDS("d:\\work\\images\\dicom16.dic", 0);

//send a Find Response – PENDING
strMsg=strMsg + "SendCFindResponse\n";
SendCFindResponse (nPresentationID, nMessageID, pszClass, COMMAND_STATUS_PENDING, &DicomDS1);

//load sample file 2
LDicomDS DicomDS2;
DicomDS2.LoadDS("d:\\work\\images\\test.dic", 0);

strMsg=strMsg + "SendCFindResponse\n";
//send a Find Response – PENDING
SendCFindResponse (nPresentationID, nMessageID, pszClass, COMMAND_STATUS_PENDING, &DicomDS2);

strMsg=strMsg + "SendCFindResponse\n";
//now, send a Find Response – SUCCESS
SendCFindResponse(nPresentationID, nMessageID, pszClass, COMMAND_STATUS_SUCCESS, 0);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCFindResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCFindResponse(nPresentationID, nMessageID, pszClass, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status of the request */
LDicomDS *pDS; | /* data set */

Notifies a connection that a C-FIND-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Pointer to the data set that contains the information found as a result of the call to LDicomNet::SendCFindRequest.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendCFindResponse is called by the SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCFindRequest, LDicomNet::SendCFindResponse, LDicomNet::OnReceiveCFindRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCFindResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nStatus, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

CString strStatus;
strStatus.Format("%d", nStatus);

switch(nStatus)
{
case COMMAND_STATUS_PENDING:
strStatus = "COMMAND_STATUS_PENDING";
break;

case COMMAND_STATUS_SUCCESS:
strStatus = "COMMAND_STATUS_SUCCESS";
break;

case COMMAND_STATUS_CANCEL:
strStatus = "COMMAND_STATUS_CANCEL";
break;
}

strMsg.Format("*** OnReceiveCFindResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nstrStatus[%s]\npDS[%x]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
strStatus,
pDS);

//save the data set to disk
if (pDS != NULL)
{
m_FileCount++;
CString strFileName;
strFileName.Format("d:\\temp\\CFind%d.dic", m_FileCount);
pDS->SaveDS((L_CHAR *)(LPCTSTR)strFileName,0);
strMsg = strMsg + "Saving[" + strFileName + "]";
}
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCGetRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCGetRequest(nPresentationID, nMessageID, pszClass, nPriority, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
LDicomDS *pDS; | /* data set to get */

Notifies a connection that a C-GET-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pDS | Pointer to the data set to be found.

Returns

None.

Comments

A call to this function is generated on an SCP when LDicomNet::SendCGetRequest is called by the SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCGetRequest, LDicomNet::SendCGetResponse, LDicomNet::OnReceiveCGetResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCGetRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nPriority, LDicomDS *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCGetRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnPriority[%d]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nPriority);

//The AE should check the data set, and perform
//matching against the files stored on the AE to determine
//what data set(s) should be sent back to the calling AE.
//For this sample, just send a predetermined file

//load the sample file
L_CHAR * szFile = "d:\\work\\images\\dicom16.dic";
LDicomDS DicomDS;
DicomDS.LoadDS(szFile, 0);

//send a store command for the GET sub-operation
CString strAE = GetAssociate()->GetCalling();

pDICOMELEMENT pElement = DicomDS.FindFirstElement(NULL, TAG_SOP_INSTANCE_UID, FALSE);
CString strInstance = DicomDS.GetStringValue(pElement, 0, 1);

//the following will cause a ReceiveCStoreResponse event on this machine
m_nDataCommand = COMMAND_C_GET;
SendCStoreRequest( nPresentationID,
nMessageID+ 1,
pszClass,
(L_CHAR *)(LPCTSTR)strInstance,
nPriority,
(L_CHAR *)(LPCTSTR)strAE,
nMessageID,
&DicomDS
);

strMsg = strMsg + "SendCStoreRequest\n";
AfxMessageBox(strMsg);
//Client sends C-Get response after receiving the CStoreResponse from the calling AE
}


LDicomNet::OnReceiveCGetResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCGetResponse(nPresentationID, nMessageID, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status of the request */
L_UINT16 nRemaining; | /* number of remaining instances */
L_UINT16 nCompleted; | /* number of instances completed */
L_UINT16 nFailed; | /* number of instances that failed */
L_UINT16 nWarning; | /* number of warnings */
LDicomDS *pDS; | /* data set */

Notifies a connection that a C-GET-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nRemaining | Number of remaining instances to search.
nCompleted | Number of instances searched.
nFailed | Number of instances that failed the search.
nWarning | Number of instances in which warnings occurred.
pDS | Pointer to the data set that contains the information retrieved as a result of the call to LDicomNet::SendCGetRequest.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendCGetResponse is called by the SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCGetResponse, LDicomNet::SendCGetRequest, LDicomNet::OnReceiveCGetRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCGetResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nStatus, L_UINT16 nRemaining, L_UINT16 nCompleted, L_UINT16 nFailed, L_UINT16 nWarning, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCGetResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnStatus[%d]\nnRemaining[%d],nCompleted[%d]\nnFailed[%d]\nnWarning[%d]\npDS[%x]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nStatus,
nRemaining,
nCompleted,
nFailed,
nWarning,
pDS
);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCMoveRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCMoveRequest(nPresentationID, nMessageID, pszClass, nPriority, pszMoveAE, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
L_CHAR * pszMoveAE; | /* name of the application entity */
LDicomDS pDS; | /* data set to be moved */

Notifies a connection that a C-MOVE-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pszMoveAE | Character string that contains the name of the application entity that originally requested the move. For a simple storage request from a client to a server, this should be "". When the request is a sub-operation of a C-MOVE, this will contain the name of the AE that requested the move.
pDS | Pointer to the data set to be moved.

Returns

None.

Comments

A call to this function is generated on an SCP when LDicomNet::SendCMoveRequest is called by the SCU.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCMoveRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nPriority, L_CHAR *pszMoveAE, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCMoveRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnPriority[%d]pszMoveAE[%s]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nPriority,
pszMoveAE,
pDS
);

//The AE should check the data set, and perform
//matching against the files stored on the AE to determine
//what data set(s) should be moved to the destination AE.
//For this sample, just send a predetermined file

//load the sample file
L_CHAR * szFile = "d:\\work\\images\\dicom16.dic";
LDicomDS DicomDS;
DicomDS.LoadDS(szFile, 0);

pDICOMELEMENT pElement = DicomDS.FindFirstElement(NULL, TAG_SOP_INSTANCE_UID, FALSE);
CString strInstance = DicomDS.GetStringValue(pElement, 0, 1);

this->m_nDataCommand = COMMAND_C_MOVE;
//the following will cause a ReceiveCStoreResponse event on this machine
SendCStoreRequest( nPresentationID,
nMessageID+ 1,
pszClass,
(L_CHAR *)(LPCTSTR)strInstance,
nPriority,
pszMoveAE,
nMessageID,
&DicomDS
);
strMsg = strMsg + "SendCStoreRequest\n";
AfxMessageBox(strMsg);
//Server sends a CMove-Response after receiving the CStoreResponse from the calling AE
}


LDicomNet::OnReceiveCMoveResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCMoveResponse(nPresentationID, nMessageID, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status */
L_UINT16 nRemaining; | /* number of remaining instances */
L_UINT16 nCompleted; | /* number of instances completed */
L_UINT16 nFailed; | /* number of instances that failed */
L_UINT16 nWarning; | /* number of warnings */
LDicomDS *pDS; | /* data set */

Notifies a connection that a C-MOVE-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nRemaining | Number of remaining instances to search.
nCompleted | Number of instances searched.
nFailed | Number of instances that failed the search.
nWarning | Number of instances in which warnings occurred.
pDS | Pointer to the dataset that holds additional information about a non-successful C-MOVE sub-operation.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendCMoveResponse is called by the SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCMoveResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_UINT16 nStatus, L_UINT16 nRemaining, L_UINT16 nCompleted, L_UINT16 nFailed, L_UINT16 nWarning, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCMoveResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\nnStatus[%d]\nnRemaining[%d],nCompleted[%d]\nnFailed[%d]\nnWarning[%d]\npDS[%x]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
nStatus,
nRemaining,
nCompleted,
nFailed,
nWarning,
pDS
);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCStoreRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCStoreRequest(nPresentationID, nMessageID, pszClass, pszInstance, nPriority, pszMoveAE, nMoveMessageID, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nPriority; | /* priority of the message */
L_CHAR * pszMoveAE; | /* name of the application entity */
L_UINT16 nMoveMessageID; | /* message ID */
LDicomDS pDS; | /* data set to be stored */

Notifies a connection that a C-STORE-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pszMoveAE | Character string that contains the name of the application entity that originally requested the move. For a simple storage request from a client to a server, this should be "". When the request is a sub-operation of a C-MOVE, this will contain the name of the AE that requested the move.
nMoveMessageID | The ID of the original move request message. For a simple storage request from a client to a server, this should be 0. When the request is a sub-operation of a C-MOVE, this will contain the original message ID of the C-MOVE request.
pDS | Pointer to the data set to be stored.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendCStoreRequest is called.

To customize this function, you must derive a class from LDicomNet and override this function.

When an SCU requests a Move (C-MOVE-REQ), the SCP may have to call LDicomNet::SendCStoreRequest to request one or more C-STORE-REQ sub-operations to complete the storage. The series of calls and information transfer in a C-MOVE-REQ is complicated. For more information, refer to Moving Composite Data.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCMoveRequest, LDicomNet::OnReceiveCStoreResponse
Topics: | Moving Composite Data
 | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifies the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveCStoreRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nPriority, L_CHAR *pszMoveAE, L_UINT16 nMoveMessageID, LDicomDS1 *pDS)
{
CString strMsg;
strMsg.Format("*** OnReceiveCStoreRequest ***\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnPriority[%d]\npszMoveAE[%s]\nnMoveMessageID[%d]",
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nPriority,
pszMoveAE,
nMoveMessageID
);
//...
//...Do the store here
//...nStatus = status of the store
//...

if (pDS != NULL)
{
m_FileCount++;
CString strFileName;
strFileName.Format("d:\\temp\\CStore%d.dic", m_FileCount);
pDS->SaveDS((L_CHAR *)(LPCTSTR)strFileName,0);
strMsg = strMsg + "Saving[" + strFileName + "]";
}

L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;
strMsg = strMsg + "SendCStoreResponse\n";
SendCStoreResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveCStoreResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCStoreResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */

Notifies a connection that a C-STORE-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendCStoreResponse is called by an SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

When an SCU requests a Move (C-MOVE-REQ), the SCP may have to call LDicomNet::SendCStoreRequest to request one or more C-STORE-REQ sub-operations to complete the storage. The series of calls and information transfer in a C-MOVE-REQ is complicated. For more information, refer to Moving Composite Data.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCMoveRequest, LDicomNet::OnReceiveCStoreRequest
Topics: | Moving Composite Data
 | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveCStoreResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveCStoreResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus);

//If I am a server, I receive this message from
//
// 1.Client sends C-Get
// I send SendCStoreRequest
// Clientsends SendCStoreResponse
//
//... or
//
// 2.Client sends C-Move
// I send SendCStoreRequest
// Clientsends SendCStoreResponse

// m_nClientOrServer is a member variable that identifieds whether I am a client or server
if (m_nClientOrServer == STATUS_SERVER)
{

//m_nDataCommand is a member variable that is set so the server
//knows how a C-Store Response was generated
//m_nDataCommand can be:
// COMMAND_C_MOVE
// COMMAND_C_GET

switch (m_nDataCommand)
{
case COMMAND_C_GET:
strMsg = strMsg + "SendCGetResponse\n";
SendCGetResponse( nPresentationID,
nMessageID,
pszClass,
COMMAND_STATUS_SUCCESS, //L_UINT16 nStatus
0, //L_UINT16 nRemaining
1, //L_UINT16 nCompleted
0, //L_UINT16 nFailed
0, //L_UINT16 nWarning
0 //LDicomDS1 *pDS
);
break;

case COMMAND_C_MOVE:
strMsg = strMsg + "SendCMoveResponse\n";
SendCMoveResponse( nPresentationID,
nMessageID,
pszClass,
COMMAND_STATUS_SUCCESS, //L_UINT16 nStatus
0, //L_UINT16 nRemaining
1, //L_UINT16 nCompleted
0, //L_UINT16 nFailed
0, //L_UINT16 nWarning
0 //LDicomDS1 *pDS
);
break;
};
}
m_nDataCommand = 0;
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveData

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveData(nID, pCS, pDS)

L_UCHAR nID; | /* presentation ID */
LDicomDS *pCS; | /* command message */
LDicomDS *pDS; | /* data set */

Notifies a connection when a Data message was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
pCS | A DICOM object that references the command set that contains the actual command message.
pDS | A DICOM object that contains the actual data. This may be NULL if no data set is included.

Returns

None.

Comments

This is a low level means of receiving DICOM messages and data. It allows you to process messages yourself, instead of using the high level message processing functions provided.

This function is called for each LDicomNet::SendCXXX or LDicomNet::SendNXXX function provided by LEADTOOLS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCCancelRequest, LDicomNet::SendCEchoRequest, LDicomNet::SendCEchoResponse, LDicomNet::SendCFindRequest, LDicomNet::SendCFindResponse, LDicomNet::SendCGetRequest, LDicomNet::SendCGetResponse, LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::SendNReportRequest, LDicomNet::SendNReportResponse, LDicomNet::SendNGetRequest, LDicomNet::SendNGetResponse, LDicomNet::SendNSetRequest, LDicomNet::SendNSetResponse, LDicomNet::SendNActionRequest, LDicomNet::SendNActionResponse, LDicomNet::SendNCreateRequest, LDicomNet::SendNCreateResponse, LDicomNet::SendNDeleteRequest, LDicomNet::SendNDeleteResponse
Topics: | Receiving Messages

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data.

For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveData(L_UCHAR nID, LDicomDS *pCS, LDicomDS *pDS)
{
CString strMsg;
strMsg.Format("*** OnReceiveData ***\nnID[%d]\n", nID);

if (pCS)
strMsg = strMsg + "Received a command set\n";

if (pDS)
strMsg = strMsg + "Received a data set\n";
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNActionRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNActionRequest(nPresentationID, nMessageID, pszClass, pszInstance, nAction, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nAction; | /* the action to perform */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-ACTION-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nAction | An application specific action to be performed on the specified data set.
pDS | The data set on which the specified action is to be performed.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNActionRequest is called.

To customize this function, you must derive a class from LDicomNet and override this function.

The action specified may be the addition of a new patient, the deletion of a patient, the addition of a new study, a print job, etc. The nAction value, which designates the action to perform is determined by the server. To find out the values used, you must contact the organization that created the server. When creating a server, the values and their corresponding meanings are determined by those creating the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNActionRequest, LDicomNet::SendNActionResponse, LDicomNet::OnReceiveNActionResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNActionRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nAction, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNActionRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnAction[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nAction,
pDS);

//...
//...Here the server should perform the Action command
//...
//...
//...nStatus = status of the the above--assume DICOM_SUCCESS
//...

L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;
SendNActionResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nAction, pDS);
strMsg = strMsg + "SendNActionResponse\n";
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNActionResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNActionResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nAction, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
L_UINT16 nAction; | /* the action to perform */
LDicomDS pDS; | /* data set */

Notifies a connection that an N-ACTION-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nAction | An application specific action to be performed on the specified data set.
pDS | The data set on which the specified action is to be performed.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNActionResponse is called.

To customize this function, you must derive a class from LDicomNet and override this function.

The action specified may be the addition of a new patient, the deletion of a patient, the addition of a new study, a print job, etc. The nAction value, which designates the action to perform is determined by the server. To find out the values used, you must contact the organization that created the server. When creating a server, the values and their corresponding meanings are determined by those creating the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNActionRequest, LDicomNet::SendNActionResponse, LDicomNet::OnReceiveNActionRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNActionResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus, L_UINT16 nAction, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNActionResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]\nnAction[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus,
nAction,
pDS);

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNCreateRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNCreateRequest(nPresentationID, nMessageID, pszClass, pszInstance, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-CREATE-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pDS | Data set with the information to use when creating.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNCreateRequest is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNCreateRequest, LDicomNet::SendNCreateResponse, LDicomNet::OnReceiveNCreateResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveNCreateRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveNCreateRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
pDS);

//...
//...Do the create here
//...nStatus = status of the create
//...
L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;

//send a create response
//For this sample, send back the passed hDS in this sample
SendNCreateResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS);
strMsg = strMsg + "SendNCreateResponse\n";

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNCreateResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNCreateResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-CREATE-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the information to use when creating the new SOP Instance.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNCreateResponse is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNCreateRequest, LDicomNet::SendNCreateResponse, LDicomNet::OnReceiveNCreateRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveNCreateResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveNCreateResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance\nnStatus[%d]\npDS[%x]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus,
pDS);

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNDeleteRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNDeleteRequest(nPresentationID, nMessageID, pszClass, pszInstance)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */

Notifies a connection that an N-DELETE-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value specifies an instance.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNDeleteRequest is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNDeleteRequest, LDicomNet::SendNDeleteResponse, LDicomNet::OnReceiveNDeleteResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveNDeleteRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNDeleteRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance);

//...
//... Do the delete
//...

//send a delete response
L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;
SendNDeleteResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus);

strMsg = strMsg + "SendNDeleteResponse\n";
AfxMessageBox(strMsg);

}


LDicomNet::OnReceiveNDeleteResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNDeleteResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */

Notifies a connection that an N-DELETE-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNDeleteResponse is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNDeleteRequest, LDicomNet::SendNDeleteResponse, LDicomNet::OnReceiveNDeleteRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNDeleteResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNDeleteResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNGetRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNGetRequest(nPresentationID, nMessageID, pszClass, pszInstance, pnAttribute, nCount)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 * pnAttribute; | /* array of attributes */
L_UINT32 nCount; | /* number of attributes */

Notifies a connection that an N-GET-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pnAttribute | An array of the attributes to get. The attributes must be specified using the Data Element Tags. For a list of available Data Element Tags, refer to Data Element Tag Constants.
nCount | Number of attributes being requested.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNGetRequest is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNGetRequest, LDicomNet::SendNGetResponse, LDicomNet::OnReceiveNGetResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNGetRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT32 *pnAttribute, L_UINT16 nCount)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveNGetRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\npnAttribute[%x]\nnCount[%d]",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
pnAttribute,
nCount);

//An actual server should check the class and instance against all SOP classes
//it manages, and then fill out hDS from the correctly matching instance
//This sample loads a fixed data set

LDicomDS DicomDS1, DicomDS2;

//Load DS1
DicomDS1.LoadDS("d:\\work\\images\\dicom16.dic", 0);

//Initialize DS2 to send
DicomDS2.InitDS(CLASS_UNKNOWN, 0);

pDICOMELEMENT pFirstElement = DicomDS1.GetFirstElement(NULL, FALSE, FALSE);
for (int i = 0; i< nCount; i++)
{
//get each element
pDICOMTAG pDicomTag = LDicomTag::Find(pnAttribute[i]);
pDICOMELEMENT pElement = DicomDS1.FindFirstElement(NULL, pDicomTag->nCode, FALSE);

//If requested tag not found, do not return an empty element
if (pElement != NULL)
{
//copy the element value
L_CHAR szText[100];
DicomDS1.GetConvertValue(pElement, szText);
DicomDS2.InsertElement(pFirstElement, FALSE, pDicomTag->nCode, pDicomTag->nVR, FALSE, 0);
DicomDS2.SetConvertValue(pElement, szText, 1);
}
}

//send a response
L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;
SendNGetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, &DicomDS2);
strMsg = strMsg + "SendNGetResponse\n";
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNGetResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNGetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-GET-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the retrieved elements.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendNGetResponse is called by an SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNGetRequest, LDicomNet::SendNGetResponse, LDicomNet::OnReceiveNGetRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNGetResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNGetResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus,
pDS);

AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNReportRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNReportRequest(nPresentationID, nMessageID, pszClass, pszInstance, nEvent, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nEvent; | /* event */
LDicomDS pDS; | /* data set */

Notifies a connection that an N-REPORT-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nEvent | An application specific event for which a report is to be generated.
pDS | Application specific data set which contains information related to the operation.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNReportRequest is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNReportRequest, LDicomNet::SendNReportResponse, LDicomNet::OnReceiveNReportResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNReportRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nEvent, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveNReportRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnEvent[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nEvent,
pDS);

//send response
L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;
SendNReportResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nEvent, pDS);
strMsg = strMsg + "SendNReportResponse\n";
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNReportResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNReportResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nEvent, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
L_UINT16 nEvent; | /* event */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-REPORT-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nEvent | An application specific event for which a report is to be generated.
pDS | Application specific data set which contains information related to the operation.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNReportResponse is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNReportRequest, LDicomNet::SendNReportResponse, LDicomNet::OnReceiveNReportRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveNReportResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus, L_UINT16 nEvent, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveNReportResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]\nnEvent[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus,
nEvent,
pDS);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNSetRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNSetRequest(nPresentationID, nMessageID, pszClass, pszInstance, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-SET-REQ command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pDS | Data set that contains the new information to set.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNSetRequest is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNSetRequest, LDicomNet::SendNSetResponse, LDicomNet::OnReceiveNSetResponse
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
L_VOID LMyDicomNet::OnReceiveNSetRequest(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNSetRequest ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
pDS);

//...
//...The server should change the values of the requested SOP Instance
//...to the values specefied in the data set elements in pDS
//...This function should search all the managed SOP Instances for a
//...match, and then change the requested elements.
//...
//...nStatus = status of the the above--assume DICOM_SUCCESS
//...

L_UINT16 nStatus = COMMAND_STATUS_SUCCESS;

SendNSetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS);
strMsg = strMsg + "SendNSetResponse\n";
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveNSetResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveNSetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Notifies a connection that an N-SET-RSP command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the retrieved elements.

Returns

None.

Comments

A call to this function is generated on a peer member of a connection when LDicomNet::SendNSetResponse is called locally.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNSetRequest, LDicomNet::SendNSetResponse, LDicomNet::OnReceiveNSetRequest
Topics: | Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveNSetResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_CHAR *pszClass, L_CHAR *pszInstance, L_UINT16 nStatus, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveNSetResponse ***\nPeer[%s]\nnPresentationID[%d]\nnMessageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]\npDS[%x]\n",
szPeerAddress,
nPresentationID,
nMessageID,
pszClass,
pszInstance,
nStatus,
pDS);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveReleaseRequest

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveReleaseRequest(L_VOID)

Notifies a connection that a Release Request message was received. This function is available in the Medical Suite Toolkit.

Returns

None.

Comments

A call to this function is generated on an SCP when an SCU calls LDicomNet::SendReleaseRequest. For more information on DICOM Associate connections, refer to Creating a DICOM Associate Connection.

To customize this function, you must derive a class from LDicomNet and override this function.

When the DICOM Association is no longer needed, it should be ended. For more information, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendReleaseResponse, LDicomNet::SendAssociateReject, LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateRequest, LDicomNet::OnReceiveReleaseResponse, LDicomNet::OnReceiveAssociateAccept, LDicomNet::OnReceiveAssociateRequest
Topics: | Creating a DICOM Associate Connection
 | Receiving Messages
 | Diagram of a Basic SCU-SCP Set-up
 | Creating an SCU
 | Creating an SCP

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data.

For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveReleaseRequest()
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveReleaseRequest ***\nPeer[%s]",szPeerAddress);
SendReleaseResponse();
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveReleaseResponse

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveReleaseResponse(L_VOID)

Notifies a connection that a Release Response message was received. This function is available in the Medical Suite Toolkit.

Returns

None.

Comments

A call to this function is generated on an SCU when an SCP calls LDicomNet::SendReleaseResponse.

To customize this function, you must derive a class from LDicomNet and override this function.

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

When a DICOM Associate Connection is no longer needed, the connection should be closed. For more information, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendReleaseResponse, LDicomNet::SendReleaseRequest, LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateReject, LDicomNet::SendAssociateRequest, LDicomNet::OnReceiveReleaseRequest, LDicomNet::OnReceiveAssociateReject, LDicomNet::OnReceiveAssociateRequest
Topics: | Receiving Messages
 | Creating a DICOM Associate Connection
 | Creating an SCU

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data.

//For the entire derived class, see (hyperlink)LMyDicomNet class

L_VOID LMyDicomNet::OnReceiveReleaseResponse()
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);

strMsg.Format("*** OnReceiveReleaseResponse ***\nPeer[%s]", szPeerAddress);
AfxMessageBox(strMsg);
}


LDicomNet::OnReceiveUnknown

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveUnknown(nPresentationID, pCS, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
LDicomDS *pCS; | /* command message */
LDicomDS *pDS; | /* data set */

Notifies a connection that an unknown command was received. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
pCS | A DICOM object that references the command set that contains the actual command message.
pDS | A DICOM object that contains the actual data. This may be NULL if no data set is included.

Returns

None.

Comments

A call to this function is generated when an unknown command is received.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Topics:

Receiving Messages

Example

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

L_VOID LMyDicomNet::OnReceiveUnknown(L_UCHAR nPresentationID, LDicomDS1 *pCS, LDicomDS1 *pDS)
{
CString strMsg;
L_UINT lPeerPort;
L_CHAR szPeerAddress[100];

GetPeerInfo(szPeerAddress, &lPeerPort);
strMsg.Format("*** OnReceiveUnknown ***\nPeer[%s]\nnPresentationID[%d]\nnpCS[%x]\npDS[%x]",
szPeerAddress,
nPresentationID,
pCS,
pDS);
AfxMessageBox(strMsg);
}


LDicomNet::OnSecureLinkReady

#include "ltdic.h"

virtual L_VOID LDicomNet::OnSecureLinkReady(nError)

L_UINT32 nError;

/* error code */

This function is called when an ISCL or TLS secured connection is successfully established. This function is available in the Medical Suite toolkits.

Parameter | Description
nError | Error code. For a list of possible values, refer to Return Codes.

Returns

None.

Comments

This function is called after the ISCL or TLS connection is successfully established. From this moment until the connection is closed, an application can securely send and receive data.

See Also

Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

L_VOID myLDicomNet::OnSecureLinkReady(L_UINT32 nError)
{
char str[128];
if (nError == DICOM_SUCCESS)
{
L_CIPHERSUITE tmp;
tmp = this->GetCiphersuiteTLS();
if (tmp == TLS_DHE_RSA_WITH_DES_CBC_SHA)
sprintf(str, "Secure connected, cipher is TLS_DHE_RSA_WITH_DES_CBC_SHA");
if (tmp == TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA)
sprintf(str, "Secure connected, cipher is TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA");
AfxMessageBox(str);
}
else
{
sprintf(str, "ClientTLS: Secure link error %d", nError);
AfxMessageBox(str);
}
};


LDicomNet::OnSend

#include "ltdic.h"

virtual L_VOID LDicomNet::OnSend(nError, nType, nBytes)

L_INT nError; | /* error code */
L_UCHAR nType; | /* type of message/data sent */
L_UINT32 nBytes; | /* number of bytes of data sent */

Notifies a connection that data was sent. This function is available in the Medical Suite Toolkit.

Parameter | Description
nError | Error code. Refer to Return Codes.
nType | The type of data that was sent. Possible values are:
 | Value | Meaning
 | PDU_UNKNOWN | [0x00] Unknown data sent.
 | PDU_ASSOCIATE_REQUEST | [0x01] Associate Request message sent
 | PDU_ASSOCIATE_ACCEPT | [0x02] Associate Accept message sent
 | PDU_ASSOCIATE_REJECT | [0x03] Associate Reject message sent
 | PDU_DATA_TRANSFER | [0x04] Data transfer made.
 | PDU_RELEASE_REQUEST | [0x05] Release Request message sent
 | PDU_RELEASE_RESPONSE | [0x06] Release Response message sent
 | PDU_ABORT | [0x07] Abort message sent.
nBytes | Number of bytes of data actually sent.

Returns

None.

Comments

When one of the LDicomNet::SendXXX functions is called, the message is not sent immediately. It is placed in a Network queue and sent later. When the data is actually sent, this callback function is called to let the calling AE know that the data has been sent.

To customize this function, you must derive a class from LDicomNet and override this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCCancelRequest, LDicomNet::SendCEchoRequest, LDicomNet::SendCEchoResponse, LDicomNet::SendCFindRequest, LDicomNet::SendCFindResponse, LDicomNet::SendCGetRequest, LDicomNet::SendCGetResponse, LDicomNet::SendCMoveRequest, LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::SendCStoreResponse, LDicomNet::SendNReportRequest, LDicomNet::SendNReportResponse, LDicomNet::SendNGetRequest, LDicomNet::SendNGetResponse, LDicomNet::SendNSetRequest, LDicomNet::SendNSetResponse, LDicomNet::SendNActionRequest, LDicomNet::SendNActionResponse, LDicomNet::SendNCreateRequest, LDicomNet::SendNCreateResponse, LDicomNet::SendNDeleteRequest, LDicomNet::SendNDeleteResponse
Topics: | Sending Messages

Example

//LMyDicomNet is a class derived from LDicomNet
//In class LMyDicomNet, all events (virtual functions OnXXX()) have been
//overridden so that they can be processed. Each event displays a MessageBox
//identifying the event, the IP that generated the event, the IP that received the event and
//any other relevant data.

//For the entire derived class, see (hyperlink)LMyDicomNet class

//OnSend()
L_VOID LMyDicomNet::OnSend(L_INT nError, L_UCHAR nType, L_UINT32 nBytes)
{
CString strMsg, strTmp, strType;

strMsg = "*** OnSend ***\n";
strTmp = "Unknown";
if (nError == DICOM_SUCCESS)
{
switch(nType)
{
case PDU_ASSOCIATE_REQUEST:
strType = "PDU_ASSOCIATE_REQUEST";
break;

case PDU_ASSOCIATE_ACCEPT:
strType = "PDU_ASSOCIATE_ACCEPT";
break;

case PDU_ASSOCIATE_REJECT:
strType = "PDU_ASSOCIATE_REJECT";
break;

case PDU_DATA_TRANSFER:
strType = "PDU_DATA_TRANSFER";
break;

case PDU_RELEASE_REQUEST:
strType = "PDU_RELEASE_REQUEST";
break;

case PDU_RELEASE_RESPONSE:
strType = "PDU_RELEASE_RESPONSE";
break;

case PDU_ABORT:
strType = "PDU_ABORT";
break;
}
strTmp.Format("\nType[%s]\nlSize[%d]", strType, nBytes);
}
else
{
strTmp.Format("Error[%d]\n",nError);
}
strMsg = strMsg + strTmp;
AfxMessageBox(strMsg);
}


LDicomNet::SendAbort

#include "ltdic.h"

L_INT LDicomNet::SendAbort(nSource, nReason)

L_UCHAR nSource; | /* source of the abort */
L_UCHAR nReason; | /* reason for the abort */

Sends an Abort message to a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nSource | The source of the abort. Possible values are:
 | Value | Meaning
 | PDU_ABORT_SOURCE_USER | [0] Service user. (SCU)
 | PDU_ABORT_SOURCE_PROVIDER | [2] Service provider. (SCP)
nReason | The reason for the abort. If the source of the abort is PDU_ABORT_SOURCE_USER, the reasons for the abort are not significant. If the source of the abort is PDU_ABORT_SOURCE_PROVIDER, the possible values are:
 | Value | Meaning
 | PDU_ABORT_REASON_UNKNOWN | [0] Unknown
 | PDU_ABORT_REASON_UNRECOGNIZED | [1] Unrecognized PDU
 | PDU_ABORT_REASON_UNEXPECTED | [2] Unexpected PDU
 | PDU_ABORT_REASON_UNRECOGNIZED_PARAM | [4] Unrecognized PDU parameter
 | PDU_ABORT_REASON_UNEXPECTED_PARAM | [5] Unexpected PDU parameter
 | PDU_ABORT_REASON_INVALID_PARAM | [6] Invalid PDU parameter value

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling LDicomNet::SendAbort generates a call to LDicomNet::OnReceiveAbort. At this time the DICOM Association is closed.

Please note that it is preferable to close a DICOM Association using the LDicomNet::SendReleaseRequest and LDicomNet::SendReleaseResponse. For more information on closing a DICOM Association, refer to Closing a DICOM Associate Connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendReleaseResponse, LDicomNet::SendReleaseRequest
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Closing a DICOM Associate Connection
 | Creating a DICOM Associate Connection
 | Sending Messages

Example

{
//In this example, the m_pDicomNet object sends an abort message to the peer.
//The m_pDicomNet can point to an object that is a server or a client
//

//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
//m_nStatus is member variable that identifies whether LDicomNet object is a server or client
//m_nStatus can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// int m_nStatus;
//
//
//In this example, assume
//1. m_pDicomNet points to a valid object
//2. A connection exists between client and server
//3. An associate request has been sent and accepted
//4. m_nStatus is either STATUS_SERVER or STATUS_CLIENT

L_UINT32 lClients;
LDicomNet *pDicomNet;

if (m_nStatus == STATUS_SERVER)
{
//get the latest client
lClients = m_pDicomNet->GetClientCount();
pDicomNet = m_pDicomNet->GetClient(lClients - 1);
}
else //STATUS_CLIENT
{
pDicomNet = m_pDicomNet;
}

//send Abort message
pDicomNet->SendAbort(PDU_ABORT_SOURCE_USER, 0);
}


LDicomNet::SendAssociateAccept

#include "ltdic.h"

L_INT LDicomNet::SendAssociateAccept(pPDU)

LDicomAssociate * pPDU;

/* a DICOM Association object */

Sends an Associate Accept message to a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
pPDU | A DICOM Association object. This is the object created by calling LDicomAssociate::LDicomAssociate.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendAssociateAccept is sent by the SCP in response to an LDicomNet::SendAssociateRequest call placed by an SCU. It establishes the DICOM Association between an SCU and an SCP and generates a call to LDicomNet::OnReceiveAssociateAccept on the SCU. The SCU and SCP can now transmit DICOM messages and data.

When the DICOM Association is no longer needed, it should be ended. For more information, refer to Closing a DICOM Association.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnReceiveAssociateAccept, LDicomAssociate::LDicomAssociate, LDicomNet::SendAssociateRequest, LDicomNet::SendAssociateReject, LDicomNet::SendReleaseRequest
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Creating a DICOM Associate Connection
 | Creating an SCP
 | Diagram of a Basic Client-Server Set-Up
 | Sending Messages

Example

For an example, refer to LDicomNet::OnReceiveAssociateRequest.


LDicomNet::SendAssociateReject

#include "ltdic.h"

L_INT LDicomNet::SendAssociateReject(nResult, nSource, nReason)

L_UCHAR nResult; | /* type of rejection */
L_UCHAR nSource; | /* source of rejection */
L_UCHAR nReason; | /* reason for rejection */

Sends an Associate Reject message to a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nResult | Type of rejection. Possible values are:
 | Value | Meaning
 | PDU_REJECT_RESULT_PERMANENT | [1] Rejected permanently.
 | PDU_REJECT_RESULT_TRANSIENT | [2] Rejected transiently.
nSource | The source of the rejection. Possible values are:
 | Value | Meaning
 | PDU_REJECT_SOURCE_USER | [1] DICOM Upper Layer Service – User.
 | PDU_REJECT_SOURCE_PROVIDER1 | [2] DICOM Upper Layer Service – Provider (ASCE related function)
 | PDU_REJECT_SOURCE_PROVIDER2 | [3] DICOM Upper Layer Service – Provider (Presentation related function)
nReason | Reason for the rejection. This depends on the value of nSource. If nSource is PDU_REJECT_SOURCE_USER, the possible values are:
 | Value | Meaning
 | PDU_REJECT_REASON_UNKNOWN | [1] Unknown
 | PDU_REJECT_REASON_APPLICATION | [2] Application context name not supported.
 | PDU_REJECT_REASON_CALLING | [3] Calling AE Title not recognized.
 | PDU_REJECT_REASON_CALLED | [7] Called AE Title not recognized.
 | If nSource is PDU_REJECT_SOURCE_PROVIDER1, the possible values are:
 | Value | Meaning
 | PDU_REJECT_REASON_UNKNOWN | [1] Unknown.
 | PDU_REJECT_REASON_VERSION | [2] Protocol version not supported.
 | if nSource is PDU_REJECT_SOURCE_PROVIDER2, the possible vlaues are:
 | Value | Meaning
 | PDU_REJECT_REASON_CONGESTION | [1] Temporary congestion.
 | PDU_REJECT_REASON_LIMIT | [2] Local client limit exceeded.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendAssociateReject is sent by the SCP in response to an LDicomNet::SendAssociateRequest call placed by an SCU. It generates a call to LDicomNet::OnReceiveAssociateReject on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnReceiveAssociateReject, LDicomAssociate::LDicomAssociate, LDicomNet::SendAssociateRequest, LDicomNet::SendAssociateAccept, LDicomNet::SendReleaseRequest
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Creating a DICOM Associate Connection
 | Creating an SCP
 | Diagram of a Basic SCU-SCP Set-Up
 | Sending Messages

Example

For an example, refer to LDicomNet::OnReceiveAssociateRequest.


LDicomNet::SendAssociateRequest

#include "ltdic.h"

L_INT LDicomNet::SendAssociateRequest(pPDU)

LDicomAssociate * pPDU;

/* a DICOM Association object */

Sends an Associate Request message to a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
hPDU | A DICOM Association object. This is the object created by calling LDicomAssociate::LDicomAssociate.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling LDicomNet::SendAssociateRequest generates a call to LDicomNet::OnReceiveAssociateRequest on the server. Within the callback function the server may accept or reject the Association request by calling LDicomNet::SendAssociateAccept or LDicomNet::SendAssociateReject.

A DICOM Association must be established between an SCU and an SCP before any DICOM messages or data can be transmitted between them. For more information on creating a DICOM Association, refer to Creating a DICOM Associate Connection.

When the DICOM Association is no longer needed, it should be ended. For more information, refer to Closing a DICOM Association.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnReceiveAssociateRequest, LDicomAssociate::LDicomAssociate, LDicomNet::SendAssociateAccept, LDicomNet::SendAssociateReject, LDicomNet::SendReleaseRequest
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Creating a DICOM Associate Connection
 | Creating an SCU
 | Diagram of a Basic Client-Server Set-Up
 | Sending Messages

Example

{
//create the Associate Class as Request
LDicomAssociate DicomAssociateRequest(TRUE);
DicomAssociateRequest.Default();
m_pDicomNet->SendAssociateRequest(&DicomAssociateRequest);
}


LDicomNet::SendCCancelRequest

#include "ltdic.h"

L_INT LDicomNet::SendCCancelRequest(nPresentationID, nMessageID)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */

Sends a C-CANCEL-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveCCancelRequest on the SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnReceiveCCancelRequest
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Cancel Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Cancel\n";

L_UCHAR nPresentationID = 79; //PresentationID of message to cancel
L_UINT16 nMessageID = 99; //ID of message to cancel
m_pDicomNet->SendCCancelRequest(nPresentationID, nMessageID);
}


LDicomNet::SendCEchoRequest

#include "ltdic.h"

L_INT LDicomNet::SendCEchoRequest(nPresentationID, nMessageID, pszClass)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */

Sends a C-ECHO-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveCEchoRequest on the SCP. The SCP should respond by calling LDicomNet::SendCEchoResponse which will generate a call to LDicomNet::OnReceiveCEchoResponse.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCEchoResponse, LDicomNet::OnReceiveCEchoRequest, LDicomNet::OnReceiveCEchoResponse
Topics: | Working with DICOM Network Connections

Example

{ //This example sends an Echo Request Command to the server

//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg= "C-Echo\n";

//Is class supported in the assocation?
L_UCHAR nPresentationID = m_pDicomNet->GetAssociate()->FindAbstract(UID_VERIFICATION_CLASS);

//nPresentationID must be odd--if 0, indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", UID_VERIFICATION_CLASS);
strMsg = strMsg + strTmp;
}
else
//success
{
L_UINT16 uUniqueID = 99;
m_pDicomNet->SendCEchoRequest(nPresentationID, uUniqueID, UID_VERIFICATION_CLASS);
}

AfxMessageBox(strMsg);
}


LDicomNet::SendCEchoResponse

#include "ltdic.h"

L_INT LDicomNet::SendCEchoResponse(nPresentationID, nMessageID, pszClass, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status */

Sends a C-ECHO-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendCEchoResponse is sent by the SCP in response to an LDicomNet::SendCEchoRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveCEchoResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCEchoRequest, LDicomNet::OnReceiveCEchoRequest, LDicomNet::OnReceiveCEchoResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveCEchoRequest.


LDicomNet::SendCFindRequest

#include "ltdic.h"

L_INT LDicomNet::SendCFindRequest(nPresentationID, nMessageID, pszClass, nPriority, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
LDicomDS *pDS; | /* data set to be found */

Sends a C-FIND-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pDS | Pointer to the data set to be found.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveCFindRequest on the SCP. The SCP should respond by calling LDicomNet::SendCFindResponse which will generate a call to LDicomNet::OnReceiveCFindResponse.

You must create a data set and insert elements corresponding to the data you wish to find. A pointer to this data set is then passed as a parameter to this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCFindResponse, LDicomNet::OnReceiveCFindRequest, LDicomNet::OnReceiveCFindResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends a C-Find command that will find all STUDIES on a called AE
//that support the Study Root Query/Retrieve Information Model - FIND SOP Class
//The results are displayed as each result s received in the NetReceiveCStoreRequest event
//
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "C-Find\n";

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Choose an SOP Class to find--in this example, choose UID_SC_IMAGE_STORAGE
CString strClassUID = UID_STUDY_ROOT_QUERY_FIND;

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
//success
{
//create a find attribute data set

LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);

//add the required fields for this seach
pDICOMTAG pDicomTag = LDicomTag::Find(TAG_QUERY_RETRIEVE_LEVEL);
pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_QUERY_RETRIEVE_LEVEL, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "STUDY", 1);

InsertNextElement(&DicomDS, TAG_STUDY_DATE);
InsertNextElement(&DicomDS, TAG_STUDY_TIME);
InsertNextElement(&DicomDS, TAG_ACCESSION_NUMBER);
InsertNextElement(&DicomDS, TAG_PATIENT_NAME);
InsertNextElement(&DicomDS, TAG_PATIENT_ID);
InsertNextElement(&DicomDS, TAG_STUDY_ID);
InsertNextElement(&DicomDS, TAG_STUDY_INSTANCE_UID);

//optional tags
InsertNextElement(&DicomDS, TAG_STUDY_DESCRIPTION);
InsertNextElement(&DicomDS, TAG_PATIENT_BIRTH_DATE);
InsertNextElement(&DicomDS, TAG_PATIENT_SEX);
InsertNextElement(&DicomDS, TAG_OTHER_PATIENT_IDS);
InsertNextElement(&DicomDS, TAG_PATIENT_BIRTH_DATE);
InsertNextElement(&DicomDS, TAG_ADDITIONAL_PATIENT_HISTORY);
InsertNextElement(&DicomDS, TAG_NUMBER_OF_STUDY_RELATED_INSTANCES);

//global variable to count results
m_pDicomNet->m_FileCount = 0;

L_UINT16 uUniqueID = 99;
m_pDicomNet->SendCFindRequest(nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
COMMAND_PRIORITY_MEDIUM,
&DicomDS
);

strMsg = strMsg + "SendCFindRequest\n";
}
AfxMessageBox(strMsg);
}

void InsertNextElement(LDicomDS *pDicomDS, L_UINT32 nTag)
{
pDICOMTAG pDicomTag = LDicomTag::Find(nTag);
pDicomDS->InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
nTag, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
}


LDicomNet::SendCFindResponse

#include "ltdic.h"

L_INT LDicomNet::SendCFindResponse(nPresentationID, nMessageID, pszClass, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status of the request */
LDicomDS *pDS; | /* data set */

Sends a C-FIND-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Pointer to the data set that contains the information found as a result of the call to LDicomNet::SendCFindRequest.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendCFindResponse is sent by the SCP in response to an LDicomNet::SendCFindRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveCFindResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCFindRequest, LDicomNet::OnReceiveCFindResponse, LDicomNet::OnReceiveCFindRequest
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveCFindRequest.


LDicomNet::SendCGetRequest

#include "ltdic.h"

L_INT LDicomNet::SendCGetRequest(nPresentationID, nMessageID, pszClass, nPriority, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
LDicomDS *pDS; | /* data set to get */

Sends a C-GET-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pDS | Pointer to the data set to be found.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveCGetRequest on the SCP. The SCP should respond by calling LDicomNet::SendCGetResponse which will generate a call to LDicomNet::OnReceiveCGetResponse.

You must create a data set and insert elements corresponding to the data you wish to find. The data set returned will include the entire data set that includes the requested data.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCGetResponse, LDicomNet::OnReceiveCGetRequest, LDicomNet::OnReceiveCGetResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an C-Get Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet;
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "C-Get\n";

//Choose a class
CString strClassUID = UID_SC_IMAGE_STORAGE;

//create the data set that encodes the identifier to be matched
LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);

//Add the required elements
// TAG_QUERY_RETRIEVE_LEVEL
// TAG_PATIENT_NAME
pDICOMTAG pDicomTag = LDicomTag::Find(TAG_QUERY_RETRIEVE_LEVEL);
pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_QUERY_RETRIEVE_LEVEL, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "PATIENT", 1);

pDicomTag = LDicomTag::Find(TAG_PATIENT_NAME);
DicomDS.InsertElement(
pElement, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_NAME, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "*", 1); //get all patients

//Add the optional fields that we want returned
// TAG_PATIENT_ID
// TAG_PATIENT_BIRTH_DATE
// TAG_PATIENT_SEX
// TAG_NUMBER_OF_STUDY_RELATED_INSTANCES
pDicomTag = LDicomTag::Find(TAG_PATIENT_ID);
DicomDS.InsertElement(
pElement, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_ID, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

pDicomTag = LDicomTag::Find(TAG_PATIENT_BIRTH_DATE);
DicomDS.InsertElement(
pElement, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_BIRTH_DATE, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

pDicomTag = LDicomTag::Find(TAG_PATIENT_SEX);
DicomDS.InsertElement(
pElement, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_SEX, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

pDicomTag = LDicomTag::Find( TAG_NUMBER_OF_STUDY_RELATED_INSTANCES);
DicomDS.InsertElement(
pElement, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_NUMBER_OF_STUDY_RELATED_INSTANCES, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
//success
{
L_UINT16 uUniqueID = 99;
m_pDicomNet->m_FileCount = 0; //used for file name in OnReceiveCStoreRequest event

m_pDicomNet->SendCGetRequest(
nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
COMMAND_PRIORITY_MEDIUM,
&DicomDS
);
}
AfxMessageBox(strMsg);
//now wait for one or more C-STORE sub-operations and finally the C-Get response
}


LDicomNet::SendCGetResponse

#include "ltdic.h"

L_INT LDicomNet::SendCGetResponse(nPresentationID, nMessageID, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status of the request */
L_UINT16 nRemaining; | /* number of remaining instances */
L_UINT16 nCompleted; | /* number of instances completed */
L_UINT16 nFailed; | /* number of instances that failed */
L_UINT16 nWarning; | /* number of warnings */
LDicomDS *pDS; | /* data set */

Sends a C-GET-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nRemaining | Number of remaining instances to search.
nCompleted | Number of instances searched.
nFailed | Number of instances that failed the search.
nWarning | Number of instances in which warnings occurred.
pDS | Pointer to the data set that contains the information retrieved as a result of the call to LDicomNet::SendCGetRequest.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendCGetResponse is sent by the SCP in response to an LDicomNet::SendCGetRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveCGetResponse on the SCU.

As an example, suppose an SCU requests an SCP to search all CT class instances for specific data. If the SCP has three CT class instances present, it must search all three instances for the required data. During the search, LDicomNet::SendCGetResponse may be called multiple times. The table below gives examples of possible parameter values for the calls made to LDicomNet::SendCGetResponse during the search:

Point within search | nStatus | nRemaining | nCompleted | nFailed | nWarning
Finished 1st instance | COMMAND_STATUS_PENDING | 2 | 1 | 0 | 0
Finished 2nd instance | COMMAND_STATUS_PENDING | 1 | 2 | 1 | 1
Finished the search | COMMAND_STATUS_SUCCESS | 0 | 3 | 1 | 1

After the first instance is searched, there are 2 remaining instances to search (nRemaining), there is 1 instance that has been completed (nCompleted), no instances have failed the search (nFailed), and there are no warnings(nWarning).

After the second instance is searched, there is 1 remaining instance to search (nRemaining), there are 2 instances that have been completed (nCompleted), 1 instance has failed the search (nFailed), and there is one warning (nWarning).

After the last instance has been searched, there are 0 remaining instances to search (nRemaining), there are 3 instances that have been completed (nCompleted), 1 instance has failed the search (nFailed), and there is one warning (nWarning).

The instance that failed may have failed because one data element you were searching for was not in the instance. For example, you may have included "Patient Birth Date" in the elements to search for and one instance did not include "Patient Birth Date".

Information about the warning may be found in the data set that is returned.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCGetRequest, LDicomNet::OnReceiveCGetResponse, LDicomNet::OnReceiveCGetRequest
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveCStoreResponse.


LDicomNet::SendCMoveRequest

#include "ltdic.h"

L_INT LDicomNet::SendCMoveRequest(nPresentationID, nMessageID, pszClass, nPriority, pszMoveAE, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nPriority; | /* priority of the message */
L_CHAR * pszMoveAE; | /* name of the application entity */
LDicomDS *pDS; | /* data set to be moved */

Sends a C-MOVE-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pszMoveAE | Character string that contains the name of the application entity to which to move the data.
pDS | Pointer to the data set to be moved.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveCMoveRequest on the SCP. The SCP should respond by calling LDicomNet::SendCMoveResponse which will generate a call to LDicomNet::OnReceiveCMoveResponse.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveeResponse, LDicomNet::SendCStoreRequest, LDicomNet::OnReceiveCMoveRequest, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an C-Move Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "C-Move\n";

//Choose a class to move
CString strClassUID = UID_NM_IMAGE_STORAGE;

//create the data set that encodes the identifier to be matched
LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);

//add the required elements
pDICOMTAG pDicomTag = LDicomTag::Find(TAG_QUERY_RETRIEVE_LEVEL);
pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_QUERY_RETRIEVE_LEVEL, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "PATIENT", 1);

InsertNextElement(&DicomDS,TAG_PATIENT_NAME);
InsertNextElement(&DicomDS,TAG_PATIENT_ID);
InsertNextElement(&DicomDS,TAG_PATIENT_BIRTH_DATE);
InsertNextElement(&DicomDS,TAG_PATIENT_SEX);
InsertNextElement(&DicomDS, TAG_NUMBER_OF_STUDY_RELATED_INSTANCES);

//global variable to count results
m_pDicomNet->m_FileCount = 0;

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else //success
{
L_UINT16 uUniqueID = 99;

//Choose DICOM AE title of the destination DICOM AE
//from which the C-store operations are being performed
//This is set by the SetCalling() method of the LDicomAssociateRequest object
//before doing a SendAssociateRequest
CString strMoveAE = "LEADtest";

m_pDicomNet->m_FileCount = 0; //used for file name in OnReceiveCStoreRequest event

//The client requests the server to move the SOP Instance to itself (the client)
m_pDicomNet->SendCMoveRequest(
nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
COMMAND_PRIORITY_MEDIUM,
(L_CHAR *)(LPCTSTR)strMoveAE,
&DicomDS
);
}
AfxMessageBox(strMsg);
//now wait for one or more C-STORE sub-operations and finally the C-Get response
}

void InsertNextElement(LDicomDS *pDicomDS, L_UINT32 nTag)
{
pDICOMTAG pDicomTag = LDicomTag::Find(nTag);
pDicomDS->InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
nTag, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
}


LDicomNet::SendCMoveResponse

#include "ltdic.h"

L_INT LDicomNet::SendCMoveResponse(nPresentationID, nMessageID, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_UINT16 nStatus; | /* status */
L_UINT16 nRemaining; | /* number of remaining instances */
L_UINT16 nCompleted; | /* number of instances completed */
L_UINT16 nFailed; | /* number of instances that failed */
L_UINT16 nWarning; | /* number of warnings */
LDicomDS *pDS; | /* data set */

Sends a C-MOVE-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nRemaining | Number of remaining instances to search.
nCompleted | Number of instances searched.
nFailed | Number of instances that failed the search.
nWarning | Number of instances in which warnings occurred.
pDS | Pointer to a dataset used for sending additional information about a non-successful C-MOVE sub-operation. This may be NULL.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendCMoveResponse is sent by the SCP in response to an LDicomNet::SendCMoveRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveCMoveResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCMoveResponse, LDicomNet::SendCStoreRequest, LDicomNet::OnReceiveCMoveRequest, LDicomNet::OnReceiveCMoveResponse, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse,
Topics: | Working with DICOM Network Connections
 | Moving Composite Data

Example

For an example, refer to LDicomNet::OnReceiveCStoreResponse.


LDicomNet::SendCStoreRequest

#include "ltdic.h"

L_INT LDicomNet::SendCStoreRequest(nPresentationID, nMessageID, pszClass, pszInstance, nPriority, pszMoveAE, nMoveMessageID, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nPriority; | /* priority of the message */
L_CHAR * pszMoveAE; | /* name of the application entity */
L_UINT16 nMoveMessageID; | /* message ID */
LDicomDS *pDS; | /* data set to be stored */

Sends a C-STORE-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nPriority | The priority level of the message. The Service Class Provider may or may not support priority. Therefore, setting this parameter may or may not have any effect. Possible values are:
 | Value | Meaning
 | COMMAND_PRIORITY_LOW | [0x0002] Low priority message.
 | COMMAND_PRIORITY_MEDIUM | [0x0000] Medium priority message.
 | COMMAND_PRIORTY_HIGH | [0x0001] High priority message.
pszMoveAE | Character string that contains the name of the application entity that originally requested the move. For a simple storage request from a client to a server, this should be "". When the request is a sub-operation of a C-MOVE, this will contain the name of the AE that requested the move.
nMoveMessageID | The ID of the original move request message. For a simple storage request from a client to a server, this should be 0. When the request is a sub-operation of a C-MOVE, this will contain the original message ID of the C-MOVE request.
pDS | Pointer to the data set to be stored.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

When an SCU requests a Move (C-MOVE-REQ), the SCP may have to call this function to request one or more C-STORE-REQ sub-operations to complete the storage. The series of calls and information transfer in a C-MOVE-REQ is complicated. For more information, refer to Moving Composite Data.

Calling this function generates a call to LDicomNet::OnReceiveCStoreRequest on the SCP. The SCP should respond by calling LDicomNet::SendCStoreResponse which will generate a call to LDicomNet::OnReceiveCStoreResponse.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCStoreResponse, LDicomNet::SendCMoveRequest, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse, LDicomNet::OnReceiveCMoveRequest, LDicomNet::OnReceiveCMoveResponse
Topics: | Working with DICOM Network Connections
 | Moving Composite Data

Example

{
//This example sends an C-Store Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

pDICOMELEMENT pDicomElement;
CString strMsg= "C-Store\n";

//Pick a dicom file to send as the data set
LDicomDS DicomDS;
DicomDS.LoadDS("d:\\work\\images\\dicom16.dic",0);

//Find element with TAG == TAG_SOP_INSTANCE_UID
pDicomElement = DicomDS.FindFirstElement(NULL, TAG_SOP_INSTANCE_UID, FALSE);

//Get first string in Value Field of dicom element
CString strInstanceUID = DicomDS.GetStringValue(pDicomElement, //dicom element
0, //index
1 //count
);
//Get first element
pDicomElement = DicomDS.FindFirstElement(NULL, TAG_SOP_CLASS_UID, FALSE);
CString strClassUID = DicomDS.GetStringValue(pDicomElement, 0, 1);

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//See if class is supported in the assocation
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
{
L_UINT16 uUniqueID = 99;

m_pDicomNet->m_FileCount = 0; //used for file name in OnReceiveCStoreRequest event
m_pDicomNet->SendCStoreRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID,
COMMAND_PRIORITY_MEDIUM,
"",
0,
&DicomDS);
}
AfxMessageBox(strMsg);
}


LDicomNet::SendCStoreResponse

#include "ltdic.h"

L_INT LDicomNet::SendCStoreResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */

Sends a C-STORE-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendCStoreResponse is sent by the SCP in response to an LDicomNet::SendCStoreRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveCStoreResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendCStoreRequest, LDicomNet::OnReceiveCStoreRequest, LDicomNet::OnReceiveCStoreResponse
Topics: | Working with DICOM Network Connections
 | Moving Composite Data

Example

For an example, refer to LDicomNet::OnReceiveCStoreRequest.


LDicomNet::SendData

#include "ltdic.h"

L_INT LDicomNet::SendData(nID, pCS, pDS)

L_UCHAR nID; | /* presentation ID */
LDicomDS *pCS; | /* command message */
LDicomDS *pDS; | /* data set */

Sends a Data message to a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
pCS | A DICOM object that references the command set that contains the actual command message.
pDS | A DICOM object that contains the actual data. This may be NULL if no data set is included.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This is a low level means of sending DICOM messages and data. It allows you to send messages yourself, instead of using the high level message sending functions provided.

For more information about sending messages, refer to Sending Messages.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnReceiveData
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections

Example

{
LDicomDS DicomDS1, DicomDS2;

//send a command set, then a data set
DicomDS1.InitDS( CLASS_CR_IMAGE_STORAGE, 0);
DicomDS2.InitCS(COMMAND_C_STORE, TRUE);

//client is sending data
m_pDicomNet->SendData(1, &DicomDS2, &DicomDS1);
}


LDicomNet::SendNActionRequest

#include "ltdic.h"

L_INT LDicomNet::SendNActionRequest(nPresentationID, nMessageID, pszClass, pszInstance, nAction, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nAction; | /* the action to perform */
LDicomDS *pDS; | /* data set */

Sends an N-ACTION-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nAction | An application specific action to be performed on the specified data set.
pDS | The data set on which the specified action is to be performed.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNActionRequest on the SCP. The SCP should respond by calling LDicomNet::SendNActionResponse which will generate a call to LDicomNet::OnReceiveNActionResponse.

The action specified may be the addition of a new patient, the deletion of a patient, the addition of a new study, a print job, etc. The nAction value, which designates the action to perform is determined by the server. To find out the values used, you must contact the organization that created the server. When creating a server, the values and their corresponding meanings are determined by those creating the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNActionResponse, LDicomNet::OnReceiveNActionRequest, LDicomNet::OnReceiveNActionResponse
Topics: | Working with DICOM Network Connections

Example

{
//This sample sends an N-Action Request to the server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Action\n";

//Choose a supported Action ID
L_UINT16 nAction = 1;

//Choose an SOP Class to find
CString strClassUID = UID_BASIC_FILM_BOX_CLASS;

//Choose an SOP Instance to modify
CString strInstanceUID = "1.1.1.1";

//...
//...Create a data set that encodes the Action Arguments (based on value of nAction)
//...For this example, add a tag to the Data set so that it is non-empty
//...
LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);
//...Add the action arugments

pDICOMTAG pDicomTag = LDicomTag::Find(TAG_IMAGE_TYPE);
pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_IMAGE_TYPE, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else //success
{
L_UINT16 uUniqueID = 99;
m_pDicomNet->SendNActionRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID,
nAction,
&DicomDS);
}
AfxMessageBox(strMsg);
}


LDicomNet::SendNActionResponse

#include "ltdic.h"

L_INT LDicomNet::SendNActionResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nAction, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
L_UINT16 nAction; | /* the action performed */
LDicomDS *pDS; | /* data set */

Sends an N-ACTION-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nAction | An application specific action that was performed on the specified data set.
pDS | Data set resulting from the specified action.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNActionResponse is sent by the SCP in response to an LDicomNet::SendNActionRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNActionResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNActionRequest, LDicomNet::OnReceiveNActionRequest, LDicomNet::OnReceiveNActionResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNActionRequest.


LDicomNet::SendNCreateRequest

#include "ltdic.h"

L_INT LDicomNet::SendNCreateRequest(nPresentationID, nMessageID, pszClass, pszInstance, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
LDicomDS *pDS; | /* data set */

Sends an N-CREATE-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pDS | Data set with the information to use when creating.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNCreateRequest on the SCP. The SCP should respond by calling LDicomNet::SendNCreateResponse which will generate a call to LDicomNet::OnReceiveNCreateResponse.

This function creates a new SOP Instance on the specified peer connection. The data set with the new information must be created and filled before calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNCreateResponse, LDicomNet::OnReceiveNCreateRequest, LDicomNet::OnReceiveNCreateResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Create Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Create\n";

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Choose an SOP Class to create--in this example, choose UID_SC_IMAGE_STORAGE
CString strClassUID = UID_SC_IMAGE_STORAGE;

//Choose an SOP Instance to create
CString strInstanceUID = "1.2.840.113619.2.30.1.1762288927.1489.906240296.255";

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
//success
{
//Here you would normally construct a data set containing the attributes, values for the new SOP instance
//For this sample, pick a dicom file to send as the data set
LDicomDS DicomDS;
L_UINT16 uUniqueID = 99;
DicomDS.LoadDS("d:\\work\\images\\dicom16.dic",0);
m_pDicomNet->SendNCreateRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID,
&DicomDS);
}
AfxMessageBox(strMsg);
}


LDicomNet::SendNCreateResponse

#include "ltdic.h"

L_INT LDicomNet::SendNCreateResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Sends an N-CREATE-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the information to use when creating the new SOP Instance.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNCreateResponse is sent by the SCP in response to an LDicomNet::SendNCreateRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNCreateResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNCreateRequest, LDicomNet::OnReceiveNCreateRequest, LDicomNet::OnReceiveNCreateResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNCreateRequest.


LDicomNet::SendNDeleteRequest

#include "ltdic.h"

L_INT LDicomNet::SendNDeleteRequest(nPresentationID, nMessageID, pszClass, pszInstance)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */

Sends an N-DELETE-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value specifies an instance.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNDeleteRequest on the SCP. The SCP should respond by calling LDicomNet::SendNDeleteResponse which will generate a call to LDicomNet::OnReceiveNDeleteResponse.

This function requests that the SCP delete the specified SOP Instance.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNDeleteResponse, LDicomNet::OnReceiveNDeleteRequest, LDicomNet::OnReceiveNDeleteResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Delete Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server
CString strMsg = "N-Delete\n";

//Choose an SOP Class to delete--in this example, choose UID_SC_IMAGE_STORAGE
CString strClassUID = UID_SC_IMAGE_STORAGE;

//Choose an SOP Instance to delete
CString strInstanceUID = "1.2.840.113619.2.30.1.1762288927.1489.906240296.255";

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
//success
{
L_UINT16 uUniqueID = 99;
m_pDicomNet->SendNDeleteRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID);
}

AfxMessageBox(strMsg);
}


LDicomNet::SendNDeleteResponse

#include "ltdic.h"

L_INT LDicomNet::SendNDeleteResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */

Sends an N-DELETE-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNDeleteResponse is sent by the SCP in response to an LDicomNet::SendNDeleteRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNDeleteResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNDeleteRequest, LDicomNet::OnReceiveNDeleteRequest, LDicomNet::OnReceiveNDeleteResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNDeleteRequest.


LDicomNet::SendNGetRequest

#include "ltdic.h"

L_INT LDicomNet::SendNGetRequest(nPresentationID, nMessageID, pszClass, pszInstance, pnAttribute, nCount)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 * pnAttribute; | /* array of attributes */
L_UINT16 nCount; | /* number of attributes */

Sends an N-GET-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pnAttribute | An array of the attributes to get. The attributes must be specified using the Data Element Tags. For a list of available Data Element Tags, refer to Data Element Tag Constants.
nCount | Number of attributes being requested.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNGetRequest on the SCP. The SCP should respond by calling LDicomNet::SendNGetResponse which will generate a call to LDicomNet::OnReceiveNGetResponse.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNGetResponse, LDicomNet::OnReceiveNGetRequest, LDicomNet::OnReceiveNGetResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Get Request to a server
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Get\n";

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Choose an SOP Class to find
CString strClassUID = UID_SC_IMAGE_STORAGE;

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else //success
{
//Create a list of the identifiers that you wish to get from the server
CString strGetFile = "d:\\temp\\nGet.dic";
CString strInstanceUID = "1.1.1.1";

L_UINT16 uUniqueID = 99;
L_UINT32 Attributes[] = { TAG_PATIENT_NAME,
TAG_PATIENT_ID,
TAG_PATIENT_SEX,
TAG_NUMBER_OF_STUDY_RELATED_INSTANCES };

int nNumAttributes = sizeof(Attributes) / sizeof(L_UINT32);

//global variable to count results
m_pDicomNet->m_FileCount = 0;
m_pDicomNet->SendNGetRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID,
Attributes,
nNumAttributes);
strMsg = strMsg + "SendNGetRequest\n";
}
AfxMessageBox(strMsg);
}


LDicomNet::SendNGetResponse

#include "ltdic.h"

L_INT LDicomNet::SendNGetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Sends an N-GET-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the retrieved elements.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNGetResponse is sent by the SCP in response to an LDicomNet::SendNGetRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNGetResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNGetRequest, LDicomNet::OnReceiveNGetRequest, LDicomNet::OnReceiveNGetResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNGetRequest.


LDicomNet::SendNonSecureISCL

#include "ltdic.h"

L_INT32 LDicomNet::SendNonSecureISCL(pBuffer, nLength)

L_CHAR *pBuffer; | /* pointer to a buffer */
L_UINT32 nBytes; | /* length of data to be sent */

Send the data in pBuffer over an ISCL connection, unsecured. This data is not encrypted and the message has no authentication code. This function is available in the Medical Suite toolkits.

Parameter | Description
pBuffer | Pointer to a buffer that contains the data to be sent.
nBytes | Size, in bytes, of the data to be sent.

Returns

DICOM_SUCCESS | Success. The data was dispatched to the ISCL network level.
DICOM_ERROR_MEMORY | An error occurred. Refer to Return Codes.

Comments

The non-secure send is the fastest method of transmitting data over an ISCL connection. It is faster than the normal send/receive process and has no encryption and no message authentication codes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::OnNonSecureSendISCL; Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
// suppose that pDicomNet is connected with an ISCL server
LMyDicomNet *pDicomNet;
pDicomNet->SendNonSecureISCL("", );
}


LDicomNet::SendNReportRequest

#include "ltdic.h"

L_INT LDicomNet::SendNReportRequest(nPresentationID, nMessageID, pszClass, pszInstance, nEvent, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nEvent; | /* event */
LDicomDS *pDS; | /* data set */

Sends an N-REPORT-REQ message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nEvent | An application specific event for which a report is to be generated.
pDS | Application specific data set which contains information related to the operation.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNReportRequest on the SCP. The SCP should respond by calling LDicomNet::SendNReportResponse which will generate a call to LDicomNet::OnReceiveNReportResponse.

A report is generated to let all peers attached to a server know of some event that has occurred. This event may be the addition of a new patient, the deletion of a patient, the addition of a new study, etc. The nEvent value, which designates the event that occurred is determined by the server. To find out the values used, you must contact the organization that created the server. When creating a server, the values and their corresponding meanings are determined by those creating the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNReportResponse, LDicomNet::OnReceiveNReportRequest, LDicomNet::OnReceiveNReportResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Event Report message to all clients
//Let them know a new patient was created
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Event Report\n";

//Choose a class
CString strClassUID = UID_US_IMAGE_STORAGE;

//Choose an instance
CString strInstance = "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1";

//create the data set
LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);

//add the required elements

//TAG_SPECIFIC_CHARACTER_SET
pDICOMTAG pDicomTag = LDicomTag::Find(TAG_SPECIFIC_CHARACTER_SET);
pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_SPECIFIC_CHARACTER_SET, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

//TAG_INSTANCE_CREATION_DATE
pDicomTag = LDicomTag::Find(TAG_INSTANCE_CREATION_DATE);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_INSTANCE_CREATION_DATE, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

VALUEDATE valueDate;
valueDate.nYear = 1999;
valueDate.nMonth = 12;
valueDate.nDay = 31;
DicomDS.SetDateValue(pElement, &valueDate, 1);

//TAG_INSTANCE_CREATION_TIME
pDicomTag = LDicomTag::Find(TAG_INSTANCE_CREATION_TIME);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_INSTANCE_CREATION_TIME, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

VALUETIME valueTime;
valueTime.nFractions = 0;
valueTime.nHours = 12;
valueTime.nMinutes = 30;
valueTime.nSeconds = 10;
DicomDS.SetTimeValue(pElement, &valueTime, 1);

//TAG_INSTANCE_CREATOR_UID
pDicomTag = LDicomTag::Find(TAG_INSTANCE_CREATOR_UID);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_INSTANCE_CREATOR_UID, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "9.9.9999.9", 1);

//TAG_PATIENT_NAME
pDicomTag = LDicomTag::Find(TAG_PATIENT_NAME);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_NAME, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "dummy_patient_name", 1);

//add the optional fields that we want returned

//TAG_PATIENT_ID
pDicomTag = LDicomTag::Find(TAG_PATIENT_ID);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_ID, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetStringValue(pElement, "dummy_patient_id", 1);

//TAG_PATIENT_BIRTH_DATE
pDicomTag = LDicomTag::Find(TAG_PATIENT_BIRTH_DATE);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_BIRTH_DATE, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetDateValue(pElement, &valueDate, 1);

//TAG_PATIENT_SEX
pDicomTag = LDicomTag::Find(TAG_PATIENT_SEX);
pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_SEX, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);
DicomDS.SetConvertValue(pElement, "M", 1);

//iterate through all clients
for (L_UINT32 i=0; i<m_pDicomNet->GetClientCount(); i++)
{
LDicomNet *pDicomNetClient = m_pDicomNet->GetClient(i);

//Get the associate object of client[i]
LDicomAssociate *pDicomAssociate = pDicomNetClient->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else
{
//Send N-Report Request message
L_UINT16 uUniqueID = 99;
L_UINT16 nEvent = 1;

pDicomNetClient->SendNReportRequest(
nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstance,
nEvent,
&DicomDS);
}
}
AfxMessageBox(strMsg);
}


LDicomNet::SendNReportResponse

#include "ltdic.h"

L_INT LDicomNet::SendNReportResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, nEvent, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
L_UINT16 nEvent; | /* event */
LDicomDS *pDS; | /* data set */

Sends an N-REPORT-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
nEvent | An application specific event for which a report is to be generated.
pDS | Application specific data set which contains information related to the operation.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNReportResponse is sent by the SCP in response to an LDicomNet::SendNReportRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNReportResponse on the SCU.

A report is generated to let all peers attached to a server know of some event that has occurred. This event may be the addition of a new patient, the deletion of a patient, the addition of a new study, etc. The nEvent value, which designates the event that occurred, is determined by the server. To find out the values used, you must contact the organization that created the server. When creating a server, the values and their corresponding meanings are determined by those creating the server.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNReportRequest, LDicomNet::OnReceiveNReportRequest, LDicomNet::OnReceiveNReportResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNReportRequest.


LDicomNet::SendNSetRequest

#include "ltdic.h"

L_INT LDicomNet::SendNSetRequest(nPresentationID, nMessageID, pszClass, pszInstance, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
LDicomDS *pDS; | /* data set */

Sends an N-GET-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
pDS | Data set that contains the new information to set.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling this function generates a call to LDicomNet::OnReceiveNSetRequest on the SCP. The SCP should respond by calling LDicomNet::SendNSetResponse which will generate a call to LDicomNet::OnReceiveNSetResponse.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNSetResponse, LDicomNet::OnReceiveNSetRequest, LDicomNet::OnReceiveNSetResponse
Topics: | Working with DICOM Network Connections

Example

{
//This example sends an N-Set request to the server that
//changes the patient id of an SOP Instance
//In this example:
//
//1. LMyDicomNet is a class derived from LDicomNet
//2. LMyDicomNet has the following member variables:
// m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
// m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//3. m_pDicomNet points to a valid LMyDicomNet object
// LMyDicomNet *m_pDicomNet
//
//4. A connection exists between client and server
//5. An association exists between the client and server

CString strMsg = "N-Set\n";

//Choose an SOP Class to find
CString strClassUID = UID_SC_IMAGE_STORAGE;

//Choose an SOP Instance to modify
CString strInstanceUID = "1.1.1.1";

//create the data set that encodes the changed element(s)
LDicomDS DicomDS;
DicomDS.InitDS(CLASS_UNKNOWN, 0);

pDICOMTAG pDicomTag = LDicomTag::Find(TAG_PATIENT_ID);

pDICOMELEMENT pElement = DicomDS.InsertElement(
NULL, //pDICOMELEMENT pNeighbor
FALSE, //L_BOOL bChild
TAG_PATIENT_ID, //L_UINT32 nTag
pDicomTag->nVR, //L_UINT16 nVR
FALSE, //L_BOOL bSequence,
0 //L_UINT32 nIndex
);

//Choose new patient ID
CString strNewPatientID = "123-45-6789";
DicomDS.SetStringValue(pElement, (L_CHAR *)(LPCTSTR)strNewPatientID, 1);

//Get the associate object
LDicomAssociate *pDicomAssociate = m_pDicomNet->GetAssociate();

//Is class supported in the assocation?
L_UCHAR nPresentationID = pDicomAssociate->FindAbstract((L_CHAR *)(LPCTSTR)strClassUID);

//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association", strClassUID);
strMsg = strMsg + strTmp;
}
else //success
{
//send a request
L_UINT16 uUniqueID = 99;
m_pDicomNet->SendNSetRequest( nPresentationID,
uUniqueID,
(L_CHAR *)(LPCTSTR)strClassUID,
(L_CHAR *)(LPCTSTR)strInstanceUID,
&DicomDS
);
}
AfxMessageBox(strMsg);
}


LDicomNet::SendNSetResponse

#include "ltdic.h"

L_INT LDicomNet::SendNSetResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus, pDS)

L_UCHAR nPresentationID; | /* presentation ID */
L_UINT16 nMessageID; | /* message ID */
L_CHAR * pszClass; | /* class type */
L_CHAR * pszInstance; | /* instance */
L_UINT16 nStatus; | /* status */
LDicomDS *pDS; | /* data set */

Sends an N-SET-RSP message to a peer member of a connection. This function is available in the Medical Suite Toolkit.

Parameter | Description
nPresentationID | Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.
nMessageID | Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.
pszClass | Class affected by the request. This will be an SOP Class or an SOP MetaClass.
pszInstance | The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.
nStatus | The status of the original request. For a list of possible values, refer to Status Constants.
pDS | Data set that contains the retrieved elements.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendNSetResponse is sent by the SCP in response to an LDicomNet::SendNSetRequest call placed by an SCU. This generates a call to LDicomNet::OnReceiveNSetResponse on the SCU.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendNSetRequest, LDicomNet::OnReceiveNSetRequest, LDicomNet::OnReceiveNSetResponse
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::OnReceiveNSetRequest.


LDicomNet::SendReleaseRequest

#include "ltdic.h"

L_INT LDicomNet::SendReleaseRequest(L_VOID)

Sends a Release Request message to a connection. This function is available in the Medical Suite Toolkit.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

Calling LDicomNet::SendReleaseRequest generates a call to LDicomNet::OnReceiveReleaseRequest on the server. The server will call LDicomNet::SendReleaseResponse which will generate a call to LDicomNet::OnReceiveReleaseResponse on the client. At this time the DICOM Association may be closed. For more information, refer to Ending a DICOM Association.

Please note that this method of closing a DICOM Association is preferable to just calling LDicomNet::SendAbort.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendReleaseResponse, LDicomNet::SendAbort
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Closing a DICOM Associate Connection
 | Creating a DICOM Associate Connection
 | Sending Messages

Example

{
//In this example, the m_pDicomNet object sends a release request to the peer.
//The m_pDicomNet object can point to an object that is a server or a client
//
//LMyDicomNet is a class derived from LDicomNet
//m_pDicomNet is a member variable declared as:
// LMyDicomNet *m_pDicomNet;
//m_nStatus is member variable that identifies whether LDicomNet object is a server or client
//m_nStatus can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// int m_nStatus;
//
//
//In this example, assume
//1. m_pDicomNet points to a valid object
//2. A connection exists between client and server
//3. An associate request has been sent and accepted
//4. m_nStatus is either STATUS_SERVER or STATUS_CLIENT

L_UINT32 lClients;
LDicomNet *pDicomNet;

if (m_nStatus == STATUS_SERVER)
{
//get the latest client
lClients = m_pDicomNet->GetClientCount();
pDicomNet = m_pDicomNet->GetClient(lClients - 1);
}
else //STATUS_CLIENT
{
pDicomNet = m_pDicomNet;
}

//send a Release Request message
pDicomNet->SendReleaseRequest();
AfxMessageBox("Sending ReleaseRequest message");
}


LDicomNet::SendReleaseResponse

#include "ltdic.h"

L_INT LDicomNet::SendReleaseResponse(L_VOID)

Sends a Release Response message to a connection. This function is available in the Medical Suite Toolkit.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

LDicomNet::SendReleaseResponse is sent by the server in response to an LDicomNet::SendReleaseRequest call placed by the client. It generates a call to LDicomNet::OnReceiveReleaseResponse on the client. The client and server can now close the DICOM Association by calling LDicomNet::Close. For more information about ending a DICOM Association, refer to Ending a DICOM Association.

Please note that ending the DICOM Association by calling LDicomNet::SendReleaseRequest and LDicomNet::ReleaseResponse is preferable to calling LDicomNet::SendAbort.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SendReleaseRequest, LDicomNet::SendAbort
Topics: | Working with DICOM Network Connections
 | Working with DICOM Associate Connections
 | Closing a DICOM Associate Connection
 | Creating a DICOM Associate Connection
 | Sending Messages

Example

For an example, refer to LDicomNet::OnReceiveReleaseRequest.


LDicomNet::SetAuthDataISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetAuthDataISCL(pBuffer, nLength);

L_VOID *pBuffer; | /* pointer to the authentication data */
L_UINT32 nLength; | /* the size of the authentication data */

Sets the authentication data used during the mutual authentication process. This function is available in the Medical Suite toolkits.

Parameter | Description
pBuffer | Pointer to an array containing the authentication data.
nLength | Length of the authentication data, in bytes.

Returns

DICOM_SUCCESS | Success
DICOM_ERROR_PARAMETER | A parameter error occurred. The authentication data could not be set. (pBuffer is NULL, or nLength is not in the range 1 – 128.)

Comments

Every ISCL-compliant entity must have between 1 and 128 bytes of authentication data. These authentication data are exchanged between client and server during the mutual authentication process. This function sets an array of 1 to 128 bytes that contains authentication data.

The authentication data is data exchanged in plain text. After the mutual authentication process, the communication entities can verify the authentication data of the other entity (client or server) and, if the authentication data is wrong, can close the connection.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is a class derived from LDicomNet
LMyDicomNet *pDicomNet1, *pDicomNet2;
pDicomNet1 = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet2 = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet1->SetAuthDataISCL("Server LEAD ISCL", 13);
char data[5] = {0x21, 0x14, 0x00, 0x45, 0x254};
pDicomNet2->SetAuthDataISCL(data, 5); // authentication data can be binary data
}


LDicomNet::SetCipherToIndexTLS

#include "ltdic.h"

L_UINT32 LDicomNet::SetCipherToIndexTLS(nIndex, cipher)

L_UINT32 nIndex; | /* index into an array */
L_CIPHERSUITE cipher; | /* ciphersuite */

Sets the ciphersuite for the specified index. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Position in an array for which to set the specified ciphersuite. The ciphersuites in this array are those known by the client and should be ordered by preference.
cipher | Value that indicates the ciphersuite to set at the specified index. For a list of possible values, refer to L_CIPHERSUITE.

Returns

DICOM_SUCCESS | Success
DICOM_ERROR_PARAMETER | A parameter error occurred.

Comments

The server chooses the first ciphersuite proposed by client, which it can understand. If the client puts the ciphersuites with reduced security first, then a ciphersuite with reduced security will most likely be selected by the server.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::LDicomNet, LDicomNet::GetCipherFromIndexTLS, LDicomNet::GetCiphersuiteTLS, Class Members
Topics: | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

For an example, refer to LDicomNet::GetCipherFromIndexTLS.


LDicomNet::SetClientCertificateTLS

#include "ltdic.h"

L_UINT32 LDicomNet::SetClientCertificateTLS(pszPathToCertificateFile, nCertType, pszPathToKeyFile);

L_CHAR *pszPathToCertificateFile; | /* character string */
L_UINT32 nCertType; | /* certificate type */
L_CHAR *pszPathToKeyFile; | /* character string */

Sets a certificate for the client. This function is available in the Medical Suite toolkits.

Parameter | Description
pszPathToCertificateFile | Character string that contains the path to the file that contains the certificate.
nCertType | Flag that indicates whether the certificate is binary or text. Possible values are:
 | Value | Meaning
 | L_TLS_FILETYPE_PEM | Text certificate
 | L_TLS_FILETYPE_ASN1 | Binary certificate
pszPathToKeyFile | Character string that contains the path to the file containing the private key. This parameter is used if the private key is available in raw mode.

Returns

DICOM_SUCCESS | Success
<>DICOM_SUCCESS | An error occurred. Refer to Return Codes.

Comments

The usual sizes for an RSA key is 512 and 1024 bits. There is a limitation for import in Europe – a RSA key must be at least 768 bits long. There are no known export restrictions.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetServerCertificateTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
nRet = pDicomNet->SetClientCertificateTLS("c:\\cert\\client.pem", L_TLS_FILETYPE_PEM, NULL);
char strMsg[64];
sprintf(strMsg, "Loaded client certificate, result is %s", nRet?"Error":"Success");
AfxMessageBox(strMsg);
}


LDicomNet::SetDefaultEncryptionISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetDefaultEncryptionISCL(nEncryptionMode)

L_UINT32 nEncryptionMode;

/* encryption mode */

Sets the encryption mode used by the ISCL operations. This function is available in the Medical Suite toolkits.

Parameter | Description
nEncryptionMode | Flag that specifies the encryption mode. Possible values are:
 | Value | Meaning
 | DICOM_ISCL_ENCRYPT_NONE | The data is transmitted without encryption.
 | DICOM_ISCL_ENCRYPT_DESCBC | The data is transmitted encrypted using the DES algorithm in cipher block chaining mode.

Returns

DICOM_SUCCESS | Success
DICOM_ERROR_PARAMETER | A parameter error occurred. The encryption mode will be set to DICOM_ISCL_ENCRYPT_NONE.

Comments

If an incorrect value is passed for the nEncryptionMode parameter, the encryption mode is set to DICOM_ISCL_ENCRYPT_NONE.

This function may be called after an LDicomNet object is created, regardless of whether a connection has been established.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::Connect, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is a class derived from LDicomNet

int nRet;
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
nRet = pDicomNet->StartUp();
if (nRet == DICOM_SUCCESS)
AfxMessageBox("StartUp() Successful");
else
AfxMessageBox("StartUp() Failed");

//connect to a server
nRet = m_pDicomNet->Connect(NULL, 0, "127.0.0.1",2761);
if(nRet != DICOM_SUCCESS)
AfxMessageBox("Connect() failed");
else
AfxMessageBox("Connect() successful");
pDicomNet->SetDefaultEncryptionISCL(DICOM_ISCL_ENCRYPT_DESCBC);
}


LDicomNet::SetDefaultSigningISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetDefaultSigningISCL(nSignMode);

L_UINT32 nSignMode;

/* type of message authentication code */

Sets the current message authentication code type. This function is available in the Medical Suite toolkits.

Parameter | Description
nSignMode | Flag that indicates the type of message authentication code to be used. Possible values are:
 | Value | Meaning
 | DICOM_ISCL_MAC_NONE | No message authentication code will be used.
 | DICOM_ISCL_MAC_MD5 | A 128 bit MD5 message authentication code is transmitted with the message.
 | DICOM_ISCL_MAC_DESMAC | A 64 bit DESMAC authentication code is transmitted with the message.

Returns

DICOM_SUCCESS | Success
DICOM_ERROR_PARAMETER | A parameter error occurred. The message authentication code will be of type DICOM_ISCL_MAC_MD5.

Comments

The message authentication code is encrypted using the current encryption mode before being sent and decrypted after being received. The current encryption mode is set using the LDicomNet::SetDefaultEncryptionISCL function.

The encryption mode and the message authentication code type must be the same for both the sender and the receiver.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is a class derived from LDicomNet

int nRet;
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
nRet = pDicomNet->StartUp();
if (nRet == DICOM_SUCCESS)
AfxMessageBox("StartUp() Successful");
else
AfxMessageBox("StartUp() Failed");

//connect to a server
nRet = m_pDicomNet->Connect(NULL, 0, "127.0.0.1", 2761);
if(nRet != DICOM_SUCCESS)
AfxMessageBox("Connect() failed");
else
AfxMessageBox("Connect() successful");
pDicomNet->SetDefaultSigningISCL(DICOM_ISCL_MAC_MD5);
}


LDicomNet::SetEncryptKeyISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetEncryptKeyISCL(nIndex, nKey)

L_UINT32 nIndex; | /* index */
L_UINT64 nKey; | /* encryption key */

Sets an encryption key at the specified index in the array. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Index into the array of encryption keys. This index is 1-based. Possible values for this index are between 1 and 8, inclusive.
nKey | A 64-bit integer, in little endian byte order, that represents an encryption key.

Returns

DICOM_SUCCESS | Success. The specified key was set in the specified position in the keys array.
DICOM_ERROR_PARAMETER | A parameter error occurred. nIndex was 0 or bigger than 8.

Comments

The index of the encryption key is sent with every message sent from the sender to the receiver. Different encryption keys can be used for each message, as long as the keys of the sender and the receiver match.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetIndexForEncryptISCL, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetEncryptKeyISCL(1, 0x0123456789ABCDEF);
// 64-bit value, in hexadecimal notation
pDicomNet->SetIndexForEncryptISCL(1);
}


LDicomNet::SetIndexForEncryptISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetIndexForEncryptISCL(nIndex)

L_UINT32 nIndex;

/* index */

Sets the index of the encryption key. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Index of the encryption key to be used. Possible values for this index are 1 through 8 and DICOM_ISCL_UNIQUE_SESSION_KEYS.

Returns

DICOM_SUCCESS | Success. The key in the specified location in the array was set as the key to use for encryption.
DICOM_ERROR_PARAMETER | A parameter error occurred.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetEncryptKeyISCL, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

For an example, refer to LDicomNet::SetEncryptKeyISCL.


LDicomNet::SetIndexForMutualAuthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetIndexForMutualAuthISCL(nIndex)

L_UINT32 nIndex;

/* index */

Sets the index of the mutual authentication key to be used during the mutual authentication process. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Index of the key to be used for mutual authentication. Possible values for this index are between 1 and 8, inclusive.

Returns

DICOM_SUCCESS | Success. The key in the specified location in the array was set as the key to use for mutual authentication.
DICOM_ERROR_PARAMETER | A parameter error occurred. nIndex was 0 or bigger than 8.

Comments

This function sets the actual key used for mutual authentication operations, based on an index from 1 to 8

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMutualAuthKeyISCL(1, 0x0123456789ABCDEF);
// 64-bit value, in hexadecimal notation
pDicomNet->SetIndexForMutualAuthISCL(1);
}


LDicomNet::SetMaxCommBlockLengthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetMaxCommBlockLengthISCL (nMaxCommBlockLength);

L_UINT32 nMaxCommBlockLength;

/* maximum communication block length */

Sets the maximum communication block length that can be sent/received by the current entity. This function is available in the Medical Suite toolkits.

Parameter | Description
nMaxCommBlockLength | Size of the communication block length.

Returns

DICOM_SUCCESS | Success. The maximum communication block length was set. During mutual authentication, the client and server will agree to use the smaller communication block size of the two.
DICOM_ERROR | An error occurred. This usually occurs if the nMaxCommBlockLength was too small for the maximum standard packet size (168 bytes).

Comments

An ISCL communication block contains a 32-byte header, followed by data, if data is included.

Please note that the size of the ISCL packets is 32 bytes larger than the communication block length, because of the header.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, LDicomNet::GetCommBlockLengthISCL, Class Members
Topics: | Establishing an ISCL Line Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMaxCommBlockLengthISCL(8160);
// size of the blocks sent to the network
// layer will be 8192 bytes (a 32-bytes header is added)
}


LDicomNet::SetMaxMessageLengthISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetMaxMessageLengthISCL(nMsgLength)

L_UINT32 nMsgLength;

/* maximum message length */

Sets the maximum message length that can be processed (sent and received) by the current entity. This function is available in the Medical Suite toolkits.

Parameter | Description
nMsgLength | The maximum message length to set.

Returns

DICOM_SUCCESS | Success. The maximum message length was set using the nMsgLength parameter.
DICOM_ERROR_PARAMETER | An error occurred. This usually occurs if the nMsgLength was smaller than 136. (136 bytes is the maximum size of data in mutual authentication request packet.)

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Sending and Receiving Messages
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMaxMessageLengthISCL(1048576);
// size of the message accepted
// is at most 1 MB – or 1048576 bytes
}


LDicomNet::SetMutualAuthAlgISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetMutualAuthAlgISCL(nmutualAuthMode)

L_UINT32 nmutualAuthMode;

/* mutual authentication mode */

Sets the mutual authentication mode. Currently only DICOM_ISCL_MUTUAL_AUTH_3P4W, the three-pass-four-way mutual authentication, is described in the standard. This function is available in the Medical Suite toolkits.

Parameter | Description
nMutualAuthMode | Flag that indicates the mutual authentication mode to use. Currently, only DICOM_ISCL_MUTUAL_AUTH_3P4W is supported.

Returns

DICOM_SUCCESS | Success. The mutual authentication mode was successfully set.
DICOM_ERROR_PARAMETER | A parameter error occurred. The mutual authentication mode will be DICOM_ISCL_MUTUAL_AUTH_3P4W.

Comments

The implicit value for the mutual authentication protocol is set at creation to DICOM_ISCL_MUTUAL_AUTH_3P4W.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthKeyISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMutualAuthAlgISCL(DICOM_ISCL_MUTUAL_AUTH_3P4W);
}


LDicomNet::SetMutualAuthKeyISCL

#include "ltdic.h"

L_UINT32 LDicomNet::SetMutualAuthKeyISCL(nIndex, nKey);

L_UINT32 nIndex; | /* index */
L_UINT64 nKey; | /* authentication key */

Sets a mutual authentication key at the specified index in the array. This function is available in the Medical Suite toolkits.

Parameter | Description
nIndex | Index into the array of authentication keys. This index is 1-based. Possible values for this index are between 1 and 8, inclusive.
nKey | A 64-bit integer, in little endian byte order, that represents an authentication key used during the mutual authentication process.

Returns

DICOM_SUCCESS | Success. The specified key was set in the specified position in the keys array.
DICOM_ERROR_PARAMETER | A parameter error occurred. nIndex was 0 or bigger than 8.

Comments

One of eight mutual authentication keys can be used for authenticating a peer. For more information, refer to Adding Security to a DICOM Connection and the ISCL standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetDefaultSigningISCL, LDicomNet::SetDefaultEncryptionISCL, LDicomNet::SetAuthDataISCL, LDicomNet::SetMaxCommBlockLengthISCL, LDicomNet::SetMaxMessageLengthISCL, LDicomNet::SetMutualAuthAlgISCL, LDicomNet::SetIndexForMutualAuthISCL, LDicomNet::SetEncryptKeyISCL, LDicomNet::SetIndexForEncryptISCL, Class Members
Topics: | Adding Security to a DICOM Connection
 | General Integrated Secure Communication Layer (ISCL) Information

Example

{
// LMyDicomNet is derived from LDicomNet
LMyDicomNet *pDicomNet;
pDicomNet = new LMyDicomNet("", DICOM_SECURE_ISCL);
pDicomNet->SetMutualAuthKeyISCL(1, 0x0123456789ABCDEF);
// 64-bit value, in hexadecimal notation
}


LDicomNet::SetServerCertificateTLS

#include "ltdic.h"

L_UINT32 LDicomNet::SetServerCertificateTLS(pszPathToCertificateFile, nCertType, pszPathToKeyFile);

L_CHAR *pszPathToCertificateFile; | /* character string */
L_UINT32 nCertType; | /* certificate type */
L_CHAR *pszPathToKeyFile; | /* character string */

Sets a certificate for the server. This function is available in the Medical Suite toolkits.

Parameter | Description
pszPathToCertificate | Character string that contains the path to the file that contains the certificate.
certType | Flag that indicates whether the certificate is binary or text. Possible values are:
 | Value | Meaning
 | L_TLS_FILETYPE_PEM | Text certificate
 | L_TLS_FILETYPE_ASN1 | Binary certificate
pszPathToKeyFile | Character string that contains the path to the file containing the private key. This parameter is used if the private key is available in raw mode.

Returns

DICOM_SUCCESS | Success
<>DICOM_SUCCESS | An error occurred. Refer to Return Codes.

Comments

The usual sizes for an RSA key is 512 and 1024 bits. There is a limitation for import in Europe – a RSA key must be at least 768 bits long. There are no known export restrictions.

The server is authenticated always. A server may be authenticated with a chain of certificates, all in the same file.

Required DLLs and Libraries

LTDIC
LTCRY
LTTLS

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::SetClientCertificateTLS, Class Members
Topics: | Adding TLS Security to a DICOM Connection
 | Negotiating a Ciphersuite
 | General Transport Layer Secure (TLS) Information

Example

{
LDicomNet *pDicomNet;
int nRet;
nRet = pDicomNet->SetServerCertificateTLS("c:\\cert\\server.pem", L_TLS_FILETYPE_PEM, NULL);
char strMsg[64];
sprintf(strMsg, "Loaded server certificate, result is %s", nRet?"Error":"Success");
AfxMessageBox(strMsg);
}


LDicomNet::ShutDown

#include "ltdic.h"

static L_VOID LDicomNet::ShutDown(L_VOID)

Shuts down the LEADTOOLS DICOM DLL. This function is available in the Medical Suite Toolkit.

Returns

None.

Comments

This function shuts down the LEADTOOLS DICOM DLL. This must be the last function that is called to free up any memory that is associated with the DICOM DLL. No other DICOM Network operations function can be used after LDicomNet::ShutDown is called. If you wish to use other functions after calling this function, LDicomNet::StartUp must be called again.

You must initialize the LEADTOOLS DICOM DLL using LDicomNet::StartUp before calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::StartUp, LDicomNet::LDicomNet, LDicomNet::~LDicomNet
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::LDicomNet.


LDicomNet::StartUp

#include "ltdic.h"

static L_INT LDicomNet::StartUp(L_VOID)

Initializes the LEADTOOLS DICOM DLL. This function is available in the Medical Suite Toolkit.

Returns

0 | SUCCESS
>0 | An error occurred. Refer to Return Codes.

Comments

This function initializes the LEADTOOLS DICOM DLL. This must be the first function that is called before using any other DICOM operations functions. For each call to LDicomNet::StartUp, there needs to be a corresponding call to LDicomNet::ShutDown.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomNet::ShutDown, LDicomNet::LDicomNet, LDicomNet::~LDicomNet
Topics: | Working with DICOM Network Connections

Example

For an example, refer to LDicomNet::LDicomNet.


LDicomPrintSCU::LDicomPrintSCU

#include "ltdic.h"

LDicomPrintSCU::LDicomPrintSCU(pszPath = NULL)

L_CHAR L_FAR * pszPath;

/* temporary files folder */

Constructs the object and performs initializations.

Parameter | Description
pszPath | Character string that contains the name of the temporary files location. This is passed to the constructor of the base class LDicomNet. Refer to the constructor LDicomNet::LDicomNet for more information.

Returns

None

Comments

Before using any of the network operation functions, the LEADTOOLS DICOM DLL must be initialized using the function LDicomNet::StartUp.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::~LDicomPrintSCU, LDicomNet::StartUp
Topics: | Print Management SCU

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::~LDicomPrintSCU

#include "ltdic.h"

virtual LDicomPrintSCU::~LDicomPrintSCU()

Destroys the object and frees any resources associated with it.

Returns

None

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::LDicomPrintSCU
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::Associate

#include "ltdic.h"

L_INT LDicomPrintSCU::Associate(pszPrintScpIP, uPrintScpPort, pszCalledTitle, pszCallingTitle, uSupportedClasses)

L_CHAR L_FAR * pszPrintScpIP; | /* IP address or DNS name of the Print SCP */
L_UINT uPrintScpPort; | /* port number of the Print SCP */
L_CHAR L_FAR * pszCalledTitle; | /* Called AE Title */
L_CHAR L_FAR * pszCallingTitle; | /* Calling AE Title */
L_UINT16 uSupportedClasses; | /* supported SOP/Meta SOP Classes */

Connects to the Print SCP and then establishes the DICOM Association.

Parameter | Description
pszPrintScpIP | Character string that contains the IP address or DNS name of the Print SCP.
uPrintScpPort | Port number of the Print SCP.
pszCalledTitle | Character string that contains the Called AE Title (AE Title of the Print SCP).
pszCallingTitle | Character string that contains the Calling AE Title (AE Title of the Print SCU).
uSupportedClasses | Specifies the SOP/Meta SOP Classes supported by the Print SCU. This can be any combination of the following values. However, if none of the three Meta SOP Classes is specified, the Basic Grayscale Print Management Meta SOP Class will be specified automatically.
 | Value | Meaning
 | PRINTSCU_BASIC_GRAYSCALE_PM_META_SOP_CLASS | [0x01] Specifies the Basic Grayscale Print Management Meta SOP Class.
 | PRINTSCU_BASIC_COLOR_PM_META_SOP_CLASS | [0x02] Specifies the Basic Color Print Management Meta SOP Class.
 | PRINTSCU_PULL_STORED_PM_META_SOP_CLASS | [0x04] Specifies the Pull Stored Print Management Meta SOP Class.
 | PRINTSCU_BASIC_ANNOTATION_BOX_SOP_CLASS | [0x08] Specifies the Basic Annotation Box SOP Class.
 | PRINTSCU_BASIC_PRINT_IMAGE_OVERLAY_BOX_SOP_CLASS | [0x10] Specifies the Basic Print Image Overlay Box SOP Class.
 | PRINTSCU_PRESENTATION_LUT_SOP_CLASS | [0x20] Specifies the Presentation LUT SOP Class.
 | PRINTSCU_PRINT_JOB_SOP_CLASS | [0x40] Specifies the Print Job SOP Class.
 | PRINTSCU_PRINTER_CONFIGURATION_RETRIEVAL_SOP_CLASS | [0x80] Specifies the Printer Configuration Retrieval SOP Class.

Returns

0 | The Association was established successfully.
DICOM_ERROR_PRINTSCU_ASSOCIATE_RQ_REJECTED | The Association request was rejected by the Print SCP.
> 0 | An error occurred. Refer to Return Codes.

Comments

The Association must be established successfully before any of the print management operations can be performed.

This function will first try to connect to the Print SCP. If successful, it will then try to establish the Association. This function will not return until the Association is accpeted/rejected by the Print SCP, or an error occurs.

The function LDicomPrintSCU::GetAssociateRejectInfo can be used to get information about the Association rejection in case the Association request was rejected by the Print SCP.

The uSupportedClasses parameter specifies those SOP/Meta SOP Classes that are supported by the Print SCU itself. Once the Association is established, the function LDicomPrintSCU::IsClassSupported can be used to test whether a particular SOP/Meta SOP Class is supported on the Association (and hence by the Print SCP).

The established Association must be released using the function LDicomPrintSCU::Release.

Note, there is no need to call the base class functions LDicomNet::Connect and LDicomNet::Close, when using the LDicomPrintSCU class.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::IsClassSupported, LDicomPrintSCU::Release, LDicomPrintSCU::GetAssociateRejectInfo, LDicomPrintSCU::GetAbortInfo, LDicomPrintSCU::SetTimeout, LDicomPrintSCU::OnStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::CreateFilmBox

#include "ltdic.h"

L_INT LDicomPrintSCU::CreateFilmBox(pParameters, pszRefPresLUTInstanceUID = NULL)

const pFILMBOXPARAMETERS pParameters; | /* Film Box parameters */
L_CHAR L_FAR * pszRefPresLUTInstanceUID; | /* Referenced Presentation LUT */

Requests the Print SCP to create a Basic Film Box SOP Instance.

Parameter | Description
pParameters | Pointer to a FILMBOXPARAMETERS structure that specifies the parameters of the Film Box to be created. The function will return an error if this parameter is set to NULL or if the Image Display Format is not specified.
pszRefPresLUTInstanceUID | Character string that contains the SOP Instance UID of a previously created Presentation LUT SOP Instance to be referenced by the Film Box. If this is set to NULL, the corresponding Attribute will not be included in the request to the Print SCP. For creating Presentation LUTs, refer to the function LDicomPrintSCU::CreatePresentationLUT.

Returns

0 | The Basic Film Box SOP Instance was created successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code; no Instance was created.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

A Film Session must have been created before creating Film Boxes.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function CreateFilmBox is 0, then the Film Box was created successfully, with either a Success or Warning status code in the response of the Print SCP.

Having the Film Box created, the function LDicomPrintSCU::GetFilmBoxInstanceUID can be used to obtain its SOP Instance UID. Also, the functions LDicomPrintSCU::UpdateFilmBox, LDicomPrintSCU::PrintFilmBox, and LDicomPrintSCU::DeleteFilmBox can be used to update, print, and delete the Film Box, respectively.

When a Film Box is created, the Print SCP will also create one or more Image Boxes, based on the Image Display Format specified by the FILMBOXPARAMETERS structure. An array of the SOP Instance UIDs of these Image Boxes is kept internally. The following functions can be used to handle the Image Boxes:

LDicomPrintSCU::GetImageBoxesCount

LDicomPrintSCU::GetImageBoxInstanceUID

LDicomPrintSCU::UpdateImageBox

LDicomPrintSCU::GetDefaultImageBoxParameters

LDicomPrintSCU::FreeImageBoxesInstanceUIDs

Similarly, when a Film Box is created, and if the FILMBOXPARAMETERS structure specifies an Annotation Display Format ID, the Print SCP will also create one or more Annotation Boxes, based on the Value of that Attribute. This is true given that the Basic Annotation Box SOP Class is supported on the Association. An array of the SOP Instance UIDs of these Annotation Boxes is kept internally. The following functions can be used to handle the Annotation Boxes:

LDicomPrintSCU::GetAnnotationBoxesCount

LDicomPrintSCU::GetAnnotationBoxInstanceUID

LDicomPrintSCU::UpdateAnnotationBox

LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

The function can be used to create more than one Film Box. However, only the current Film Box (the last one created) can be updated, printed alone, and deleted. Previous Film Boxes can only be printed by printing the whole Film Session.

The parameter pParameters points to a FILMBOXPARAMETERS structure that specifies the parameters to be used when creating the Film Box. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request. The Display Format ID must be specified in this structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::GetFilmBoxInstanceUID, LDicomPrintSCU::UpdateFilmBox, LDicomPrintSCU::PrintFilmBox, LDicomPrintSCU::DeleteFilmBox, LDicomPrintSCU::GetDefaultFilmBoxParameters, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::UpdateImageBox, LDicomPrintSCU::UpdateAnnotationBox, LDicomPrintSCU::CreatePresentationLUT
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::CreateFilmSession

#include "ltdic.h"

L_INT LDicomPrintSCU::CreateFilmSession(pParameters, bColorPrintManagement = FALSE)

const pFILMSESSIONPARAMETERS pParameters; | /* Film Session parameters */
L_BOOL bColorPrintManagement; | /* grayscale or Color Print Management */

Requests the Print SCP to create a Basic Film Session SOP Instance.

Parameter | Description
pParameters | Pointer to a FILMSESSIONPARAMETERS structure that specifies the parameters of the Film Session to be created. If this is set to NULL, then the request will be sent to the Print SCP without specifying any parameters (Attributes).
bColorPrintManagement | If either the Basic Grayscale Print Management Meta SOP Class or the Basic Color Print Management Meta SOP Class (but not both) is supported on the Association, then this parameter will be ignored and the request will be to create an Instance of the Basic Film Session SOP Class of the Meta SOP Class supported. If both Meta SOP Classes are supported then:
 | Value | Meaning
 | TRUE | The request will be to create an Instance of the Basic Film Session SOP Class of the Basic Color Print Management Meta SOP Class.
 | FALSE | The request will be to create an Instance of the Basic Film Session SOP Class of the Basic Grayscale Print Management Meta SOP Class.

Returns

0 | The Basic Film Session SOP Instance was created successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code; no Instance was created.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

Once a Film Session is created, the function LDicomPrintSCU::CreateFilmBox can then be used to create one or more Film Boxes in the new Film Session. Notice that only one Film Session can be handled on the Association at any time.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function CreateFilmSession is 0, then the Film Session was created successfully, with either a Success or Warning status code in the response of the Print SCP.

Having the Film Session created, the function LDicomPrintSCU::GetFilmSessionInstanceUID can be used to obtain its SOP Instance UID. Also, the functions LDicomPrintSCU::UpdateFilmSession, LDicomPrintSCU::PrintFilmSession, and LDicomPrintSCU::DeleteFilmSession can be used to update, print, and delete the Film Session, respectively.

The parameter pParameters points to a FILMSESSIONPARAMETERS structure that specifies the parameters to be used when creating the Film Session. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request. If pParameters is set to NULL, then the request will be sent without specifying any parameters.

All the rest of the basic Print Management functions will adopt the Meta SOP Class of the created Basic Film Session SOP Instance.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetFilmSessionInstanceUID, LDicomPrintSCU::UpdateFilmSession, LDicomPrintSCU::PrintFilmSession, LDicomPrintSCU::DeleteFilmSession, LDicomPrintSCU::GetDefaultFilmSessionParameters, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::CreateOverlayBox

#include "ltdic.h"

L_INT LDicomPrintSCU::CreateOverlayBox(pOverlay, pParameters)

LDicomDS * pOverlay; | /* image overlay */
const pOVERLAYBOXPARAMETERS pParameters; | /* Image Overlay parameters */

Requests the Print SCP to create a Basic Print Image Overlay Box SOP Instance.

Parameter | Description
pOverlay | Pointer to an LDicomDS object that contains the Overlay data for the Image Overlay Box to be created. The object is assumed to contain the Overlay Pixel Data Sequence (2040,0020). If this parameter is set to NULL or if the Sequence is not present, the function will return an error.
pParameters | Pointer to an OVERLAYBOXPARAMETERS structure that specifies the parameters of the Image Overlay Box to be created. The function will return an error if this is set to NULL.

Returns

0 | The Basic Print Image Overlay Box SOP Instance was created successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code; no Instance was created.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Basic Print Image Overlay Box SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function CreateOverlayBox is 0, then the Image Overlay Box was created successfully, with either a Success or Warning status code in the response of the Print SCP.

The function can be used to create one or more Image Overlay Boxes. Having an Image Overlay Box created, the function LDicomPrintSCU::GetOverlayBoxInstanceUID can be used to obtain its SOP Instance UID, which in turn can be used to reference the Image Overlay Box from Image Boxes. Refer to the function LDicomPrintSCU::UpdateImageBox.

The functions LDicomPrintSCU::UpdateOverlayBox and LDicomPrintSCU::DeleteOverlayBox can be used to update and delete Image Overlay Boxes, respectively.

The parameter pParameters points to an OVERLAYBOXPARAMETERS structure that specifies the parameters to be used when creating the Image Overlay Box. The structure members nOverlayOriginRow and nOverlayOriginColumn will always be used to specify the Overlay Origin (6000,0050); these can be negative. If a string member of the structure is NULL, then the corresponding Attribute will not be included in the request to the Print SCP. Also, if the member nMagnifyToNumberOfColumns is negative, the corresponding Attribute will not be included in the request.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetOverlayBoxInstanceUID, LDicomPrintSCU::UpdateOverlayBox, LDicomPrintSCU::DeleteOverlayBox, LDicomPrintSCU::GetDefaultOverlayBoxParameters, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::UpdateImageBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::CreatePresentationLUT

#include "ltdic.h"

L_INT LDicomPrintSCU::CreatePresentationLUT(pPresentationLUT, pszPresentationLUTShape = NULL)

LDicomDS* pPresentationLUT; | /* Presentation LUT */
L_CHAR L_FAR * pszPresentationLUTShape; | /* Presentation LUT Shape */

Requests the Print SCP to create a Presentation LUT SOP Instance.

Parameter | Description
pPresentationLUT | Pointer to an LDicomDS object that contains the data of the Presentation LUT to be created. The object is assumed to contain the Presentation LUT Sequence (2050,0010). If this Sequence is not present, the function will return an error. This parameter can be set to NULL if a Presentation LUT Shape is specified using the parameter pszPresentationLUTShape.
pszPresentationLUTShape | Character string that contains the Presentation LUT Shape (2050,0020) of the Presentation LUT to be created. This can be set to NULL or it can specify an empty string if the parameter pPresentationLUT is not NULL.
 | The function will return an error if none of the parameters is supplied. If both are supplied, pszPresentationLUTShape will be ignored.

Returns

0 | The Presentation LUT SOP Instance was created successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code; no Instance was created.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Presentation LUT SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function CreatePresentationLUT is 0, then the Presentation LUT was created successfully, with either a Success or Warning status code in the response of the Print SCP.

The function can be used to create one or more Presentation LUTs. Having a Presentation LUT created, the function LDicomPrintSCU::GetPresentationLUTInstanceUID can be used to obtain its SOP Instance UID, which in turn can be used to reference the Presentation LUT from Film Boxes and Grayscale Image Boxes. Refer to the functions LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::UpdateFilmBox, and LDicomPrintSCU::UpdateImageBox.

The Print SCP can be requested to delete an existing Presentation LUT SOP Instance using the function LDicomPrintSCU::DeletePresentationLUT.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPresentationLUTInstanceUID, LDicomPrintSCU::DeletePresentationLUT, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::UpdateFilmBox, LDicomPrintSCU::UpdateImageBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::CreatePullPrintRequest

#include "ltdic.h"

L_INT LDicomPrintSCU::CreatePullPrintRequest(InstancesInfo, uInstancesCount, pParameters)

const pSTOREDPRINTSTORAGEINSTANCEINFO InstancesInfo; | /* Referenced Stored Print */
L_UINT32 uInstancesCount; | /* Count of Stored Print Instances */
const pPULLPRINTREQUESTPARAMETERS pParameters; | /* Pull Print Request parameters */

Requests the Print SCP to create a Pull Print Request SOP Instance.

Parameter | Description
InstancesInfo | A STOREDPRINTSTORAGEINSTANCEINFO structure pointer that specifies one or more of such structure. The count of the structures is determined by the parameter uInstancesCount. Each structure specifies information about one referenced Stored Print Storage SOP Instance. The function will return an error if the parameter InstancesInfo is set to NULL.
uInstancesCount | The count of the structures specified by the parameter InstancesInfo. The function will return an error if the parameter uInstancesCount is set to 0.
pParameters | Pointer to a PULLPRINTREQUESTPARAMETERS structure that specifies the parameters of the Pull Print Request SOP Instance to be created. If this is set to NULL, the request will be sent to the Print SCP without specifying any parameters (Attributes).

Returns

0 | The Pull Print Request SOP Instance was created successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code; no Instance was created.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Pull Stored Print Management Meta SOP Class is not supported on the Association, and hence the Pull Print Request SOP Class is not supported.
> 0 | An error occurred. Refer to Return Codes.

Comments

Only one Pull Print Request SOP Instance can be supported on the Association at any time.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function CreatePullPrintRequest is 0, then the Pull Print Request SOP Instance was created successfully, with either a Success or Warning status code in the response of the Print SCP.

Having the Instance created, the function LDicomPrintSCU::GetPullPrintRequestInstanceUID can then be used to obtain its SOP Instance UID. Also, the functions LDicomPrintSCU::PrintPullPrintRequestSession and LDicomPrintSCU::DeletePullPrintRequest can be used to print the session and to delete the Instance, respectively.

At least one Stored Print Storage SOP Instance must be specified to be referenced. The information about each such Instance is specified using a STOREDPRINTSTORAGEINSTANCEINFO structure. Except for the member pszPatientID, if any string member of the structure is set to NULL or if the member specifies an empty string, the function will return an error.

The parameter pParameters points to a PULLPRINTREQUESTPARAMETERS structure that specifies the parameters to be used when creating the Pull Print Request SOP Instance. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request. If pParameters is set to NULL, then the request will be sent without specifying any parameters.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPullPrintRequestInstanceUID, LDicomPrintSCU::PrintPullPrintRequestSession, LDicomPrintSCU::DeletePullPrintRequest, LDicomPrintSCU::GetDefaultPullPrintRequestParameters, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::CreateFilmSession
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

L_VOID PerformPullStoredPM()
{
LDicomPrintSCU PrintSCU;
//CPrintSCU PrintSCU;

L_CHAR szMsg[32];

// Establish the Association
L_INT iRet = PrintSCU.Associate ("10.0.2.20", 7104, "PrintSCP", "PrintSCU",
PRINTSCU_PULL_STORED_PM_META_SOP_CLASS |
PRINTSCU_PRINT_JOB_SOP_CLASS |
PRINTSCU_PRINTER_CONFIGURATION_RETRIEVAL_SOP_CLASS);
if (iRet == DICOM_ERROR_PRINTSCU_ASSOCIATE_RQ_REJECTED)
{
L_UCHAR nSource, nReason;
PrintSCU.GetAssociateRejectInfo (NULL, &nSource, &nReason);

wsprintf(szMsg, "Source = %i, Reason = %i", nSource, nReason);
MessageBox(NULL, szMsg, "Association Request was Rejected", MB_OK);
return;
}
else if (iRet != DICOM_SUCCESS)
{
wsprintf(szMsg, "Error code: %i", iRet);
MessageBox(NULL, szMsg, "Failed to Establish the Association", MB_OK);
return;
}

// Display some printer info
//GetPrinterInfo(PrintSCU);

// Display some printer configuration info
//GetPrinterConfigInfo(PrintSCU);

// A referenced Stored Print Storage SOP Instance
STOREDPRINTSTORAGEINSTANCEINFO InstanceInfo;
InstanceInfo.uStructSize = sizeof(STOREDPRINTSTORAGEINSTANCEINFO);
InstanceInfo.pszRetrieveAETitle = "SomeAE";
InstanceInfo.pszReferencedSOPInstanceUID = "1.2.840.114257.254.7638.6787";
InstanceInfo.pszStudyInstanceUID = "1.2.840.114257.945.5676.5674";
InstanceInfo.pszSeriesInstanceUID = "1.2.840.114257.23.2343.3489";
InstanceInfo.pszPatientID = "SomeID";

PULLPRINTREQUESTPARAMETERS PullPrintReqParams;

// Ask the Print SCP to create a Pull Print Request SOP Instance
PrintSCU.GetDefaultPullPrintRequestParameters (&PullPrintReqParams,
sizeof(PULLPRINTREQUESTPARAMETERS));
PullPrintReqParams.nNumberOfCopies = 1;
PrintSCU.CreatePullPrintRequest (&InstanceInfo, 1, &PullPrintReqParams);
MessageBox(NULL, PrintSCU.GetPullPrintRequestInstanceUID (),
"Pull Print Request SOP Instance UID", MB_OK);

// Print the session
PrintSCU.PrintPullPrintRequestSession ();

// Display some info about the Print Job
if (PrintSCU.IsClassSupported (PRINTSCU_PRINT_JOB_SOP_CLASS))
{
//GetPrintJobInfo(PrintSCU, PrintSCU.GetPrintJobInstanceUID ());
}

// Ask the Print SCP to delete the Pull Print Request SOP Instance
PrintSCU.DeletePullPrintRequest ();

// Release the Association and close the connection
PrintSCU.Release ();
}


LDicomPrintSCU::DeleteFilmBox

#include "ltdic.h"

L_INT LDicomPrintSCU::DeleteFilmBox()

Requests the Print SCP to delete the current Basic Film Box SOP Instance.

Returns

0 | The Basic Film Box SOP Instance was deleted successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Box currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function DeleteFilmBox is 0, then the Film Box was deleted successfully, with either a Success or Warning status code in the response of the Print SCP.

Notice that deleting the Film Box will cause all the referenced Image Boxes and Annotation Boxes to be deleted also.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::DeleteFilmSession

#include "ltdic.h"

L_INT LDicomPrintSCU::DeleteFilmSession()

Requests the Print SCP to delete the current Basic Film Session SOP Instance.

Returns

0 | The Basic Film Session SOP Instance was deleted successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Session currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function DeleteFilmSession is 0, then the Film Session was deleted successfully, with either a Success or Warning status code in the response of the Print SCP.

Notice that deleting the Film Session will cause all the referenced Film Boxes, Image Boxes, and Annotation Boxes to be deleted also.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::DeleteOverlayBox

#include "ltdic.h"

L_INT LDicomPrintSCU::DeleteOverlayBox(pszOverlayBoxInstanceUID)

L_CHAR L_FAR * pszOverlayBoxInstanceUID;

/* SOP Instance UID of the Image Overlay Box */

Requests the Print SCP to delete the specified Basic Print Image Overlay Box SOP Instance.

Parameter | Description
pszOverlayBoxInstanceUID | Character string that contains the SOP Instance UID of the Image Overlay Box to be deleted. The function will return an error if this is NULL or if an empty string is specified.

Returns

0 | The specified Basic Print Image Overlay Box SOP Instance was deleted successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Basic Print Image Overlay Box SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The Image Overlay Box specified (by the SOP Instance UID) must be an exiting one. Refer to the function LDicomPrintSCU::CreateOverlayBox for creating Image Overlay Boxes.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function DeleteOverlayBox is 0, then the specified Image Overlay Box was deleted successfully, with either a Success or Warning status code in the response of the Print SCP.

Once an Image Overlay Box is deleted, it cannot be referenced by Image Boxes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::GetOverlayBoxInstanceUID, LDicomPrintSCU::UpdateOverlayBox, LDicomPrintSCU::GetDefaultOverlayBoxParameters, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::DeletePresentationLUT

#include "ltdic.h"

L_INT LDicomPrintSCU::DeletePresentationLUT(pszPresentationLUTInstanceUID)

L_CHAR L_FAR * pszPresentationLUTInstanceUID;

/* SOP Instance UID of the Presentation LUT */

Requests the Print SCP to delete the specified Presentation LUT SOP Instance.

Parameter | Description
pszPresentationLUTInstanceUID | Character string that contains the SOP Instance UID of the Presentation LUT to be deleted. The function will return an error if this is NULL or if an empty string is specified.

Returns

0 | The specified Presentation LUT SOP Instance was deleted successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Presentation LUT SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The Presentation LUT specified (by the SOP Instance UID) must be an existing one. Refer to the function LDicomPrintSCU::CreatePresentationLUT for creating Presentation LUTs.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function DeletePresentationLUT is 0, then the specified Presentation LUT was deleted successfully, with either a Success or Warning status code in the response of the Print SCP.

Once a Presentation LUT is deleted, it can no longer be referenced by Film Boxes and Image Boxes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePresentationLUT, LDicomPrintSCU::GetPresentationLUTInstanceUID, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::DeletePullPrintRequest

#include "ltdic.h"

L_INT LDicomPrintSCU::DeletePullPrintRequest()

Requests the Print SCP to delete the current Pull Print Request SOP Instance.

Returns

0 | The Pull Print Request SOP Instance was deleted successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Pull Stored Print Management Meta SOP Class is not supported on the Association, and hence the Pull Print Request SOP Class is not supported.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Pull Print Request SOP Instance currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function DeletePullPrintRequest is 0, then the Pull Print Request SOP Instance was deleted successfully, with either a Success or Warning status code in the response of the Print SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePullPrintRequest, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::CreatePullPrintRequest.


LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs

#include "ltdic.h"

L_VOID LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs()

Frees the memory allocated for storing the SOP Instance UIDs of the Basic Annotation Box SOP Instances created by the Print SCP when a Film Box is created.

Returns

None

Comments

When the Print SCP is requested to create a Film Box, and if an Annotation Display Format ID is specified, the Print SCP will also create one or more Annotation Boxes, based on the Value of that Attribute. This is true given that the Basic Annotation Box SOP Class is supported on the Association. An array of the SOP Instance UIDs of these Annotation Boxes is kept internally. This function frees the memory allocated for that array.

Once this function is called, a call to the function LDicomPrintSCU::GetAnnotationBoxesCount will return 0. This of course does not mean that no Annotation Boxes are referenced by the current Film Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetAnnotationBoxesCount, LDicomPrintSCU::GetAnnotationBoxInstanceUID, LDicomPrintSCU::UpdateAnnotationBox, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::FreeImageBoxesInstanceUIDs

#include "ltdic.h"

L_VOID LDicomPrintSCU::FreeImageBoxesInstanceUIDs()

Frees the memory allocated for storing the SOP Instance UIDs of the Basic Grayscale/Color Image Box SOP Instances created by the Print SCP when a Film Box is created.

Returns

None

Comments

When the Print SCP is requested to create a Film Box, it will also create one or more Image Boxes, based on the Image Display Format. An array of the SOP Instance UIDs of these Image Boxes is kept internally. This function frees the memory allocated for that array.

Once this function is called, a call to the function LDicomPrintSCU::GetImageBoxesCount will return 0. This of course does not mean that no Image Boxes are referenced by the current Film Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetImageBoxesCount, LDicomPrintSCU::GetImageBoxInstanceUID, LDicomPrintSCU::UpdateImageBox, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetAbortInfo

#include "ltdic.h"

L_VOID LDicomPrintSCU::GetAbortInfo(pnSource, pnReason) const

L_UCHAR* pnSource; | /* source of aborting */
L_UCHAR* pnReason; | /* reason for aborting */

Gets information about the Abort message received by the Print SCU.

Parameter | Description
pnSource | Pointer to a variable to be updated with the source of the aborting. This can be set to NULL if the information is not required.
pnReason | Pointer to a variable to be updated with the reason for the aborting. This can be set to NULL if the information is not required.
 | For the possible values, refer to the callback function LDicomNet::OnReceiveAbort of the base class.

Returns

None

Comments

The information obtained using this function is meaningless unless an Abort message is received by the Print SCU.

When the Print SCU receives an Abort message from the Print SCP, the callback function LDicomPrintSCU::OnStatus will be called with the parameter uStatus set to PRINTSCU_STATUS_RECEIVE_ABORT.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::Associate, LDicomNet::OnReceiveAbort, LDicomPrintSCU::OnStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::OnStatus.


LDicomPrintSCU::GetAnnotationBoxesCount

#include "ltdic.h"

L_UINT32 LDicomPrintSCU::GetAnnotationBoxesCount() const

Returns the number of the Basic Annotation Box SOP Instances created by the Print SCP when a Film Box is created.

Returns

The number of the Annotation Boxes referenced by the current (last created) Film Box; if no Film Box is currently created, the function will return 0.

Comments

When the Print SCP is requested to create a Film Box, and if an Annotation Display Format ID is specified, the Print SCP will also create one or more Annotation Boxes, based on the Value of the Annotation Display Format ID. This will happen only if the Basic Annotation Box SOP Class is supported on the Association. This function returns the count of these Annotation Boxes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetAnnotationBoxInstanceUID, LDicomPrintSCU::UpdateAnnotationBox, LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetAnnotationBoxInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetAnnotationBoxInstanceUID(uIndex) const

L_UINT32 uIndex;

/* index of the Annotation Box */

Returns the SOP Instance UID of the specified Basic Annotation Box SOP Instance.

Parameter | Description
uIndex | The index of the Annotation Box whose SOP Instance UID is to be retrieved. This should be a number from 0 to the count of Annotation Boxes minus 1. The function LDicomPrintSCU::GetAnnotationBoxesCount returns the count of Annotation Boxes.

Returns

The SOP Instance UID of the specified Annotation Box. If an invalid index is passed, the function will return NULL.

Comments

When the Print SCP is requested to create a Film Box, and if an Annotation Display Format ID is specified, the Print SCP will also create one or more Annotation Boxes, based on the Annotation Display Format ID. This will happen only if the Basic Annotation Box SOP Class is supported on the Association. This function returns the SOP Instance UID of a particular Annotation Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetAnnotationBoxesCount, LDicomPrintSCU::UpdateAnnotationBox, LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetAssociateRejectInfo

#include "ltdic.h"

L_VOID LDicomPrintSCU::GetAssociateRejectInfo(pnResult, pnSource, pnReason) const

L_UCHAR* pnResult; | /* type of rejection */
L_UCHAR* pnSource; | /* source of rejection */
L_UCHAR* pnReason; | /* reason for rejection */

Gets information about the Association rejection.

Parameter | Description
pnResult | Pointer to a variable to be updated with the type of the rejection. This can be set to NULL if the information is not required.
pnSource | Pointer to a variable to be updated with the source of the rejection. This can be set to NULL if the information is not required.
pnReason | Pointer to a variable to be updated with the reason for the rejection. This can be set to NULL if the information is not required.
 | For the possible values, refer to the callback function LDicomNet::OnReceiveAssociateReject of the base class.

Returns

None

Comments

The information obtained using this function is meaningless unless the Association request was rejected by the Print SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::Associate, LDicomNet::OnReceiveAssociateReject
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetDefaultFilmBoxParameters

#include "ltdic.h"

L_INT LDicomPrintSCU::GetDefaultFilmBoxParameters(pParameters, uStructSize) const

pFILMBOXPARAMETERS pParameters; | /* Film Box parameters */
L_UINT uStructSize; | /* size of the structure */

Sets the members of the specified FILMBOXPARAMETERS structure to default values.

Parameter | Description
pParameters | Pointer to a FILMBOXPARAMETERS structure. The function will set the memebers of this structure to default values.
uStructSize | Size of the structure pointed to by pParameters.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The function will set the member pszImageDisplayFormat to "STANDARD\1,1". The rest of string members will be set to NULL and all numeric members (which specify Attributes) will be set to negative values. The member uStructSize will be set to the size of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::UpdateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetDefaultFilmSessionParameters

#include "ltdic.h"

L_INT LDicomPrintSCU::GetDefaultFilmSessionParameters(pParameters, uStructSize) const

pFILMSESSIONPARAMETERS pParameters; | /* Film Session parameters */
L_UINT uStructSize; | /* size of the structure */

Sets the members of the specified FILMSESSIONPARAMETERS structure to default values.

Parameter | Description
pParameters | Pointer to a FILMSESSIONPARAMETERS structure. The function will set the members of this structure to default values.
uStructSize | Size of the structure pointed to by pParameters.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The function will set all string members of the structure to NULL and all numeric members (which specify Attributes) to negative values. The member uStructSize will be set to the size of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::UpdateFilmSession
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetDefaultImageBoxParameters

#include "ltdic.h"

L_INT LDicomPrintSCU::GetDefaultImageBoxParameters(pParameters, uStructSize) const

pIMAGEBOXPARAMETERS pParameters; | /* image box parameters */
L_UINT uStructSize; | /* size of the structure */

Sets the members of the specified IMAGEBOXPARAMETERS structure to default values.

Parameter | Description
pParameters | Pointer to an IMAGEBOXPARAMETERS structure. The function will set the memebers of this structure to default values.
uStructSize | Size of the structure pointed to by pParameters.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The function will set the nImagePosition member of pParameters to 1. The rest of the numeric members (which specify Attributes) will be set to negative values and all string members will be set to NULL. The member uStructSize will be set to the size of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::UpdateImageBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetDefaultOverlayBoxParameters

#include "ltdic.h"

L_INT LDicomPrintSCU::GetDefaultOverlayBoxParameters(pParameters, uStructSize) const

pOVERLAYBOXPARAMETERS pParameters; | /* Image Overlay Box parameters */
L_UINT uStructSize; | /* size of the structure */

Sets the members of the specified OVERLAYBOXPARAMETERS structure to default values.

Parameter | Description
pParameters | Pointer to an OVERLAYBOXPARAMETERS structure. The function will set the memebers of this structure to default values.
uStructSize | Size of the structure pointed to by pParameters.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The function will set each the members nOverlayOriginRow and nOverlayOriginColumn to 1. The member nMagnifyToNumberOfColumns will be set to a negative value and all string members will be set to NULL. The member uStructSize will be set to the size of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::UpdateOverlayBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetDefaultPullPrintRequestParameters

#include "ltdic.h"

L_INT LDicomPrintSCU::GetDefaultPullPrintRequestParameters(pParameters, uStructSize) const

pPULLPRINTREQUESTPARAMETERS pParameters; | /* Pull Print Request parameters */
L_UINT uStructSize; | /* size of the structure */

Sets the members of the specified PULLPRINTREQUESTPARAMETERS structure to default values.

Parameter | Description
pParameters | Pointer to a PULLPRINTREQUESTPARAMETERS structure. The function will set the members of this structure to default values.
uStructSize | Size of the structure pointed to by pParameters.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The function will set all string members of the structure to NULL and all numeric members (which specify Attributes) to negative values. The member uStructSize will be set to the size of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePullPrintRequest
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::CreatePullPrintRequest.


LDicomPrintSCU::GetFilmBoxInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetFilmBoxInstanceUID() const

Returns the SOP Instance UID of the current Basic Film Box SOP Instance.

Returns

The SOP Instance UID of the current Film Box; if no Film Box is currently created, the function will return an empty string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetFilmSessionInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetFilmSessionInstanceUID() const

Returns the SOP Instance UID of the current Basic Film Session SOP Instance.

Returns

The SOP Instance UID of the current Film Session; if no Film Session is currently created, the function will return an empty string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetImageBoxesCount

#include "ltdic.h"

L_UINT32 LDicomPrintSCU::GetImageBoxesCount() const

Returns the number of the Basic Grayscale/Color Image Box SOP Instances created by the Print SCP when a Film Box is created.

Returns

The number of the Image Boxes referenced by the current (last created) Film Box; if no Film Box is currently created, the function will return 0.

Comments

When the Print SCP is requested to create a Film Box, it will also create one or more Image Boxes, based on the Image Display Format. This function returns the count of these Image Boxes.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetImageBoxInstanceUID, LDicomPrintSCU::UpdateImageBox, LDicomPrintSCU::FreeImageBoxesInstanceUIDs, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetImageBoxInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetImageBoxInstanceUID(uIndex) const

L_UINT32 uIndex;

/* index of the Image Box */

Returns the SOP Instance UID of the specified Basic Grayscale/Color Image Box SOP Instance.

Parameter | Description
uIndex | The index of the Image Box whose SOP Instance UID is to be retrieved. This should be a number from 0 to the count of Image Boxes minus 1. The function LDicomPrintSCU::GetImageBoxesCount returns the count of Image Boxes.

Returns

The SOP Instance UID of the specified Image Box. If an invalid index is passed, the function will return NULL.

Comments

When the Print SCP is requested to create a Film Box, it will also create one or more Image Boxes, based on the Image Display Format. This function returns the SOP Instance UID of a particular Image Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetImageBoxesCount, LDicomPrintSCU::UpdateImageBox, LDicomPrintSCU::FreeImageBoxesInstanceUIDs, LDicomPrintSCU::CreateFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetLastOperationStatus

#include "ltdic.h"

L_UINT16 LDicomPrintSCU::GetLastOperationStatus() const

Returns the status code specified in the response of the Print SCP.

Returns

The status code returned in the response of the Print SCP to the last operation requested on an SOP Class.

Comments

Status codes are grouped by the Print Management Service Class into Success, Warning, and Failure categories. For some of the possible status codes, refer to Status Constants.

When a member function of the LDicomPrintSCU class requests the Print SCP to perform an operation on a SOP Class, the Print SCP is supposed to specify a status code in its response to the request. This function returns the status code specified by the Print SCP. The category of the status code can be determined as follows:

If the function that made the request returned DICOM_ERROR_PRINTSCU_FAILURE_STATUS, then the status code returned by GetLastOperationStatus is a Failure code.

If the function that made the request returned DICOM_SUCCESS, then the status code returned by GetLastOperationStatus is a Warning code if it is not COMMAND_STATUS_SUCCESS.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::OnStatus.


LDicomPrintSCU::GetOverlayBoxInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetOverlayBoxInstanceUID() const

Returns the SOP Instance UID of the last created Basic Print Image Overlay Box SOP Instance.

Returns

The SOP Instance UID of the Image Overlay Box that was last created successfully using the function LDicomPrintSCU::CreateOverlayBox.

Comments

Once an Image Overlay Box is created, a call to this function will return the SOP Instance UID of the newly created Image Overlay Box. Therefore, if the SOP Instance UID of an Image Overlay Box is needed, it should be stored before creating the next Image Overlay Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::UpdateOverlayBox, LDicomPrintSCU::DeleteOverlayBox, LDicomPrintSCU::GetDefaultOverlayBoxParameters
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetPresentationLUTInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetPresentationLUTInstanceUID() const

Returns the SOP Instance UID of the last created Presentation LUT SOP Instance.

Returns

The SOP Instance UID of the Presentation LUT that was last created successfully using the function LDicomPrintSCU::CreatePresentationLUT.

Comments

Once a Presentation LUT is created, a call to this function will return the SOP Instance UID of the newly created Presentation LUT. Therefore, if the SOP Instance UID of a Presentation LUT is needed, it should be stored before creating the next Presentation LUT.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePresentationLUT, LDicomPrintSCU::DeletePresentationLUT
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetPrinterConfiguration

#include "ltdic.h"

L_INT LDicomPrintSCU::GetPrinterConfiguration()

Queries the Print SCP for the printer configuration information.

Returns

0 | The printer configuration information was retrieved successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Printer Configuration Retrieval SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function GetPrinterConfiguration is 0, then the printer configuration information was retrieved successfully, with either a Success or Warning status code in the response of the Print SCP.

The retrieved printer configuration information is stored in the data member LDicomPrintSCU::m_PrinterConfiguration, which is an LDicomDS object.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::m_PrinterConfiguration, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::GetPrinterInfo
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

L_VOID GetPrinterConfigInfo(LDicomPrintSCU& PrintSCU)
{
// Assume that the Association is already established

// Query the Print SCP for the printer configuration information
if (PrintSCU.GetPrinterConfiguration () == DICOM_SUCCESS)
{
// We will display only the Printer Name and Memory Bit Depth
// in the first Item

LDicomDS& PrnConfig = PrintSCU.m_PrinterConfiguration;
pDICOMELEMENT pElement;
L_CHAR szPrnConfigInfo[128];

pElement = PrnConfig.FindFirstElement (NULL,
TAG_PRINTER_CONFIGURATION_SEQUENCE,
FALSE);
if (!pElement)
return;

pElement = PrnConfig.GetChildElement (pElement, TRUE);
if (!pElement)
return;

pElement = PrnConfig.GetChildElement (pElement, TRUE);
if (!pElement)
return;

wsprintf(szPrnConfigInfo, "Printer Name: ");

pDICOMELEMENT pPrinterName;
pPrinterName = PrnConfig.FindFirstElement (pElement,
TAG_PRINTER_NAME,
TRUE);
if (pPrinterName)
{
L_CHAR* pszPrinterName = PrnConfig.GetStringValue (pPrinterName, 0, 1);
if (pszPrinterName)
{
wsprintf(szPrnConfigInfo, "%s%s", szPrnConfigInfo, pszPrinterName);
}
}

wsprintf(szPrnConfigInfo, "%s\nMemory Bit Depth: ", szPrnConfigInfo);

pDICOMELEMENT pMemoryBitDepth;
pMemoryBitDepth = PrnConfig.FindFirstElement (pElement,
TAG_MEMORY_BIT_DEPTH,
TRUE);
if (pMemoryBitDepth)
{
L_INT16* pnMemoryBitDepth = PrnConfig.GetShortValue(pMemoryBitDepth,
0,
1);
if (pnMemoryBitDepth)
{
wsprintf(szPrnConfigInfo, "%s%hu",
szPrnConfigInfo, *pnMemoryBitDepth);
}
}

MessageBox(NULL, szPrnConfigInfo, "Printer Config Info", MB_OK);
}
}


LDicomPrintSCU::GetPrinterInfo

#include "ltdic.h"

L_INT LDicomPrintSCU::GetPrinterInfo(pPrinterInfo, uStructSize) const

pPRINTERINFO pPrinterInfo; | /* Printer information */
L_UINT uStructSize; | /* size of the structure */

Fills the members of the specified PRINTERINFO structure with the printer information retrieved previously from the Print SCP.

Parameter | Description
pPrinterInfo | Pointer to a PRINTERINFO structure. The function will set the members of this structure to the retrieved printer information.
uStructSize | Size of the structure pointed to by pPrinterInfo.

Returns

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

The Print SCP can be queried for printer information using the function LDicomPrintSCU::GetPrinterInfo. Once the information is retrieved successfully, the function GetPrinterInfo can then be used to obtain the information sent by the Print SCP.

If an Attribute was not included in the response of the Print SCP, the corresponding structure member will be set to an empty string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrinterInfo, LDicomPrintSCU::OnPrinterReport, LDicomPrintSCU::GetPrinterConfiguration
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

L_VOID GetPrinterInfo(LDicomPrintSCU& PrintSCU)
{
// Assume that the Association is already established

PRINTERINFO PrinterInfo;

// We need only the Printer Status and Printer Status Info
memset(&PrinterInfo, 0, sizeof(PRINTERINFO));
PrinterInfo.uStructSize = sizeof(PRINTERINFO);
lstrcpy(PrinterInfo.szPrinterStatus, " ");
lstrcpy(PrinterInfo.szPrinterStatusInfo, " ");

// Query the Print SCP for the information
if (PrintSCU.GetPrinterInfo(&PrinterInfo, TRUE, FALSE) == DICOM_SUCCESS)
{
// Display the retrieved information

PrintSCU.GetPrinterInfo(&PrinterInfo, sizeof(PRINTERINFO));

L_CHAR szPrinterInfo[256];
wsprintf(szPrinterInfo, "Printer Status: %s\nPrinter Status Info: %s",
PrinterInfo.szPrinterStatus, PrinterInfo.szPrinterStatusInfo);

MessageBox(NULL, szPrinterInfo, "Printer Info", MB_OK);
}
}


LDicomPrintSCU::GetPrinterInfo

#include "ltdic.h"

L_INT LDicomPrintSCU::GetPrinterInfo(pRequiredPrinterInfo, bBasicPrintManagement, bColorPrintManagement)

const pPRINTERINFO pRequiredPrinterInfo; | /* required printer information */
L_BOOL bBasicPrintManagement; | /* Basic or Pull Stored Print Management */
L_BOOL bColorPrintManagement; | /* Grayscale or Color Print Management */

Queries the Print SCP for information about the printer.

Parameter | Description
pRequiredPrinterInfo | Pointer to a PRINTERINFO structure that specifies the printer information to be retrieved. If this is set to NULL, then it will be assumed that the Values of all the Attributes are required.
bBasicPrintManagement | The parameter is described below.
bColorPrintManagement | The parameter is described below.

Returns

0 | The required printer information was retrieved successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | None of the three Meta SOP Classes (the Basic Grayscale Print Management Meta SOP Class, the Basic Color Print Management Meta SOP Class, or the Pull Stored Print Management Meta SOP Class) is supported on the Association, and hence the Printer SOP Class is not supported.
> 0 | An error occurred. Refer to Return Codes.

Comments

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function GetPrinterInfo is 0, then the required printer information was retrieved successfully, with either a Success or Warning status code in the response of the Print SCP.

The function LDicomPrintSCU::GetPrinterInfo can be used to obtain the printer information retrieved from the Print SCP.

The parameter pRequiredPrinterInfo points to a PRINTERINFO structure that specifies the printer information to be retrieved. In this structure, all the members that specify Attributes are string buffers. To query the Print SCP for the Value of an Attribute, the corresponding structure member must contain a non-empty string. If a structure member contains an empty string, the corresponding Attribute will not be included in the request. However, if all the members contain empty strings, the Print SCP will be queried for the Values of all the Attributes.

The Printer SOP Class is included in each of the three Meta SOP Classes (the Basic Grayscale Print Management Meta SOP Class, the Basic Color Print Management Meta SOP Class, and the Pull Stored Print Management Meta SOP Class). The parameters bBasicPrintManagement and bColorPrintManagement recommend the Meta SOP Class to be specified in the request to the Print SCP. However, unless the Meta SOP Class specified by these parameters is supported on the Association, it will not be specified in the request and the function will choose a supported Meta SOP Class instead. Therefore, if only one Meta SOP Class is supported, the function will always choose it irrespective of the values of these parameters. The parameter bBasicPrintManagement selects between the Basic Print Management Meta SOP Classes and the Pull Stored Print Management Meta SOP Class, while the parameter bColorPrintManagement selects between the Basic Grayscale Print Management Meta SOP Class and the Basic Color Print Management Meta SOP Class.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrinterInfo, LDicomPrintSCU::OnPrinterReport, LDicomPrintSCU::GetPrinterConfiguration, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::GetPrinterInfo.


LDicomPrintSCU::GetPrintJobInfo

#include "ltdic.h"

L_INT LDicomPrintSCU::GetPrintJobInfo(pszPrintJobInstanceUID, pRequiredPrintJobInfo = NULL)

L_INT LDicomPrintSCU::GetPrintJobInfo(pPrintJobInfo, uStructSize) const

L_CHAR L_FAR * pszPrintJobInstanceUID; | /* SOP Instance UID of the Print Job */
const pPRINTJOBINFO pRequiredPrintJobInfo; | /* required Print Job information */
pPRINTJOBINFO pPrintJobInfo; | /* print Job information */
L_UINT uStructSize; | /* size of the structure */

LDicomPrintSCU::GetPrintJobInfo(pszPrintJobInstanceUID, pRequiredPrintJobInfo) queries the Print SCP for information about the specified Print Job.

LDicomPrintSCU::GetPrintJobInfo (pPrintJobInfo, uStructSize) fills the members of the specified PRINTJOBINFO structure with the Print Job information retrieved previously from the Print SCP.

Parameter | Description
pszPrintJobInstanceUID | Character string that contains the SOP Instance UID of the Print Job whose information is to be retrieved. The function will return an error if this is NULL or if an empty string is specified.
pRequiredPrintJobInfo | Pointer to a PRINTJOBINFO structure that specifies the Print Job information to be retrieved. If this is set to NULL, then it will be assumed that the Values of all the Attributes are required.
pPrintJobInfo | Pointer to a PRINTJOBINFO structure. The function will set the members of this structure to the retrieved Print Job information.
uStructSize | Size of the structure pointed to by pPrintJobInfo.

Returns

LDicomPrintSCU::GetPrintJobInfo(pszPrintJobInstanceUID, pRequiredPrintJobInfo) returns the following:

0 | The required Print Job information was retrieved successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Print Job SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

LDicomPrintSCU::GetPrintJobInfo (pPrintJobInfo, uStructSize) returns the following:

0 | The function was successful.
<> 0 | An error occurred. Refer to Return Codes.

Comments

For LDicomPrintSCU::GetPrintJobInfo(pszPrintJobInstanceUID, pRequiredPrintJobInfo):

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function GetPrintJobInfo is 0, then the required Print Job information was retrieved successfully, with either a Success or Warning status code in the response of the Print SCP.

The function LDicomPrintSCU::GetPrintJobInfo can be used to obtain the Print Job information retrieved from the Print SCP.

The parameter pRequiredPrintJobInfo points to a PRINTJOBINFO structure that specifies the Print Job information to be retrieved. In this structure, all the members that specify Attributes are string buffers. To query the Print SCP for the Value of an Attribute, the corresponding structure member must contain a non-empty string. If a structure member contains an empty string, the corresponding Attribute will not be included in the request; however, if all the members contain empty strings, the Print SCP will be queried for the Values of all the Attributes.

For LDicomPrintSCU::GetPrintJobInfo(pPrintJobInfo, uStructSize):

Using the function LDicomPrintSCU::GetPrintJobInfo, the Print SCP can be queried for information about a Print Job. Once the information is retrieved successfully, the function GetPrintJobInfo can then be used to obtain the information sent by the Print SCP.

If an Attribute was not included in the response of the Print SCP, the corresponding structure member will be set to an empty string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrintJobInstanceUID, LDicomPrintSCU::OnPrintJobReport, LDicomPrintSCU::GetPrintJobInfo, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

L_VOID GetPrintJobInfo(LDicomPrintSCU& PrintSCU, L_PCSTR pszPrintJobInstanceUID)
{
PRINTJOBINFO PrintJobInfo;

// We need only the Execution Status and Execution Status Info
memset(&PrintJobInfo, 0, sizeof(PRINTJOBINFO));
PrintJobInfo.uStructSize = sizeof(PRINTJOBINFO);
lstrcpy(PrintJobInfo.szExecutionStatus, " ");
lstrcpy(PrintJobInfo.szExecutionStatusInfo, " ");

// Query the Print SCP for the Print Job information
if (PrintSCU.GetPrintJobInfo (pszPrintJobInstanceUID,
&PrintJobInfo) == DICOM_SUCCESS)
{
// Display the retrieved information

PrintSCU.GetPrintJobInfo (&PrintJobInfo, sizeof(PRINTJOBINFO));

L_CHAR szPrintJobInfo[256];
wsprintf(szPrintJobInfo,
"Execution Status: %s\nExecution Status Info: %s",
PrintJobInfo.szExecutionStatus,
PrintJobInfo.szExecutionStatusInfo);

MessageBox(NULL, szPrintJobInfo, "Print Job Info", MB_OK);
}
}


LDicomPrintSCU::GetPrintJobInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetPrintJobInstanceUID() const

Returns the SOP Instance UID of the last Print Job SOP Instance.

Returns

The SOP Instance UID of the Print Job SOP Instance resulted from the last successful printing request sent to the Print SCP. If no Print Job was created by the Print SCP for the last printing request, the function will return an empty string.

Comments

Each of the functions LDicomPrintSCU::PrintFilmSession, LDicomPrintSCU::PrintFilmBox, and LDicomPrintSCU::PrintPullPrintRequestSession requests the Print SCP to print one or more films. If the Print Job SOP Class is supported on the Association, the Print SCP is supposed to create a Print Job SOP Instance for the new Print Job and send the SOP Instance UID of that Instance in the response to the printing request. The function GetPrintJobInstanceUID returns that SOP Instance UID.

The SOP Instance UID of a Print Job can be used to query the Print SCP for information about the Print Job (refer to the function LDicomPrintSCU::GetPrintJobInfo). Also, it is used to identify the Print Job when status reports are received from the Print SCP (refer to the function LDicomPrintSCU::OnPrintJobReport).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::PrintFilmSession, LDicomPrintSCU::PrintFilmBox, LDicomPrintSCU::PrintPullPrintRequestSession, LDicomPrintSCU::OnPrintJobReport, LDicomPrintSCU::GetPrintJobInfo
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::GetPullPrintRequestInstanceUID

#include "ltdic.h"

L_CHAR L_FAR * LDicomPrintSCU::GetPullPrintRequestInstanceUID() const

Returns the SOP Instance UID of the current Pull Print Request SOP Instance.

Returns

The SOP Instance UID of the current Pull Print Request SOP Instance; if no such Instance is currently created, the function will return an empty string.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePullPrintRequest
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::CreatePullPrintRequest.


LDicomPrintSCU::IsClassSupported

#include "ltdic.h"

L_BOOL LDicomPrintSCU::IsClassSupported(uClass)

L_UINT16 uClass;

/* SOP/Meta SOP Class */

Determines whether the specified SOP/Meta SOP Class is supported on the Association.

Parameter | Description
uClass | Specifies the SOP/Meta SOP Class. Possible values are:
 | Value | Meaning
 | PRINTSCU_BASIC_GRAYSCALE_PM_META_SOP_CLASS | [0x01] Specifies the Basic Grayscale Print Management Meta SOP Class.
 | PRINTSCU_BASIC_COLOR_PM_META_SOP_CLASS | [0x02] Specifies the Basic Color Print Management Meta SOP Class.
 | PRINTSCU_PULL_STORED_PM_META_SOP_CLASS | [0x04] Specifies the Pull Stored Print Management Meta SOP Class.
 | PRINTSCU_BASIC_ANNOTATION_BOX_SOP_CLASS | [0x08] Specifies the Basic Annotation Box SOP Class.
 | PRINTSCU_BASIC_PRINT_IMAGE_OVERLAY_BOX_SOP_CLASS | [0x10] Specifies the Basic Print Image Overlay Box SOP Class.
 | PRINTSCU_PRESENTATION_LUT_SOP_CLASS | [0x20] Specifies the Presentation LUT SOP Class.
 | PRINTSCU_PRINT_JOB_SOP_CLASS | [0x40] Specifies the Print Job SOP Class.
 | PRINTSCU_PRINTER_CONFIGURATION_RETRIEVAL_SOP_CLASS | [0x80] Specifies the Printer Configuration Retrieval SOP Class.

Returns

TRUE | The specified SOP/Meta SOP Class is supported on the Association.
FALSE | The specified SOP/Meta SOP Class is not supported on the Association.

Comments

The function will always return FALSE if the Association has not been established using LDicomPrintSCU::Associate.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::Associate
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::m_PrinterConfiguration

#include "ltdic.h"

LDicomDS m_PrinterConfiguration

Comments

Using the function LDicomPrintSCU::GetPrinterConfiguration, the Print SCP can be queried for the printer configuration information. The retrieved information is stored in m_PrinterConfiguration. The various member functions of the LDicomDS class can then be used to investigate the information sent by the Print SCP.

The printer configuration information is sent as one or more Items in a Printer Configuration Sequence (2000,001E).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrinterConfiguration
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::GetPrinterConfiguration.


LDicomPrintSCU::OnPrinterReport

#include "ltdic.h"

virtual L_VOID LDicomPrintSCU::OnPrinterReport(uEventTypeID, pReportInfo)

L_UINT16 uEventTypeID; | /* Event Type ID */
const pPRINTERREPORTINFO pReportInfo; | /* printer report info */

Called when a printer status report is received from the Print SCP.

Parameter | Description
uEventTypeID | Specifies the Event Type ID which indicates normal, warning, or failure conditions. Possible values are:
 | Value | Meaning
 | 1 | Normal condition (Event Type Name = Normal). In this case, the parameter pReportInfo will be NULL.
 | 2 | Warning condition (Event Type Name = Warning).
 | 3 | Failure condition (Event Type Name = Failure).
pReportInfo | Pointer to a PRINTERREPORTINFO structure that specifies printer information in warning and failure conditions. This can be NULL and it is always NULL if the parameter uEventTypeID is equal to 1 (normal condition).

Returns

None

Comments

This callback function is called whenever the Print SCU receives a report from the Print SCP about the changes of the printer status. If any of the three Meta SOP Classes (the Basic Grayscale Print Management Meta SOP Class, the Basic Color Print Management Meta SOP Class, or the Pull Stored Print Management Meta SOP Class) is supported on the Association, the Printer SOP Class is also supported and hence the function is expected to be called. If none of the three Meta SOP Classes is supported, the function will never be called.

In warning and failure conditions, the Print SCP is supposed to supply additional information about the printer status in the Attribute Printer Status Info (the member pszPrinterStatusInfo of the PRINTERREPORTINFO structure).

The implementation of the LDicomPrintSCU class for this function simply does nothing. In order to make use of this callback function, you should create a new class derived from the LDicomPrintSCU and override the function providing the desired implementation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrinterInfo, LDicomPrintSCU::GetPrinterConfiguration
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::OnStatus.


LDicomPrintSCU::OnPrintJobReport

#include "ltdic.h"

virtual L_VOID LDicomPrintSCU::OnPrintJobReport(pszPrintJobInstanceUID, uEventTypeID, pReportInfo)

L_CHAR L_FAR * pszPrintJobInstanceUID; | /* SOP Instance UID of the Print Job */
L_UINT16 uEventTypeID; | /* Event Type ID */
const pPRINTJOBREPORTINFO pReportInfo; | /* Print Job report info */

Called when a Print Job status report is received from the Print SCP.

Parameter | Description
pszPrintJobInstanceUID | Character string that contains the SOP Instance UID of the Print Job SOP Instance for which the status report was sent.
uEventTypeID | Specifies the Event Type ID which indicates the status of the Print Job. Possible values are:
 | Value | Meaning
 | 1 | Event Type Name = Pending
 | 2 | Event Type Name = Printing
 | 3 | Event Type Name = Done
 | 4 | Event Type Name = Failure
pReportInfo | Pointer to a PRINTJOBREPORTINFO structure that specifies Print Job information. This can be NULL.

Returns

None

Comments

This callback function is called whenever the Print SCU receives a report from the Print SCP about the changes in the status of a Print Job. The intended Print Job is specified by its SOP Instance UID. If the Print Job SOP Class is supported on the Association, this function is expected to be called. Otherwise, it will never be called.

If the status of the Print Job is Pending or Failure, the Print SCP is supposed to supply additional information about the pending/error condition in the Attribute Execution Status Info (the member pszExecutionStatusInfo of the PRINTJOBREPORTINFO structure).

The implementation of the LDicomPrintSCU class for this function simply does nothing. In order to make use of this callback function, you should create a new class derived from the LDicomPrintSCU and override the function providing the desired implementation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetPrintJobInstanceUID, LDicomPrintSCU::GetPrintJobInfo
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::OnStatus.


LDicomPrintSCU::OnStatus

#include "ltdic.h"

virtual L_VOID LDicomPrintSCU::OnStatus(uStatus, uOperationStatus)

L_UINT16 uStatus; | /* status of the Print SCU */
L_UINT16 uOperationStatus; | /* operation status */

Called to indicate the status of the Print SCU.

Parameter | Description
uStatus | Specifies the status of the Print SCU. Possible values are:
 | Value | Meaning
 | PRINTSCU_STATUS_CONNECT | [1] The Print SCU is connecting to the Print SCP.
 | PRINTSCU_STATUS_SEND_ASSOCIATE_RQ | [2] An A-ASSOCIATE-RQ was sent to the Print SCP.
 | PRINTSCU_STATUS_RECEIVE_ASSOCIATE_RJ | [3] An A-ASSOCIATE-RJ was received from the Print SCP.
 | PRINTSCU_STATUS_RECEIVE_ASSOCIATE_AC | [4] An A-ASSOCIATE-AC was received from the Print SCP.
 | PRINTSCU_STATUS_SEND_RELEASE_RQ | [5] An A-RELEASE-RQ was sent to the Print SCP.
 | PRINTSCU_STATUS_CLOSE | [6] The Print SCU closed the connection.
 | PRINTSCU_STATUS_RECEIVE_RELEASE_RP | [7] An A-RELEASE-RP was received from the Print SCP.
 | PRINTSCU_STATUS_RECEIVE_RELEASE_RQ | [8] An A-RELEASE-RQ was received from the Print SCP.
 | PRINTSCU_STATUS_SEND_RELEASE_RP | [9] An A-RELEASE-RP was sent to the Print SCP.
 | PRINTSCU_STATUS_RECEIVE_ABORT | [10] An A-ABORT was received from the Print SCP.
 | PRINTSCU_STATUS_SEND_CREATE_FILM_SESSION_RQ | [11] An N-CREATE-RQ was sent to the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_RECEIVE_CREATE_FILM_SESSION_RSP | [12] An N-CREATE-RSP was received from the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_SEND_UPDATE_FILM_SESSION_RQ | [13] An N-SET-RQ was sent to the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_RECEIVE_UPDATE_FILM_SESSION_RSP | [14] An N-SET-RSP was received from the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_SEND_PRINT_FILM_SESSION_RQ | [15] An N-ACTION-RQ was sent to the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_RECEIVE_PRINT_FILM_SESSION_RSP | [16] An N-ACTION-RSP was received from the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_SEND_DELETE_FILM_SESSION_RQ | [17] An N-DELETE-RQ was sent to the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_RECEIVE_DELETE_FILM_SESSION_RSP | [18] An N-DELETE-RSP was received from the Print SCP (Basic Film Session SOP Class).
 | PRINTSCU_STATUS_SEND_CREATE_FILM_BOX_RQ | [19] An N-CREATE-RQ was sent to the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_CREATE_FILM_BOX_RSP | [20] An N-CREATE-RSP was received from the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_SEND_UPDATE_FILM_BOX_RQ | [21] An N-SET-RQ was sent to the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_UPDATE_FILM_BOX_RSP | [22] An N-SET-RSP was received from the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_SEND_PRINT_FILM_BOX_RQ | [23] An N-ACTION-RQ was sent to the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_PRINT_FILM_BOX_RSP | [24] An N-ACTION-RSP was received from the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_SEND_DELETE_FILM_BOX_RQ | [25] An N-DELETE-RQ was sent to the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_DELETE_FILM_BOX_RSP | [26] An N-DELETE-RSP was received from the Print SCP (Basic Film Box SOP Class).
 | PRINTSCU_STATUS_SEND_UPDATE_IMAGE_BOX_RQ | [27] An N-SET-RQ was sent to the Print SCP (Basic Grayscale/Color Image Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_UPDATE_IMAGE_BOX_RSP | [28] An N-SET-RSP was received from the Print SCP (Basic Grayscale/Color Image Box SOP Class).
 | PRINTSCU_STATUS_SEND_UPDATE_ANNOTATION_BOX_RQ | [29] An N-SET-RQ was sent to the Print SCP (Basic Annotation Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_UPDATE_ANNOTATION_BOX_RSP | [30] An N-SET-RSP was received from the Print SCP (Basic Annotation Box SOP Class).
 | PRINTSCU_STATUS_SEND_GET_PRINTER_INFO_RQ | [31] An N-GET-RQ was sent to the Print SCP (Printer SOP Class).
 | PRINTSCU_STATUS_RECEIVE_GET_PRINTER_INFO_RSP | [32] An N-GET-RSP was received from the Print SCP (Printer SOP Class).
 | PRINTSCU_STATUS_SEND_GET_PRINT_JOB_INFO_RQ | [33] An N-GET-RQ was sent to the Print SCP (Print Job SOP Class).
 | PRINTSCU_STATUS_RECEIVE_GET_PRINT_JOB_INFO_RSP | [34] An N-GET-RSP was received from the Print SCP (Print Job SOP Class).
 | PRINTSCU_STATUS_SEND_GET_PRINTER_CONFIG_RQ | [35] An N-GET-RQ was sent to the Print SCP (Printer Configuration Retrieval SOP Class).
 | PRINTSCU_STATUS_RECEIVE_GET_PRINTER_CONFIG_RSP | [36] An N-GET-RSP was received from the Print SCP (Printer Configuration Retrieval SOP Class).
 | PRINTSCU_STATUS_SEND_CREATE_PRESENTATION_LUT_RQ | [37] An N-CREATE-RQ was sent to the Print SCP (Presentation LUT SOP Class).
 | PRINTSCU_STATUS_RECEIVE_CREATE_PRESENTATION_LUT_RSP | [38] An N-CREATE-RSP was received from the Print SCP (Presentation LUT SOP Class).
 | PRINTSCU_STATUS_SEND_DELETE_PRESENTATION_LUT_RQ | [39] An N-DELETE-RQ was sent to the Print SCP (Presentation LUT SOP Class).
 | PRINTSCU_STATUS_RECEIVE_DELETE_PRESENTATION_LUT_RSP | [40] An N-DELETE-RSP was received from the Print SCP (Presentation LUT SOP Class).
 | PRINTSCU_STATUS_SEND_CREATE_OVERLAY_BOX_RQ | [41] An N-CREATE-RQ was sent to the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_CREATE_OVERLAY_BOX_RSP | [42] An N-CREATE-RSP was received from the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_SEND_UPDATE_OVERLAY_BOX_RQ | [43] An N-SET-RQ was sent to the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_UPDATE_OVERLAY_BOX_RSP | [44] An N-SET-RSP was received from the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_SEND_DELETE_OVERLAY_BOX_RQ | [45] An N-DELETE-RQ was sent to the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_RECEIVE_DELETE_OVERLAY_BOX_RSP | [46] An N-DELETE-RSP was received from the Print SCP (Basic Print Image Overlay Box SOP Class).
 | PRINTSCU_STATUS_SEND_CREATE_PULL_PRINT_REQUEST_RQ | [47] An N-CREATE-RQ was sent to the Print SCP (Pull Print Request SOP Calss).
 | PRINTSCU_STATUS_RECEIVE_CREATE_PULL_PRINT_REQUEST_RSP | [48] An N-CREATE-RSP was received from the Print SCP (Pull Print Request SOP Calss).
 | PRINTSCU_STATUS_SEND_PRINT_PULL_PRINT_REQUEST_RQ | [49] An N-ACTION-RQ was sent to the Print SCP (Pull Print Request SOP Calss).
 | PRINTSCU_STATUS_RECEIVE_PRINT_PULL_PRINT_REQUEST_RSP | [50] An N-ACTION-RSP was received from the Print SCP (Pull Print Request SOP Calss).
 | PRINTSCU_STATUS_SEND_DELETE_PULL_PRINT_REQUEST_RQ | [51] An N-DELETE-RQ was sent to the Print SCP (Pull Print Request SOP Calss).
 | PRINTSCU_STATUS_RECEIVE_DELETE_PULL_PRINT_REQUEST_RSP | [52] An N-DELETE-RSP was received from the Print SCP (Pull Print Request SOP Calss).
uOperationStatus | When the parameter uStatus is one of the PRINTSCU_STATUS_xxx_RSP status values, uOperationStatus will be either COMMAND_STATUS_SUCCESS (in case a Success or Warning status code is specified in the response of the Print SCP) or the Failure status code specified in the response. In all other values of uStatus, uOperationStatus is meaningless and is always set to 0.

Returns

None

Comments

When the function LDicomPrintSCU::CreateFilmSession is called to create a Film Session, and assuming that the function succeeds, the callback function OnStatus will be called twice: The first time with uStatus set to PRINTSCU_STATUS_SEND_CREATE_FILM_SESSION_RQ and uOperationStatus set to 0, and the second time with uStatus set to PRINTSCU_STATUS_RECEIVE_CREATE_FILM_SESSION_RSP and uOperationStatus set to COMMAND_STATUS_SUCCESS.

When the parameter uStatus is one of the PRINTSCU_STATUS_xxx_RSP status values, the parameter uOperationStatus is determined as follows:

If the status code specified in the response of the Print SCP is either a Success or Warning status code, uOperationStatus will be set to COMMAND_STATUS_SUCCESS. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the actual status code. If it is really a Success status code, the function will return COMMAND_STATUS_SUCCESS, otherwise, it will return the Warning status code.

If a Failure status code is specified in the response of the Print SCP, uOperationStatus will be set to that Failure status code. The same status code would be returned by the function LDicomPrintSCU::GetLastOperationStatus.

The implementation of the LDicomPrintSCU class for this function simply does nothing. In order to make use of this callback function, you should create a new class derived from the LDicomPrintSCU and override the function providing the desired implementation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

class CPrintSCU : public LDicomPrintSCU
{
public:
CPrintSCU(L_CHAR L_FAR * pszPath = NULL) : LDicomPrintSCU(pszPath) { }

L_VOID OnStatus(L_UINT16 uStatus, L_UINT16 uOperationStatus)
{
L_CHAR szMsg[32];
L_UCHAR nSource, nReason;
L_UINT16 uOpStatus;
L_CHAR L_FAR * pszStatusCodeType;

switch (uStatus)
{
case PRINTSCU_STATUS_RECEIVE_ABORT:
GetAbortInfo (&nSource, &nReason);

wsprintf(szMsg, "Source = %i, Reason = %i", nSource, nReason);
MessageBox(NULL, szMsg, "Print SCP Aborted the Association", MB_OK);

break;

case PRINTSCU_STATUS_RECEIVE_PRINT_FILM_SESSION_RSP:
uOpStatus = GetLastOperationStatus ();

if (uOperationStatus == COMMAND_STATUS_SUCCESS)
{
if (uOpStatus == COMMAND_STATUS_SUCCESS)
{
pszStatusCodeType = "Success";
}
else
{
pszStatusCodeType = "Warning";
}
}
else
{
pszStatusCodeType = "Failure";
}

wsprintf(szMsg, "Status: 0x%04X (%s)", uOpStatus, pszStatusCodeType);
MessageBox(NULL, szMsg,
"Received N-ACTION-RSP (Basic Film Session SOP Class)",
MB_OK);

break;
}
}

L_VOID OnPrinterReport (L_UINT16 uEventTypeID,
const pPRINTERREPORTINFO pReportInfo)
{
L_CHAR L_FAR * pszEventTypeName = "Normal";
switch (uEventTypeID)
{
case 2:
pszEventTypeName = "Warning";
break;

case 3:
pszEventTypeName = "Failure";
break;
}

L_CHAR szMsg[256];

wsprintf(szMsg, "Event Type Name: %s", pszEventTypeName);

if (uEventTypeID != 1 && pReportInfo)
{
if (pReportInfo->pszPrinterStatusInfo)
{
wsprintf(szMsg, "%s\nPrinter Status Info: %s",
szMsg, pReportInfo->pszPrinterStatusInfo);
}

if (pReportInfo->pszFilmDestination)
{
wsprintf(szMsg, "%s\nFilm Destination: %s",
szMsg, pReportInfo->pszFilmDestination);
}

if (pReportInfo->pszPrinterName)
{
wsprintf(szMsg, "%s\nPrinter Name: %s",
szMsg, pReportInfo->pszPrinterName);
}
}

MessageBox(NULL, szMsg, "Printer Status Report", MB_OK);
}

L_VOID OnPrintJobReport (L_CHAR L_FAR * pszPrintJobInstanceUID,
L_UINT16 uEventTypeID,
const pPRINTJOBREPORTINFO pReportInfo)
{
L_CHAR szMsg[512];

wsprintf(szMsg, "Print Job SOP Instance UID: %s", pszPrintJobInstanceUID);

L_CHAR L_FAR * pszEventTypeName = "Pending";
switch (uEventTypeID)
{
case 2:
pszEventTypeName = "Printing";
break;

case 3:
pszEventTypeName = "Done";
break;

case 4:
pszEventTypeName = "Failure";
break;
}

wsprintf(szMsg, "%s\nEvent Type Name: %s", szMsg, pszEventTypeName);

if (pReportInfo)
{
if (pReportInfo->pszExecutionStatusInfo)
{
wsprintf(szMsg, "%s\nExecution Status Info: %s",
szMsg, pReportInfo->pszExecutionStatusInfo);
}

if (pReportInfo->pszFilmSessionLabel)
{
wsprintf(szMsg, "%s\nFilm Session Label: %s",
szMsg, pReportInfo->pszFilmSessionLabel);
}

if (pReportInfo->pszPrinterName)
{
wsprintf(szMsg, "%s\nPrinter Name: %s",
szMsg, pReportInfo->pszPrinterName);
}
}

MessageBox(NULL, szMsg, "Print Job Status Report", MB_OK);
}
};


LDicomPrintSCU::PrintFilmBox

#include "ltdic.h"

L_INT LDicomPrintSCU::PrintFilmBox()

Requests the Print SCP to print the current Film Box.

Returns

0 | The Film Box was printed successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Box currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function PrintFilmBox is 0, then the Film Box was printed successfully, with either a Success or Warning status code in the response of the Print SCP.

This function requests the Print SCP to print only the current Film Box. The function LDicomPrintSCU::PrintFilmSession can be used to print all the Film Boxes that belong to the current Film Session.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::PrintFilmSession
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::PrintFilmSession

#include "ltdic.h"

L_INT LDicomPrintSCU::PrintFilmSession()

Requests the Print SCP to print all the Film Boxes that belong to the current Film Session.

Returns

0 | The Film Session was printed successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Session currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function PrintFilmSession is 0, then the Film Session was printed successfully, with either a Success or Warning status code in the response of the Print SCP.

This function requests the Print SCP to print all the Film Boxes that belong to the current Film Session. The function LDicomPrintSCU::PrintFilmBox can be used to print only the current Film Box.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::PrintFilmBox
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::PrintPullPrintRequestSession

#include "ltdic.h"

L_INT LDicomPrintSCU::PrintPullPrintRequestSession()

Requests the Print SCP to print the session of the current Pull Print Request SOP Instance.

Returns

0 | The session of the current Pull Print Request SOP Instance was printed successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Pull Stored Print Management Meta SOP Class is not supported on the Association, and hence the Pull Print Request SOP Class is not supported.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Pull Print Request SOP Instance currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function PrintPullPrintRequestSession is 0, then the session was printed successfully, with either a Success or Warning status code in the response of the Print SCP.

To print the session, the Print SCP should first retrieve the Stored Print Storage SOP Instance(s) specified when the Pull Print Request SOP Instance was created, retrieve the Image SOP Instances referenced by the former Instance(s), and then print the resulting film box(es).

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreatePullPrintRequest, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::CreatePullPrintRequest.


LDicomPrintSCU::Release

#include "ltdic.h"

L_INT LDicomPrintSCU::Release()

Releases the Association and closes the connection.

Returns

0 | The Association was released (if it was established) successfully and the connection was closed. Also, the function will return 0 if the connection is not established.
> 0 | An error occurred. Refer to Return Codes.

Comments

If the Association is established, this function will not return until the Association is released and the connection is closed, or an error occurs.

If necessary, you can use the base class function LDicomNet::SendAbort to abort the Association instead of releasing it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::Associate, LDicomNet::SendAbort, LDicomNet::Close
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::SetTimeout

#include "ltdic.h"

L_VOID LDicomPrintSCU::SetTimeout(uTimeout)

L_UINT16 uTimeout;

/* timeout value */

Sets the timeout value for communicating with the Print SCP.

Parameter | Description
uTimeout | The Timeout value in seconds.

Returns

None

Comments

When a member function of the LDicomPrintSCU class sends a request to the Print SCP, it waits a specific amount of time for the Print SCP response. If this amount of time has elapsed before the response is received, the function will return with an error code of DICOM_ERROR_PRINTSCU_TIME_OUT. Use the function SetTimeout to set this timeout value. If the value specified is 0, the functions will wait for the Print SCP response indefinitely.

For the function LDicomPrintSCU::Associate, the connection must be established and the Print SCP response to the Association request must be received within the amount of time specified.

If this function is not used to set the timeout value, a default value of 30 seconds will be used.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::UpdateAnnotationBox

#include "ltdic.h"

L_INT LDicomPrintSCU::UpdateAnnotationBox(pszAnnotationBoxInstanceUID, uAnnotationPosition, pszTextString)

L_CHAR L_FAR * pszAnnotationBoxInstanceUID; | /* SOP Instance UID of the Annotation Box */
L_UINT16 uAnnotationPosition; | /* position of the Annotation Box in the parent Film Box */
L_CHAR L_FAR * pszTextString; | /* text string of the Annotation Box */

Requests the Print SCP to update the specified Basic Annotation Box SOP Instance.

Parameter | Description
pszAnnotationBoxInstanceUID | Character string that contains the SOP Instance UID of the Annotation Box to be updated. The function will return an error if this is NULL or if an empty string is specified. The function LDicomPrintSCU::GetAnnotationBoxInstanceUID returns the SOP Instance UID of a particular Annotation Box.
uAnnotationPosition | Specifies the Value of the Attribute Annotation Position (2030,0010).
pszTextString | Character string that contains the Value of the Attribute Text String (2030,0020). If this is set to NULL, the Attribute will not be included in the request to the Print SCP and hence will not be updated.

Returns

0 | The specified Basic Annotation Box SOP Instance was updated successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Basic Annotation Box SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

When the Print SCP is requested to create a Film Box, and if an Annotation Display Format ID is specified, the Print SCP will also create one or more Annotation Boxes, based on the Annotation Display Format ID. This will happen only if the Basic Annotation Box SOP Class is supported on the Association. This function updates a particular Annotation Box. The Annotation Box specified (by the SOP Instance UID) must belong to the current (last created) Film Box.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function UpdateAnnotationBox is 0, then the Annotation Box was updated successfully, with either a Success or Warning status code in the response of the Print SCP.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetAnnotationBoxesCount, LDicomPrintSCU::GetAnnotationBoxInstanceUID, LDicomPrintSCU::FreeAnnotationBoxesInstanceUIDs, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::UpdateFilmBox

#include "ltdic.h"

L_INT LDicomPrintSCU::UpdateFilmBox(pParameters, pszRefPresLUTInstanceUID = NULL)

const pFILMBOXPARAMETERS pParameters; | /* Film Box parameters to be updated */
L_CHAR L_FAR * pszRefPresLUTInstanceUID; | /* Referenced Presentation LUT */

Requests the Print SCP to update the current Basic Film Box SOP Instance.

Parameter | Description
pParameters | Pointer to a FILMBOXPARAMETERS structure that specifies the Film Box parameters to be updated. This can be set to NULL if none of the structure parameters are to be updated; in this case, the request will be sent to the Print SCP without specifying any of them.
pszRefPresLUTInstanceUID | Character string that contains the SOP Instance UID of a previously created Presentation LUT SOP Instance to be referenced by the Film Box. This can be set to NULL if the reference is not to be updated; in this case, the corresponding Attribute will not be included in the request to the Print SCP. If an empty string is specified and the Film Box already references a Presentation LUT, then the update will remove that reference.
 | The function will return an error if both parameters are set to NULL.

Returns

0 | The Basic Film Box SOP Instance was updated successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Box currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function UpdateFilmBox is 0, then the Film Box was updated successfully, with either a Success or Warning status code in the response of the Print SCP.

The parameter pParameters points to a FILMBOXPARAMETERS structure that specifies the Film Box parameters to be updated. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP and hence will not be updated. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request and hence will not be updated. Notice that not all the parameters that can be specified when creating the Film Box can be updated; the function will ignore the following members of the structure:

pszImageDisplayFormat

pszFilmOrientation

pszFilmSizeID

pszAnnotationDisplayFormatID

pszRequestedResolutionID

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::UpdateFilmSession

#include "ltdic.h"

L_INT LDicomPrintSCU::UpdateFilmSession(pParameters)

const pFILMSESSIONPARAMETERS pParameters;

/* Film Session parameters to be updated */

Requests the Print SCP to update the current Basic Film Session SOP Instance.

Parameter | Description
pParameters | Pointer to a FILMSESSIONPARAMETERS structure that specifies the Film Session parameters to be updated. The function will return an error if this is set to NULL.

Returns

0 | The Basic Film Session SOP Instance was updated successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

There must be a Film Session currently created before using this function.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function UpdateFilmSession is 0, then the Film Session was updated successfully, with either a Success or Warning status code in the response of the Print SCP.

The parameter pParameters points to a FILMSESSIONPARAMETERS structure that specifies the Film Session parameters to be updated. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP and hence will not be updated. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request and hence will not be updated. The function will return an error if pParameters is set to NULL or if all string members are set to NULL and all numeric members (that specify Attributes) are negative.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomPrintSCU::UpdateImageBox

#include "ltdic.h"

L_INT LDicomPrintSCU::UpdateImageBox(pszImageBoxInstanceUID, pImage, pParameters, pszRefImageOverlayBoxInstanceUID = NULL, pszRefPresLUTInstanceUID = NULL)

L_CHAR L_FAR * pszImageBoxInstanceUID; | /* SOP Instance UID of the Image Box */
LDicomDS* pImage; | /* image to be printed in the Image Box */
const pIMAGEBOXPARAMETERS pParameters; | /* image Box parameters to be updated */
L_CHAR L_FAR * pszRefImageOverlayBoxInstanceUID; | /* Referenced Image Overlay Box */
L_CHAR L_FAR * pszRefPresLUTInstanceUID; | /* Referenced Presentation LUT */

Requests the Print SCP to update the specified Basic Grayscale/Color Image Box SOP Instance.

Parameter | Description
pszImageBoxInstanceUID | Character string that contains the SOP Instance UID of the Image Box to be updated. The function will return an error if this is NULL or if an empty string is specified. The function LDicomPrintSCU::GetImageBoxInstanceUID returns the SOP Instance UID of a particular Image Box.
pImage | Pointer to an LDicomDS object that contains the image to be printed in the specified Image Box. If this is set to NULL, the Print SCP will be instructed to erase the image (if there is one) in the specified Image Box.
pParameters | Pointer to an IMAGEBOXPARAMETERS structure that specifies the Image Box parameters to be updated. The function will return an error if this parameter is set to NULL or if the Image Position specified is less than 1.
pszRefImageOverlayBoxInstanceUID | Character string that contains the SOP Instance UID of a previously created Basic Print Image Overlay Box SOP Instance to be referenced by the Image Box. This can be set to NULL if the reference is not to be updated; in this case, the corresponding Attribute will not be included in the request to the Print SCP. If an empty string is specified and the Image Box already references an Image Overlay Box, then the update will remove that reference. Refer to the function LDicomPrintSCU::CreateOverlayBox for creating Image Overlay Boxes.
pszRefPresLUTInstanceUID | Character string that contains the SOP Instance UID of a previously created Presentation LUT SOP Instance to be referenced by the Image Box. This can be set to NULL if the reference is not to be updated; in this case, the corresponding Attribute will not be included in the request to the Print SCP. If an empty string is specified and the Image Box already references a Presentation LUT, then the update will remove that reference. Since only a Grayscale Image Box may reference a Presentation LUT, the function ignores this parameter for Color Image Boxes. Refer to the function LDicomPrintSCU::CreatePresentationLUT for creating Presentation LUTs.

Returns

0 | The specified Basic Grayscale/Color Image Box SOP Instance was updated successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | Neither the Basic Grayscale Print Management Meta SOP Class nor the Basic Color Print Management Meta SOP Class is supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

When the Print SCP is requested to create a Film Box, it will also create one or more Image Boxes, based on the Image Display Format. This function updates a particular Image Box. The Image Box specified (by the SOP Instance UID) must belong to the current (last created) Film Box.

The type of the Image Boxes created by the Print SCP (Grayscale or Color) depends on the Meta SOP Class of the Film Session created at first. Refer to the function LDicomPrintSCU::CreateFilmSession for more information.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function UpdateImageBox is 0, then the Image Box was updated successfully, with either a Success or Warning status code in the response of the Print SCP.

The parameter pParameters points to an IMAGEBOXPARAMETERS structure that specifies the Image Box parameters to be updated. In this structure, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP and hence will not be updated. Similarly, if a numeric member (that specifies an Attribute) is negative, the corresponding Attribute will not be included in the request and hence will not be updated. Notice that since the Attributes Min Density, Max Density, and Configuration Information are defined only for Grayscale Image Boxes, the function will ignore the following structure members for Color Image Boxes:

nMinDensity

nMaxDensity

pszConfigurationInformation

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateFilmSession, LDicomPrintSCU::CreateFilmBox, LDicomPrintSCU::GetImageBoxesCount, LDicomPrintSCU::GetImageBoxInstanceUID, LDicomPrintSCU::GetDefaultImageBoxParameters, LDicomPrintSCU::FreeImageBoxesInstanceUIDs, LDicomPrintSCU::GetLastOperationStatus, LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::CreatePresentationLUT
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

L_VOID PerformBasicPM()
{
LDicomPrintSCU PrintSCU;
//CPrintSCU PrintSCU;

PrintSCU.SetTimeout (60); // 60 seconds

L_CHAR szMsg[32];

// Establish the Association
L_INT iRet = PrintSCU.Associate ("10.0.2.20", 7104, "PrintSCP", "PrintSCU",
PRINTSCU_BASIC_GRAYSCALE_PM_META_SOP_CLASS |
PRINTSCU_BASIC_COLOR_PM_META_SOP_CLASS |
PRINTSCU_BASIC_ANNOTATION_BOX_SOP_CLASS |
PRINTSCU_BASIC_PRINT_IMAGE_OVERLAY_BOX_SOP_CLASS |
PRINTSCU_PRESENTATION_LUT_SOP_CLASS |
PRINTSCU_PRINT_JOB_SOP_CLASS |
PRINTSCU_PRINTER_CONFIGURATION_RETRIEVAL_SOP_CLASS);
if (iRet == DICOM_ERROR_PRINTSCU_ASSOCIATE_RQ_REJECTED)
{
L_UCHAR nSource, nReason;
PrintSCU.GetAssociateRejectInfo (NULL, &nSource, &nReason);

wsprintf(szMsg, "Source = %i, Reason = %i", nSource, nReason);
MessageBox(NULL, szMsg, "Association Request was Rejected", MB_OK);
return;
}
else if (iRet != DICOM_SUCCESS)
{
wsprintf(szMsg, "Error code: %i", iRet);
MessageBox(NULL, szMsg, "Failed to Establish the Association", MB_OK);
return;
}

// Display some printer info
//GetPrinterInfo(PrintSCU);

// Display some printer configuration info
//GetPrinterConfigInfo(PrintSCU);

FILMSESSIONPARAMETERS FilmSessionParams;

// Create a Film Session
PrintSCU.GetDefaultFilmSessionParameters (&FilmSessionParams,
sizeof(FILMSESSIONPARAMETERS));
FilmSessionParams.nNumberOfCopies = 1;
PrintSCU.CreateFilmSession (&FilmSessionParams);
MessageBox(NULL, PrintSCU.GetFilmSessionInstanceUID (),
"Film Session SOP Instance UID", MB_OK);

// Update the Film Session to specify a "MED" Print Priority
PrintSCU.GetDefaultFilmSessionParameters (&FilmSessionParams,
sizeof(FILMSESSIONPARAMETERS));
FilmSessionParams.pszPrintPriority = "MED";
PrintSCU.UpdateFilmSession (&FilmSessionParams);

FILMBOXPARAMETERS FilmBoxParams;
PrintSCU.GetDefaultFilmBoxParameters (&FilmBoxParams,
sizeof(FILMBOXPARAMETERS));

if (PrintSCU.IsClassSupported (PRINTSCU_BASIC_ANNOTATION_BOX_SOP_CLASS))
{
FilmBoxParams.pszAnnotationDisplayFormatID = "SomeID";
}

// Create a Film Box
PrintSCU.CreateFilmBox (&FilmBoxParams);
MessageBox(NULL, PrintSCU.GetFilmBoxInstanceUID (),
"Film Box SOP Instance UID", MB_OK);

L_PCSTR pszPresLUTInstanceUID = NULL;

// Create a Presentation LUT
if (PrintSCU.IsClassSupported (PRINTSCU_PRESENTATION_LUT_SOP_CLASS))
{
LDicomDS PresLUT;
if (PresLUT.LoadDS("C:\\PresLUT.dic", DS_LOAD_CLOSE) == 0)
{
PrintSCU.CreatePresentationLUT (&PresLUT);

pszPresLUTInstanceUID = PrintSCU.GetPresentationLUTInstanceUID ();
MessageBox(NULL, pszPresLUTInstanceUID,
"Pres LUT SOP Instance UID", MB_OK);
}
}
if (pszPresLUTInstanceUID)
{
// Update the Film Box to reference the Presentation LUT we just created
PrintSCU.UpdateFilmBox (NULL, pszPresLUTInstanceUID);
}

L_PCSTR pszOverlayBoxInstanceUID = NULL;

// Create an Image Overlay Box
if (PrintSCU.IsClassSupported (
PRINTSCU_BASIC_PRINT_IMAGE_OVERLAY_BOX_SOP_CLASS))
{
LDicomDS Overlay;
if (Overlay.LoadDS("C:\\Overlay.dic", DS_LOAD_CLOSE) == 0)
{
OVERLAYBOXPARAMETERS OverlayParams;
PrintSCU.GetDefaultOverlayBoxParameters (&OverlayParams,
sizeof(OVERLAYBOXPARAMETERS));

PrintSCU.CreateOverlayBox (&Overlay, &OverlayParams);

pszOverlayBoxInstanceUID = PrintSCU.GetOverlayBoxInstanceUID ();
MessageBox(NULL, pszOverlayBoxInstanceUID,
"Image Overlay Box SOP Instance UID", MB_OK);
}
}

// The image to be printed in the Image Box
LDicomDS Image;
Image.LoadDS ("C:\\Image.dic", DS_LOAD_CLOSE);

// Update the Image Box. Since the Image Display Format of the Film Box was
// set to "STANDARD\1,1", then we are supposed to have one Image Box created
// by the Print SCP.
if (PrintSCU.GetImageBoxesCount ())
{
L_PCSTR pszImageBoxInstanceUID = PrintSCU.GetImageBoxInstanceUID (0);
MessageBox(NULL, pszImageBoxInstanceUID,
"Image Box SOP Instance UID", MB_OK);

IMAGEBOXPARAMETERS ImageBoxParams;
PrintSCU.GetDefaultImageBoxParameters(&ImageBoxParams,
sizeof(IMAGEBOXPARAMETERS));
ImageBoxParams.nImagePosition = 1;

PrintSCU.UpdateImageBox (pszImageBoxInstanceUID,
&Image,
&ImageBoxParams,
pszOverlayBoxInstanceUID);

// We don't need them any more
PrintSCU.FreeImageBoxesInstanceUIDs();
}

// Update the Annotation Boxes (if there are any)
L_UINT32 uAnnBoxesCount = PrintSCU.GetAnnotationBoxesCount ();
for (L_UINT32 i = 0; i < uAnnBoxesCount; i++)
{
PrintSCU.UpdateAnnotationBox (PrintSCU.GetAnnotationBoxInstanceUID (i),
L_UINT16(i + 1), "Some Text");
}
PrintSCU.FreeAnnotationBoxesInstanceUIDs (); // We don't need them any more

// Change the Overlay Origin of the Image Overlay Box referenced by the
// Image Box
if (pszOverlayBoxInstanceUID)
{
OVERLAYBOXPARAMETERS OverlayParams;
PrintSCU.GetDefaultOverlayBoxParameters (&OverlayParams,
sizeof(OVERLAYBOXPARAMETERS));

OverlayParams.nOverlayOriginRow = 10;
OverlayParams.nOverlayOriginColumn = 10;

PrintSCU.UpdateOverlayBox (pszOverlayBoxInstanceUID,
NULL, &OverlayParams, TRUE);
}

// Print the Film Session (or the Film Box; there is no difference since we
// have a single Film Box in the Film Session)
if (TRUE)
{
PrintSCU.PrintFilmSession ();
}
else
{
PrintSCU.PrintFilmBox ();
}

// Display some info about the Print Job
if (PrintSCU.IsClassSupported (PRINTSCU_PRINT_JOB_SOP_CLASS))
{
//GetPrintJobInfo(PrintSCU, PrintSCU.GetPrintJobInstanceUID ());
}

// Delete the Film Box (anyway, it would be deleted when the Film Session
// is deleted)
PrintSCU.DeleteFilmBox ();

// Delete the Film Session
PrintSCU.DeleteFilmSession ();

// Delete the Presentation LUT
if (pszPresLUTInstanceUID)
{
PrintSCU.DeletePresentationLUT (pszPresLUTInstanceUID);
}

// Delete the Image Overlay Box
if (pszOverlayBoxInstanceUID)
{
PrintSCU.DeleteOverlayBox (pszOverlayBoxInstanceUID);
}

// Release the Association and close the connection
PrintSCU.Release();
}


LDicomPrintSCU::UpdateOverlayBox

#include "ltdic.h"

L_INT LDicomPrintSCU::UpdateOverlayBox(pszOverlayBoxInstanceUID, pOverlay, pParameters, bUpdateOverlayOrigin)

L_CHAR L_FAR * pszOverlayBoxInstanceUID; | /* SOP Instance UID of the Image Overlay Box */
LDicomDS* pOverlay; | /* Image Overlay */
const pOVERLAYBOXPARAMETERS pParameters; | /* Image Overlay Box parameters to be updated */
L_BOOL bUpdateOverlayOrigin; | /* whether to update the Overlay Origin */

Requests the Print SCP to update the specified Basic Print Image Overlay Box SOP Instance.

Parameter | Description
pszOverlayBoxInstanceUID | Character string that contains the SOP Instance UID of the Image Overlay Box to be updated. The function will return an error if this is NULL or if an empty string is specified.
pOverlay | Pointer to an LDicomDS object that contains the Overlay data for the specified Image Overlay Box. The object is assumed to contain the Overlay Pixel Data Sequence (2040,0020); the function will return an error if this Sequence is not present. This parameter can be set to NULL if the Overlay data is not to be updated.
pParameters | Pointer to an OVERLAYBOXPARAMETERS structure that specifies the Image Overlay Box parameters to be updated. This can be set to NULL if none of the parameters is to be updated.
 | The function will return an error if both pOverlay and pParameters are set to NULL.
bUpdateOverlayOrigin | Specifies whether to update the Overlay Origin (6000,0050) as determined by the members nOverlayOriginRow and nOverlayOriginColumn of the structure specified by pParameters (these members can be negative). The Overlay Origin will be updated if bUpdateOverlayOrigin is TRUE; otherwise, it will not be updated and the Attribute will not be included in the request to the Print SCP. If pParameters is set to NULL, bUpdateOverlayOrigin will be ignored.

Returns

0 | The specified Basic Print Image Overlay Box SOP Instance was updated successfully.
DICOM_ERROR_PRINTSCU_FAILURE_STATUS | The response of the Print SCP specifies a Failure status code.
DICOM_ERROR_PRINTSCU_CLASS_NOT_SUPPORTED | The Basic Print Image Overlay Box SOP Class is not supported on the Association.
> 0 | An error occurred. Refer to Return Codes.

Comments

The Image Overlay Box specified (by the SOP Instance UID) must be an exiting one. Refer to the function LDicomPrintSCU::CreateOverlayBox for creating Image Overlay Boxes.

The function will not return until it receives the response of the Print SCP, or an error occurs. The function LDicomPrintSCU::GetLastOperationStatus can be used to obtain the status code specified in the response of the Print SCP. When the return value of the function UpdateOverlayBox is 0, then the specified Image Overlay Box was updated successfully, with either a Success or Warning status code in the response of the Print SCP.

In the OVERLAYBOXPARAMETERS structure specified by the parameter pParameters, if a string member is NULL, then the corresponding Attribute will not be included in the request to the Print SCP and hence will not be updated. Also, if the member nMagnifyToNumberOfColumns is negative, the corresponding Attribute will not be included in the request and hence will not be updated.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomPrintSCU::CreateOverlayBox, LDicomPrintSCU::GetOverlayBoxInstanceUID, LDicomPrintSCU::DeleteOverlayBox, LDicomPrintSCU::GetDefaultOverlayBoxParameters, LDicomPrintSCU::GetLastOperationStatus
Topics: | Print Management SCU
 | DICOM Print Management Service Class User: Functions

Example

For an example, refer to LDicomPrintSCU::UpdateImageBox.


LDicomTag::Default

#include "Ltdic.h"

static L_VOID LDicomTag::Default(L_VOID)

Resets the Data Element Tag Table to the default values.

Returns

None.

Comments

To see the default values for the Data Element Tag Table, refer to the Default Data Element Tag Table.

If you remove the contents of the table using LDicomTag::Reset, you can reset the table to the default values by calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::Insert, LDicomTag::Delete, LDicomTag::Reset
Topics: | Working with Tags

Example

/* This example restores the default Tag table */

L_VOID Test()
{
LDicomTag::Default();
}


LDicomTag::Delete

#include "Ltdic.h"

static pDICOMTAG LDicomTag::Delete(pTag)

pDICOMTAG pTag;

/* pointer to a DICOMTAG structure */

Deletes the specified item from the Data Element Tag Table.

Parameter | Description
pTag | Pointer to a DICOMTAG structure that contains the item to be deleted.

Returns

!NULL | A pointer to an adjacent item. If there is an item following the item being deleted, the returned pointer will point to this item. If the item being deleted does not have an item following it, but has an item preceding it, the pointer points to the item immediately preceding the deleted item.
NULL | The table is empty.

Comments

You can remove all items from the table using LDicomTag::Reset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::Reset, LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::Find, LDicomTag::FindIndex, LDicomTag::Insert
Topics: | Working with Tags

Example

/* This example removes an item from the Tag table */

L_VOID Test()
{
pDICOMTAG pTag;

pTag = LDicomTag::Find(TAG_FILE_META_INFORMATION_VERSION);
if (pTag != NULL)
{
LDicomTag::Delete(pTag);
}
}


LDicomTag::Exists

#include "Ltdic.h"

L_BOOL LDicomTag::Exists (pTag)

pDICOMTAG pTag;

/* pointer to a DICOMTAG structure */

Determines whether the pointer to the structure is valid.

Parameter | Description
pTag | Pointer to a DICOMTAG structure.

Returns

TRUE | pTag is a valid pointer.
FALSE | pTag is NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::Find, LDicomTag::FindIndex
Topics: | Working with Tags

Example

/* This example checks a Tag pointer */

L_VOID Test()
{
pDICOMTAG pTag;

pTag = LDicomTag::Find(TAG_PIXEL_DATA);

if (LDicomTag::Exists(pTag) == FALSE)
{
MessageBox(NULL, "The Tag does not exist", "Notice", MB_OK);
}
}


LDicomTag::Find

#include "Ltdic.h"

static pDICOMTAG LDicomTag::Find(nCode)

L_UINT32 nCode;

/* a tag */

Returns a pointer to a structure that contains the item with the specified tag.

Parameter | Description
nCode | A tag. A pointer to the item in the Data Element Tag Table that has this tag will be returned.

Returns

!NULL | A pointer to a DICOMTAG structure that contains the item with the specified tag.
NULL | There is not an item with the specified tag.

Comments

As an example, if you call this function with nCode set to TAG_STUDY_DATE, and the Data Element Tag Table filled with the default values, the DICOMTAG structure pointed to by the returned pointer will contain TAG_STUDY_DATE, 0x00080020, 0xFFFFFFFF, "Study Date", VR_DA, 1, 1, and 1.

To see the default values for the Data Element Tag Table, refer to the Default Data Element Tag Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::FindIndex
Topics: | Working with Tags

Example

For an example, refer to LDicomTag::Delete or LDicomTag::SetName.


LDicomTag::FindIndex

#include "Ltdic.h"

static pDICOMTAG LDicomTag::FindIndex(nIndex)

L_UINT32 nIndex;

/* an index into the Data Element Tag Table */

Returns a pointer to a structure that contains the item located at the specified index in the Data Element Tag Table.

Parameter | Description
nIndex | An index into the Data Element Tag Table. This index is zero-based.

Returns

!NULL | A pointer to a DICOMTAG structure that contains the item located at the specified index in the Data Element Tag Table.
NULL | There is not an item at the specified index.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::Find
Topics: | Working with Tags

Example

For an example, refer to LDicomTag::GetCount.


LDicomTag::GetCount

#include "Ltdic.h"

static L_UINT32 LDicomTag::GetCount(L_VOID)

Returns the number of items in the Data Element Tag Table.

Returns

The number of items in the Data Element Tag Table.

Comments

The following functions will help you navigate the Data Element Tag Table:

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetNext

LDicomTag::GetPrev

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetNext, LDicomTag::GetPrev
Topics: | Working with Tags

Example

/* This example displays in a list-box control all items from the Tag table */

L_VOID Test(CListBox *pDlg)
{
L_UINT32 i;
L_UINT32 nCount;
pDICOMTAG pTag;

nCount = LDicomTag::GetCount();

for (i = 0; i < nCount; i++)
{
pTag = LDicomTag::FindIndex(i);
if (pTag != NULL)
{
pDlg->AddString(pTag->pszName);
}
}
}


LDicomTag::GetFirst

#include "Ltdic.h"

static pDICOMTAG LDicomTag::GetFirst(L_VOID)

Returns a pointer to the first item in the Data Element Tag Table.

Returns

!NULL | A pointer to a DICOMTAG structure that contains the first item in the Data Element Tag Table.
NULL | The table is empty.

Comments

The following functions will also help you navigate the Data Element Tag Table:

LDicomTag::GetLast

LDicomTag::GetPrev

LDicomTag::GetNext

To determine the number of entries in the Data Element Tag Table, use LDicomTag::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::GetCount
Topics: | Working with Tags

Example

/* This example displays in a list-box control all items from the Tag table */

L_VOID Test(CListBox *pDlg)
{
pDICOMTAG pTag;

pTag = LDicomTag::GetFirst();
while (pTag != NULL)
{
pDlg->AddString(pTag->pszName);

pTag = LDicomTag::GetNext(pTag);
}
}


LDicomTag::GetLast

#include "Ltdic.h"

static pDICOMTAG LDicomTag::GetLast(L_VOID)

Returns a pointer to the last item in the Data Element Tag Table.

Returns

!NULL | A pointer to a DICOMTAG structure that contains the last item in the Data Element Tag Table.
NULL | The table is empty.

Comments

The following functions will also help you navigate the Data Element Tag Table:

LDicomTag::GetFirst

LDicomTag::GetPrev

LDicomTag::GetNext

To determine the number of entries in the Data Element Tag Table, use LDicomTag::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::GetCount
Topics: | Working with Tags

Example

/* This example displays in a list-box control all items from the Tag table */

L_VOID Test(CListBox *pDlg)
{
pDICOMTAG pTag;

pTag = LDicomTag::GetLast();
while (pTag != NULL)
{
pDlg->AddString(pTag->pszName);

pTag = LDicomTag::GetPrev(pTag);
}
}


LDicomTag::GetNext

#include "Ltdic.h"

static pDICOMTAG LDicomTag::GetNext(pTag)

pDICOMTAG pTag;

/* pointer to a DICOMTAG structure */

Returns a pointer to the item in the Data Element Tag Table that immediately follows the specified item.

Parameter | Description
pTag | Pointer to a DICOMTAG structure that contains an item in the Data Element Tag Table. A pointer to the item in the table that immediately follows this item will be returned.

Returns

!NULL | A pointer to a DICOMTAG structure that contains the item in the Data Element Tag Table that immediately follows the item specified in pTag.
NULL | There is not an item following pTag. (pTag is the last item in the table.)

Comments

The following functions will also help you navigate the Data Element Tag Table:

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetPrev

To determine the number of entries in the Data Element Tag Table, use LDicomTag::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetCount
Topics: | Working with Tags

Example

For an example, refer to LDicomTag::GetFirst.


LDicomTag::GetPrev

#include "Ltdic.h"

static pDICOMTAG LDicomTag::GetPrev(pTag)

pDICOMTAG pTag;

/* pointer to a DICOMTAG structure */

Returns a pointer to the item in the Data Element Tag Table that immediately precedes the specified item.

Parameter | Description
pTag | Pointer to a DICOMTAGstructure that contains an item in the Data Element Tag Table. A pointer to the item in the table that immediately precedes this item will be returned.

Returns

!NULL | A pointer to a DICOMTAGstructure that contains the item in the Data Element Tag Table that immediately precedes the item specified in pTag.
NULL | There is not an item preceding pTag. (pTag is the first item in the table.)

Comments

The following functions will also help you navigate the Data Element Tag Table:

LDicomTag::GetFirst

LDicomTag::GetLast

LDicomTag::GetNext

To determine the number of entries in the Data Element Tag Table, use LDicomTag::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetNext, LDicomTag::GetCount
Topics: | Working with Tags

Example

For an example, refer to LDicomTag::GetLast.


LDicomTag::Insert

#include "Ltdic.h"

static pDICOMTAG LDicomTag::Insert(nCode, nMask, pszName, nVR, nMinVM, nMaxVM, nDivideVM)

L_UINT32 nCode; | /* code */
L_UINT32 nMask; | /* masking value */
L_CHAR * pszName; | /* name of the tag */
L_UINT16 nVR; | /* value representation */
L_UINT32 nMinVM; | /* minimum value multiplicity */
L_UINT32 nMaxVM; | /* maximum value multiplicity */
L_UINT32 nDivideVM; | /* value used to divide the value multiplicity */

Inserts a new item in the Data Element Tag Table.

Parameter | Description
nCode | Code that indicates the tag. For a list of default values, refer to Data Element Tag Constants.
nMask | Masking value. Masking allows you to insert multiple elements in the same entry in the table.
pszName | Character string that contains the name of the tag. To see the default values for the Tag Names, refer to the Default Data Element Tag Table.
nVR | Value representation code that indicates the type of value stored in the data element. For a list of default values supported by DICOM, refer to Value Representation Constants.
nMinVM | Value that indicates the minimum number of values that may be stored in the Value Field of the Data Element.
nMaxVM | Value that indicates the maximum number of values that may be stored in the Value Field of the Data Element.
nDivideVM | Value used to divide the value multiplicity. When multiple values are stored in the value field of a data element, the number of values present must be evenly divisible by nDivideVM. For most items nDivideVM will be 1. However, if the values stored in the value field are RGB triplets, for example, you would have to store three values for each triplet. You could store 12 values, since 12 values would be 4 triplets, however, you could not store 13 values. In this case nDivideVM would be 3.

Returns

!NULL | A pointer to a DICOMVR structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

All items are inserted at the bottom of the table.

To see the default values for the Data Element Tag Table, refer to the Default Data Element Tag Table.

For more information on the DICOM file format, refer to An Overview of Dicom or the DICOM Spec.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::Delete, LDicomTag::Reset, LDicomTag::Default
Topics: | Working with Tags

Example

/* This example inserts 2 new items in the Tag table */

L_VOID Test()
{
LDicomTag::Insert(0x12345678, 0xFFFFFFFF, "New XXX Tag", VR_US, 1, 1, 1);
LDicomTag::Insert(0x87654321, 0xFFFFFFFF, "New YYY Tag", VR_LO, 1, 1, 1);
}


LDicomTag::Reset

#include "Ltdic.h"

static L_VOID LDicomTag::Reset(L_VOID)

Removes all items from the Data Element Tag Table.

Returns

None.

Comments

To reset the Data Element Tag Table to the default values, use LDicomTag::Default.

To see the default values for the Data Element Tag Table, refer to the Default Data Element Tag Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::Default, LDicomTag::Delete
Topics: | Working with Tags

Example

/* This example removes all items from the Tag table */

L_VOID Test()
{
LDicomTag::Reset();
}


LDicomTag::SetName

#include "Ltdic.h"

static L_BOOL LDicomTag::SetName(pTag, pszName)

pDICOMTAG pTag; | /* pointer to a DICOMTAG structure */
L_CHAR * pszName; | /* character string */

Sets the name of the specified item in the Data Element Tag Table.

Parameter | Description
pTag | Pointer to a structure that contains an item in the Data Element Tag Table. The name of this item will be set using the string contained in pszName.
pszName | Character string that contains the name to be set.

Returns

TRUE | The name was successfully set.
FALSE | Not enough memory.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomTag::GetFirst, LDicomTag::GetLast, LDicomTag::GetPrev, LDicomTag::GetNext, LDicomTag::Find, LDicomTag::FindIndex
Topics: | Working with Tags

Example

/* This example changes the name of an item in the Tag table */

L_VOID Test()
{
pDICOMTAG pTag;

pTag = LDicomTag::Find(TAG_MEDIA_STORAGE_SOP_CLASS_UID);
if (pTag != NULL)
{
LDicomTag::SetName(pTag, "New name");
}
}


LDicomUID::Default

#include "Ltdic.h"

static L_VOID LDicomUID::Default(L_VOID)

Resets the UID Table to the default values.

Returns

None.

Comments

To see the default values for the UID Table, refer to the Default UID Table.

If you remove the contents of the table using LDicomUID::Reset, you can reset the table to the default values by calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::Insert, LDicomUID::Delete, LDicomUID::Reset
Topics: | Working with Unique Identifiers

Example

/* This example restores the default UID table */

L_VOID Test()
{
LDicomUID::Default();
}


LDicomUID::Delete

#include "Ltdic.h"

static pDICOMUID LDicomUID::Delete(pUID)

pDICOMUID pUID;

/* pointer to a DICOMUID structure */

Deletes the specified item from the UID Table.

Parameter | Description
pUID | Pointer to a DICOMUID structure that contains the item to be deleted.

Returns

!NULL | A pointer to an adjacent item. If there is an item following the item being deleted, the returned pointer will point to this item. If the item being deleted does not have an item following it, but has an item preceding it, the pointer points to the item immediately preceding the deleted item.
NULL | The table is empty.

Comments

You can remove all items from the table using LDicomUID::Reset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::Reset, LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::Find, LDicomUID::FindIndex, LDicomUID::Insert
Topics: | Working with Unique Identifiers

Example

/* This example removes an item from the UID table */

L_VOID Test()
{
pDICOMUID pUID;

pUID = LDicomUID::Find("1.2.840.10008.1.1");
if (pUID != NULL)
{
LDicomUID::Delete(pUID);
}
}


LDicomUID::Exists

#include "Ltdic.h"

L_BOOL LDicomUID::Exists (pUID)

pDICOMUID pUID;

/* pointer to a DICOMUID structure */

Determines whether the pointer to the structure is valid.

Parameter | Description
pUID | Pointer to a DICOMUID structure.

Returns

TRUE | pUID is a valid pointer.
FALSE | pUID is NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::Find, LDicomUID::FindIndex
Topics: | Working with Unique Identifiers

Example

/* This example checks if an UID pointer */

L_VOID Test()
{
pDICOMUID pUID;

pUID = LDicomUID::Find("1.2.840.10008.1.1");

if (LDicomUID::Exists(pUID) == FALSE)
{
MessageBox(NULL, "The UID does not exist", "Notice", MB_OK);
}
}


LDicomUID::Find

#include "Ltdic.h"

static pDICOMUID LDicomUID::Find(pszCode)

L_CHAR * pszCode;

/* UID */

Returns a pointer to a structure that contains the item with the specified UID.

Parameter | Description
pszCode | Character string that contains a UID. A pointer to the item in the UID Table that has this UID will be returned.

Returns

!NULL | A pointer to a DICOMUID structure that contains the item with the specified UID.
NULL | There is not an item with the specified UID.

Comments

As an example, if you call this function with pszCode set to "1.2.840.10008.1.1", and the UID Table filled with the default values, the DICOMUID structure pointed to by the returned pointer will contain "1.2.840.10008.1.1" and "Verification SOP Class".

To see the default values for the UID Table, refer to the Default UID Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::FindIndex
Topics: | Working with Unique Identifiers

Example

For an example, refer to LDicomUID::Delete or LDicomUID::SetName.


LDicomUID::FindIndex

#include "Ltdic.h"

static pDICOMUID LDicomUID::FindIndex(nIndex)

L_UINT32 nIndex;

/* an index into the UID Table */

Returns a pointer to a structure that contains the item located at the specified index in the UID Table.

Parameter | Description
nIndex | An index into the UID Table. This index is zero-based.

Returns

!NULL | A pointer to a DICOMUID structure that contains the item located at the specified index in the UID Table.
NULL | There is not an item at the specified index.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::Find
Topics: | Working with Unique Identifiers

Example

For an example, refer to LDicomUID::GetCount.


LDicomUID::GetCount

#include "Ltdic.h"

static L_UINT32 LDicomUID::GetCount(L_VOID)

Returns the number of items in the UID Table.

Returns

The number of items in the UID Table.

Comments

The following functions will help you navigate the UID Table:

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetNext

LDicomUID::GetPrev

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetNext, LDicomUID::GetPrev
Topics: | Working with Unique Identifiers

Example

/* This example displays in a list-box control all items from the UID table */

L_VOID Test(CListBox *pDlg)
{
L_UINT32 i;
L_UINT32 nCount;
pDICOMUID pUID;

nCount = LDicomUID::GetCount();

for (i = 0; i < nCount; i++)
{
pUID = LDicomUID::FindIndex(i);
if (pUID != NULL)
{
pDlg->AddString(pUID->pszName);
}
}
}


LDicomUID::GetFirst

#include "Ltdic.h"

static pDICOMUID LDicomUID::GetFirst(L_VOID)

Returns a pointer to the first item in the UID Table.

Returns

!NULL | A pointer to a DICOMUID structure that contains the first item in the UID Table.
NULL | The table is empty.

Comments

The following functions will also help you navigate the UID Table:

LDicomUID::GetLast

LDicomUID::GetPrev

LDicomUID::GetNext

To determine the number of entries in the UID Table, use LDicomUID::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::GetCount
Topics: | Working with Unique Identifiers

Example

/* This example displays in a list-box control all items from the UID table */

L_VOID Test(CListBox *pDlg)
{
pDICOMUID pUID;

pUID = LDicomUID::GetFirst();
while (pUID != NULL)
{
pDlg->AddString(pUID->pszName);

pUID = LDicomUID::GetNext(pUID);
}
}


LDicomUID::GetLast

#include "Ltdic.h"

static pDICOMUID LDicomUID::GetLast(L_VOID)

Returns a pointer to the last item in the UID Table.

Returns

!NULL | A pointer to a DICOMUID structure that contains the last item in the UID.
NULL | The table is empty.

Comments

The following functions will also help you navigate the UID Table:

LDicomUID::GetFirst

LDicomUID::GetPrev

LDicomUID::GetNext

To determine the number of entries in the UID Table, use LDicomUID::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::GetCount
Topics: | Working with Unique Identifiers

Example

/* This example displays in a list-box control all items from the UID table */

L_VOID Test(CListBox *pDlg)
{
pDICOMUID pUID;

pUID = LDicomUID::GetLast();
while (pUID != NULL)
{
pDlg->AddString(pUID->pszName);

pUID = LDicomUID::GetPrev(pUID);
}
}


LDicomUID::GetNext

#include "Ltdic.h"

static pDICOMUID LDicomUID::GetNext(pUID)

pDICOMUID pUID;

/* pointer to a DICOMUID structure */

Returns a pointer to the item in the UID Table that immediately follows the specified item.

Parameter | Description
pUID | Pointer to a DICOMUID structure that contains an item in the UID Table. A pointer to the item in the table that immediately follows this item will be returned.

Returns

!NULL | A pointer to a DICOMUID structure that contains the item in the UID Table that immediately follows the item specified in pUID.
NULL | There is not an item following pUID. (pUID is the last item in the table.)

Comments

The following functions will also help you navigate the UID Table:

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetPrev

To determine the number of entries in the UID Table, use LDicomUID::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetCount
Topics: | Working with Unique Identifiers

Example

For an example, refer to LDicomUID::GetFirst.


LDicomUID::GetPrev

#include "Ltdic.h"

static pDICOMUID LDicomUID::GetPrev(pUID)

pDICOMUID pUID;

/* pointer to a DICOMUID structure */

Returns a pointer to the item in the UID Table that immediately precedes the specified item.

Parameter | Description
pUID | Pointer to a DICOMUIDstructure that contains an item in the UID Table. A pointer to the item in the table that immediately precedes this item will be returned.

Returns

!NULL | A pointer to a DICOMUIDstructure that contains the item in the UID Table that immediately precedes the item specified in pUID.
NULL | There is not an item preceding pUID. (pUID is the first item in the table.)

Comments

The following functions will also help you navigate the UID Table:

LDicomUID::GetFirst

LDicomUID::GetLast

LDicomUID::GetNext

To determine the number of entries in the UID Table, use LDicomUID::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetNext, LDicomUID::GetCount
Topics: | Working with Unique Identifiers

Example

For an example, refer to LDicomUID::GetLast.


LDicomUID::Insert

#include "Ltdic.h"

static pDICOMUID LDicomUID::Insert(pszCode, pszName, nType)

L_CHAR * pszCode; | /* UID code */
L_CHAR * pszName; | /* name of the UID */
L_INT nType; | /* type of UID */

Inserts a new item in the UID Table.

Parameter | Description
pszCode | Unique identifier code. For a list of default values, refer to the UID Table.
pszName | The name of the unique identifier. For a list of default values, refer to the UID Table.
nType | Type of UID to insert. Possible values are:
 | Value | Meaning
 | UID_TYPE_OTHER | Unknown
 | UID_TYPE_TRANSFER1 | Transfer Syntax - Uncompressed Image
 | UID_TYPE_TRANSFER2 | Transfer Syntax - Compressed Image
 | UID_TYPE_CLASS | SOP Class
 | UID_TYPE_META_CLASS | Meta SOP Class
 | UID_TYPE_INSTANCE | SOP Instance
 | UID_TYPE_APPLICATION | Application Context Name

Returns

!NULL | A pointer to a DICOMUID structure containing the newly inserted item.
NULL | Not enough memory to insert the item.

Comments

Note: Inserted UID items will work within LEADTOOLS, however, in order for new UID values to work across countries, sites, equipment, etc. you must contact the National Electrical Manufacturers Association.

All items are inserted at the bottom of the table.

To see the default values for the UID Table, refer to the UID Table.

For more information on the DICOM file format, refer to An Overview of Dicom or the DICOM Spec.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::Delete, LDicomUID::Reset, LDicomUID::Default
Topics: | Working with Unique Identifiers

Example

/* This example inserts 2 new items in the UID table */

L_VOID Test()
{
LDicomUID::Insert("1.2.3.4.5", "New XXX UID", UID_TYPE_OTHER);
LDicomUID::Insert("6.7.8.9.0", "New YYY UID", UID_TYPE_OTHER);
}


LDicomUID::Reset

#include "Ltdic.h"

static L_VOID LDicomUID::Reset(L_VOID)

Removes all items from the UID Table.

Returns

None.

Comments

To reset the UID Table to the default values, use LDicomUID::Default.

To see the default values for the UID Table, refer to the Default UID Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::Default, LDicomUID::Delete
Topics: | Working with Unique Identifiers

Example

/* This example removes all items from the UID table */

L_VOID Test()
{
LDicomUID::Reset();
}


LDicomUID::SetName

#include "Ltdic.h"

static L_BOOL LDicomUID::SetName(pUID, pszName)

pDICOMUID pUID; | /* pointer to a DICOMUID structure */
L_CHAR * pszName; | /* character string */

Sets the name of the specified item in the UID Table.

Parameter | Description
pUID | Pointer to a structure that contains an item in the UID Table. The name of this item will be set using the string contained in pszName.
pszName | Character string that contains the name to be set.

Returns

TRUE | The name was successfully set.
FALSE | Not enough memory.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomUID::GetFirst, LDicomUID::GetLast, LDicomUID::GetPrev, LDicomUID::GetNext, LDicomUID::Find, LDicomUID::FindIndex
Topics: | Working with Unique Identifiers

Example

/* This example changes the name of an item in the UID table */

L_VOID Test()
{
pDICOMUID pUID;

pUID = LDicomUID::Find("1.2.840.10008.1.1");
if (pUID != NULL)
{
LDicomUID::SetName(pUID, "New name");
}
}


LDicomVR::Default

#include "Ltdic.h"

static L_VOID LDicomVR::Default(L_VOID)

Resets the Value Representation Table to the default values.

Returns

None.

Comments

To see the default values for the Value Representation Table, refer to the Default Value Representation Table.

If you remove the contents of the table using LDicomVR::Reset, you can reset the table to the default values by calling this function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::Insert, LDicomVR::Delete, LDicomVR::Reset
Topics: | Working with Value Representations

Example

/* This example restores the default VR table */

L_VOID Test()
{
LDicomVR::Default();
}


LDicomVR::Delete

#include "Ltdic.h"

static pDICOMVR LDicomVR::Delete(pVR)

pDICOMVR pVR;

/* pointer to a DICOMVR structure */

Deletes the specified item from the Value Representation Table.

Parameter | Description
pVR | Pointer to a DICOMVR structure that contains the item to be deleted.

Returns

!NULL | A pointer to an adjacent item. If there is an item following the item being deleted, the returned pointer will point to this item. If the item being deleted does not have an item following it, but has an item preceding it, the pointer points to the item immediately preceding the deleted item.
NULL | The table is empty.

Comments

You can remove all items from the table using LDicomVR::Reset.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::Reset, LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::Find, LDicomVR::FindIndex, LDicomVR::Insert
Topics: | Working with Value Representations

Example

/* This example removes an item from the VR table */

L_VOID Test()
{
pDICOMVR pVR;

pVR = LDicomVR::Find(VR_AE);
if (pVR != NULL)
{
LDicomVR::Delete(pVR);
}
}


LDicomVR::Exists

#include "Ltdic.h"

L_BOOL LDicomVR::Exists(pVR)

pDICOMVR pVR;

/* pointer to a DICOMVR structure */

Determines whether the pointer to the structure is valid.

Parameter | Description
pVR | Pointer to a DICOMVR structure.

Returns

TRUE | pVR is a valid pointer.
FALSE | pVR is NULL.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::Find, LDicomVR::FindIndex
Topics: | Working with Value Representations

Example

/* This example checks a VR pointer */

L_VOID Test()
{
pDICOMVR pVR;

pVR = LDicomVR::Find(VR_UL);

if (LDicomVR::Exists(pVR) == FALSE)
{
MessageBox(NULL, "The VR does not exist", "Notice", MB_OK);
}
}


LDicomVR::Find

#include "Ltdic.h"

static pDICOMVR LDicomVR::Find(nCode)

L_UINT16 nCode;

/* a value representation code*/

Returns a pointer to a structure that contains the item with the specified value representation code.

Parameter | Description
nCode | A value representation code. A pointer to the item in the Value Representation Table that has this value representation code will be returned.

Returns

!NULL | A pointer to a DICOMVR structure that contains the item with the specified value representation code.
NULL | There is not an item with the specified value representation code.

Comments

As an example, if you call this function with nCode set to VR_AE, and the Value Representation Table filled with the default values, the DICOMVR structure pointed to by the returned pointer will contain VR_AE, "Application Entity", 16, VR_STRING|VR_MAXIMUM, and 1.

To see the default values for the Value Representation Table, refer to the Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::FindIndex
Topics: | Working with Value Representations

Example

For an example, refer to LDicomVR::Delete or LDicomVR::SetName.


LDicomVR::FindIndex

#include "Ltdic.h"

static pDICOMVR LDicomVR::FindIndex(nIndex)

L_UINT32 nIndex;

/* an index into the Value Representation Table */

Returns a pointer to a structure that contains the item located at the specified index in the Value Representation Table.

Parameter | Description
nIndex | An index into the Value Representation Table. This index is zero-based.

Returns

!NULL | A pointer to a DICOMVR structure that contains the item located at the specified index in the Value Representation Table.
NULL | There is not an item at the specified index.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::Find
Topics: | Working with Value Representations

Example

For an example, refer to LDicomVR::GetCount.


LDicomVR::GetCount

#include "Ltdic.h"

static L_UINT32 LDicomVR::GetCount (L_VOID)

Returns the number of items in the Value Representation Table.

Returns

The number of items in the Value Representation Table.

Comments

The following functions will help you navigate the Value Representation Table:

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetNext

LDicomVR::GetPrev

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetNext, LDicomVR::GetPrev
Topics: | Working with Value Representations

Example

/* This example displays in a list-box control all items from the VR table */

L_VOID Test(CListBox *pDlg)
{
L_UINT32 i;
L_UINT32 nCount;
pDICOMVR pVR;

nCount = LDicomVR::GetCount();

for (i = 0; i < nCount; i++)
{
pVR = LDicomVR::FindIndex(i);
if (pVR != NULL)
{
pDlg->AddString(pVR->pszName);
}
}
}


LDicomVR::GetFirst

#include "Ltdic.h"

static pDICOMVR LDicomVR::GetFirst(L_VOID)

Returns a pointer to the first item in the Value Representation Table.

Returns

!NULL | A pointer to a DICOMVR structure that contains the first item in the Value Representation Table.
NULL | The table is empty.

Comments

The following functions will also help you navigate the Value Representation Table:

LDicomVR::GetLast

LDicomVR::GetPrev

LDicomVR::GetNext

To determine the number of entries in the Value Representation Table, use LDicomVR::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::GetCount
Topics: | Working with Value Representations

Example

/* This example displays in a list-box control all items from the VR table */

L_VOID Test(CListBox *pDlg)
{
pDICOMVR pVR;

pVR = LDicomVR::GetFirst();
while (pVR != NULL)
{
pDlg->AddString(pVR->pszName);

pVR = LDicomVR::GetNext(pVR);
}
}


LDicomVR::GetLast

#include "Ltdic.h"

static pDICOMVR LDicomVR::GetLast(L_VOID)

Returns a pointer to the last item in the Value Representation Table.

Returns

!NULL | A pointer to a DICOMVR structure that contains the last item in the Value Representation Table.
NULL | The table is empty.

Comments

The following functions will also help you navigate the Value Representation Table:

LDicomVR::GetFirst

LDicomVR::GetPrev

LDicomVR::GetNext

To determine the number of entries in the Value Representation Table, use LDicomVR::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::GetCount
Topics: | Working with Value Representations

Example

/* This example displays in a list-box control all items from the VR table */

L_VOID Test(CListBox *pDlg)
{
pDICOMVR pVR;

pVR = LDicomVR::GetLast();
while (pVR != NULL)
{
pDlg->AddString(pVR->pszName);

pVR = LDicomVR::GetPrev(pVR);
}
}


LDicomVR::GetNext

#include "Ltdic.h"

static pDICOMVR LDicomVR::GetNext(pVR)

pDICOMVR pVR;

/* pointer to a DICOMVR structure */

Returns a pointer to the item in the Value Representation Table that immediately follows the specified item.

Parameter | Description
pVR | Pointer to a DICOMVR structure that contains an item in the Value Representation Table. A pointer to the item in the table that immediately follows this item will be returned.

Returns

!NULL | A pointer to a DICOMVR structure that contains the item in the Value Representation Table that immediately follows the item specified in pVR.
NULL | There is not an item following pVR. (pVR is the last item in the table.)

Comments

The following functions will also help you navigate the Value Representation Table:

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetPrev

To determine the number of entries in the Value Representation Table, use LDicomVR::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetCount
Topics: | Working with Value Representations

Example

For an example, refer to LDicomVR::GetFirst.


LDicomVR::GetPrev

#include "Ltdic.h"

static pDICOMVR LDicomVR::GetPrev(pVR)

pDICOMVR pVR;

/* pointer to a DICOMVR structure */

Returns a pointer to the item in the Value Representation Table that immediately precedes the specified item.

Parameter | Description
pVR | Pointer to a DICOMVRstructure that contains an item in the Value Representation Table. A pointer to the item in the table that immediately precedes this item will be returned.

Returns

!NULL | A pointer to a DICOMVRstructure that contains the item in the Value Representation Table that immediately precedes the item specified in pVR.
NULL | There is not an item preceding pVR. (pVR is the first item in the table.)

Comments

The following functions will also help you navigate the Value Representation Table:

LDicomVR::GetFirst

LDicomVR::GetLast

LDicomVR::GetNext

To determine the number of entries in the Value Representation Table, use LDicomVR::GetCount.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetNext, LDicomVR::GetCount
Topics: | Working with Value Representations

Example

For an example, refer to LDicomVR::GetLast.


LDicomVR::Insert

#include "Ltdic.h"

static pDICOMVR LDicomVR::Insert(nCode, pszName, nLength, nRestrict, nUnitSize)

L_UINT16 nCode; | /* code */
L_CHAR * pszName; | /* name of the value representation */
L_UINT32 nLength; | /* length of the value to be stored */
L_UINT16 nRestrict; | /* restrictions on the length */
L_UINT16 nUnitSize; | /* size of the smallest item */

Inserts a new item in the Value Representation Table.

Parameter | Description
nCode | Code that indicates the type of value to be stored in the data element. For a list of existing values refer to Value Representation Constants.
pszName | Character string that contains the name of the value representation. For examples of Value Representation Names, refer to the Default Value Representation Table.
nLength | The length of the value to be stored in the data element.
nRestrict | Restrictions on the length. Possible values are:
 | Value | Meaning
 | VR_FIXED | [0x00] The length of the stored value is a fixed number of bytes.
 | VR_MAXIMUM | [0x01] nLength is the maximum number of bytes allowed.
 | VR_MAXIMUM_GROUP | [0x02] nLength is the maximum number of bytes allowed per component group
 | VR_ANY | [0x03] Any length is valid.
 | VR_NOT_APPLICABLE | [0x04] nLength is not applicable
 | VR_MAX | [0x05]
 | VR_BINARY | [0x0100] Binary value.
 | VR_STRING | [0x0200] String value (The character '\' is used as the delimiter between values for multiple data elements).
 | VR_TEXT | [0x0400] Text value. (Data elements with this VR cannot be multi-valued).
nUnitSize | The size of the smallest item to be stored in the value field of the data element.

Returns

!NULL | A pointer to a DICOMVR structure containing the newly inserted item.
NULL | Not enough memory to insert item.

Comments

All items are inserted at the bottom of the table.

To see the default values for the Value Representation Table, refer to the Default Value Representation Table.

When evaluating nLength, you must also consider the values in nRestrict. If nRestrict contains VR_FIXED, then nLength is a fixed value. Therefore, the data stored in the value Field of a data element would have that length and nLength and nUnitSize would be equal.

If nRestrict contains VR_MAXIMUM, nLength is the maximum length of data that can be stored in the Value Field of a Data Element. In this case, nUnitSize would contain the minimum length of data to be stored in the Value Field of a Data Element.

For example, in the Default Value Representation Table, value representation VR_AE has the following default values:

nLength | 16
nRestrict | VR_STRING|VR_MAXIMUM
nUnitSize | 1

Therefore, the Value Field of a Data Element that has a Value Representation of VR_AE can store between 1 and 16 bytes of string data.

For more information on the structure of the DICOM file format, refer to An Overview of Dicom or the DICOM Spec.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::Delete, LDicomVR::Reset, LDicomVR::Default
Topics: | Working with Value Representations

Example

/* This example inserts 2 new items in the VR table */

L_VOID Test()
{
LDicomVR::Insert(0x5858, "New XXX VR", 16, VR_STRING | VR_MAXIMUM, 1);
LDicomVR::Insert(0x5959, "New YYY VR", 4, VR_TEXT | VR_FIXED, 1);
}


LDicomVR::Reset

#include "Ltdic.h"

static L_VOID LDicomVR::Reset(L_VOID)

Removes all items from the Value Representation Table.

Returns

None.

Comments

To reset the Value Representation Table to the default values, use LDicomVR::Default.

To see the default values for the Value Representation Table, refer to the Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::Default, LDicomVR::Delete
Topics: | Working with Value Representations

Example

/* This example removes all items from the VR table */

L_VOID Test()
{
LDicomVR::Reset();
}


LDicomVR::SetName

#include "Ltdic.h"

static L_BOOL LDicomVR::SetName (pVR, pszName)

pDICOMVR pVR; | /* pointer to a DICOMVR structure */
L_CHAR * pszName; | /* character string */

Sets the name of the specified item in the Value Representation Table.

Parameter | Description
pVR | Pointer to a structure that contains an item in the Value Representation Table. The name of this item will be set using the string contained in pszName.
pszName | Character string that contains the name to be set.

Returns

TRUE | The name was successfully set.
FALSE | Not enough memory.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomVR::GetFirst, LDicomVR::GetLast, LDicomVR::GetPrev, LDicomVR::GetNext, LDicomVR::Find, LDicomVR::FindIndex
Topics: | Working with Value Representations

Example

/* This example changes the name of an item in the VR table */

L_VOID Test()
{
pDICOMVR pVR;

pVR = LDicomVR::Find(VR_AE);
if (pVR != NULL)
{
LDicomVR::SetName(pVR, "New name");
}
}


LDicomWaveformChannel::LDicomWaveformChannel

#include "Ltdic.h"

LDicomWaveformChannel::LDicomWaveformChannel ()

Constructs the object and performs initializations.

Returns

None.

Comments

LDicomWaveformChannel::LDicomWaveformChannel () is the constructor for the LDicomWaveformChannel object.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::~LDicomWaveformChannel
Topics: | Working with DICOM Waveforms


LDicomWaveformChannel::~LDicomWaveformChannel

#include "Ltdic.h"

virtual LDicomWaveformChannel::~LDicomWaveformChannel()

Destroys the object and frees any resources associated with it.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::LDicomWaveformChannel
Topics: | Working with DICOM Waveforms


LDicomWaveformChannel::AddAnnotation

#include "Ltdic.h"

L_UINT16 LDicomWaveformChannel::AddAnnotation(pAnnotation)

pDICOMWAVEFORMANNOTATION pAnnotation;

/* pointer to a structure */

Adds a new waveform annotation to the channel.

Parameter | Description
pAnnotation | Pointer to a structure containing the new waveform annotation attributes.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function fails and Returns DICOM_ERROR_NULL_PTR if pAnnotation is NULL.

Before calling this function, initialize pAnnotation>uStructSize to be sizeof(DICOMWAVEFORMANNOTATION) and initialize all the members of the structure.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomWaveformChannel::GetAnnotationCount, LDicomWaveformChannel::GetAnnotation, LDicomWaveformChannel::DeleteAnnotation
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::DeleteAnnotation

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::DeleteAnnotation(uIndex)

L_UINT32 uIndex;

/* index */

Deletes a waveform annotation from the channel.

Parameter | Description
uIndex | Index to the waveform annotation to be deleted. This index is zero-based. As an Example, if a channel has three waveform annotations and you are deleting the 2nd one, use an index of 1.

Returns

Number of annotations that are still associated with the channel after deleting this annotation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomWaveformChannel::GetAnnotationCount, LDicomWaveformChannel::GetAnnotation, LDicomWaveformChannel::AddAnnotation
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetAnnotation

#include "Ltdic.h"

pDICOMWAVEFORMANNOTATION LDicomWaveformChannel::GetAnnotation(uIndex)

L_UINT32 uIndex;

/* index */

Gets the channel annotation.

Parameter | Description
uIndex | Index to the waveform annotation to be retrieved. This index is zero-based. As an Example, if you are retrieving the 3rd waveform annotation, use an index of 2.

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

This function Returns a pointer to a DICOMWAVEFORMANNOTATION structure that describes one of waveform annotations associated with this channel.

This function Returns NULL if the index is out of range or if the channel has no annotations associated with it.

Note:

This function Returns a pointer to an internal structure that is managed by the class. Therefore, you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomWaveformChannel::GetAnnotationCount, LDicomWaveformChannel::AddAnnotation, LDicomWaveformChannel::DeleteAnnotation
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetAnnotationCount

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::GetAnnotationCount()

Gets the number of annotations associated with this channel.

Returns

Number of annotations associated with the channel.

Comments

This function Returns the number of annotations defined under the "Waveform Annotation Sequence" (0040,B020) element which are applied to this channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | LDicomWaveformChannel::GetAnnotation, LDicomWaveformChannel::AddAnnotation, LDicomWaveformChannel::DeleteAnnotation
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelLabel

#include "Ltdic.h"

L_CHAR* LDicomWaveformChannel::GetChannelLabel()

Gets the channel label.

Returns

!NULL | Pointer to a null-terminated string that represents the channel label.
NULL | An error occurred, or the channel label is not set.

Comments

This function gets the value of the "Channel Label" (003A, 0203) element for this channel. This function Returns a pointer that is managed by the class. Therefore you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelLabel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelMaximumValue

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetChannelMaximumValue(pnMaxValue)

L_INT32* pnMaxValue;

/* pointer to a variable to be updated */

Gets the channel maximum value.

Parameter | Description
pnMaxValue | Pointer to a variable to be updated with the channel maximum value.

Returns

TRUE | The channel maximum value was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Channel Maximum Value" (5400,0112) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelMaximumValue
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelMinimumValue

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetChannelMinimumValue(pnMinValue)

L_INT32* pnMinValue;

/* pointer to a variable to be updated */

Gets the channel minimum value.

Parameter | Description
pnMinValue | Pointer to a variable to be updated with the channel minimum value.

Returns

TRUE | The channel minimum value was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Channel Minimum Value" (5400,0110) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelMinimumValue
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetChannelOffset(pdChannelOffset)

L_DOUBLE * pdChannelOffset;

/* pointer to a variable to be updated */

Gets the channel offset.

Parameter | Description
pdChannelOffset | Pointer to a variable to be updated with the channel offset.

Returns

TRUE | The channel offset was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Channel Offset" (003A, 0218) element for this channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelOffset
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelSamples

#include "Ltdic.h"

L_INT32* LDicomWaveformChannel::GetChannelSamples(puNumberOfSamples)

L_UINT32* puNumberOfSamples;

/* pointer to a variable to be updated */

Gets the samples (data) for a waveform channel.

Parameter | Description
puNumberOfSamples | Pointer to a variable to be updated with the number of samples for the channel.

Returns

!NULL | Pointer to a buffer that holds the channel samples.
NULL | Channel has no samples set.

Comments

This function Returns a pointer to a buffer that holds the channel samples (data). If puNumberOfSamples is not NULL then it gets updated with the number of samples for the channel.

Please note that the data is always encapsulated as 32-bit regardless of the bits allocated for the channel (8- or 16-bit). You can tell if the data for the channel is 8- or 16-bit from the waveform sample interpretation. For 8-bit channels the "Waveform Sample Interpretation" (5400,1006) can either be signed 8-bit linear (DICOM_SAMPLE_INTERPRETATION_SB), unsigned 8-bit linear (DICOM_SAMPLE_INTERPRETATION_UB), 8-bit mu-law (DICOM_SAMPLE_INTERPRETATION_MB) or 8-bit A-law(DICOM_SAMPLE_INTERPRETATION_AB). For 16-bit channels the "Waveform Sample Interpretation" can either be signed 16-bit linear (DICOM_SAMPLE_INTERPRETATION_SS) or unsigned 16-bit linear (DICOM_SAMPLE_INTERPRETATION_US). Use the LDicomWaveformGroup::GetSampleInterpretation function to get the waveform sample interpretation.

Note:

This function Returns a pointer to an internal buffer that is managed by the class. Therefore, you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelSampleSkew

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetChannelSampleSkew(pdSampleSkew)

L_DOUBLE* pdSampleSkew;

/* pointer to a variable to be updated */

Gets the channel sample skew.

Parameter | Description
pdSampleSkew | Pointer to a variable to be updated with the channel sample skew.

Returns

TRUE | The channel sample skew was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the channel sample skew. For more information refer to the "Channel Sample Skew" (003A, 0215) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSampleSkew
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelSensitivity

#include "Ltdic.h"

L_UINT16 LDicomWaveformChannel::GetChannelSensitivity(pbIncluded, pdChannelSensitivity, pChannelSensitivityUnits, uStructSize, pdChannelSensitivityCF, pdChannelBaseline)

L_BOOL* pbIncluded; | /* pointer to a variable to be updated*/
L_DOUBLE* pdChannelSensitivity; | /* pointer to a variable to be updated*/
pDICOMCODESEQUENCEITEM pChannelSensitivityUnits; | /* pointer to a variable to be updated*/
L_UINT uStructSize; | /* size of a structure */
L_DOUBLE* pdChannelSensitivityCF; | /* pointer to a variable to be updated*/
L_DOUBLE* pdChannelBaseline; | /* pointer to a variable to be updated*/

Gets the channel sensitivity.

Parameter | Description
pbIncluded | Pointer to a flag that indicates whether the channel sensitivity is set for this channel. Possible values are:
 | Value | Meaning
 | TRUE | The channel sensitivity is set for this channel.
 | FALSE | The channel sensitivity is not set for this channel.
pdChannelSensitivity | Pointer to a variable that will be updated with the channel sensitivity. For more information, refer to the Channel Sensitivity (003A,0210) element in the DICOM standard.
pChannelSensitivityUnits | Pointer to a DICOMCODESEQUENCEITEM structure to be updated with the channel sensitivity units. For more information, refer to the "Channel Sensitivity Units Sequence" (003A,0211) element in the DICOM standard.
uStructSize | Size of the DICOMCODESEQUENCEITEM structure. Pass sizeof (DICOMCODESEQUENCEITEM).
pdChannelSensitivityCF | Pointer to a variable that will be updated with the channel sensitivity correction factor. For more information, to the "Channel Sensitivity Correction Factor" (003A,0212) element in the DICOM standard.
pdChannelBaseline | Pointer to a variable that will be updated with the channel baseline. For more information, refer to the "Channel Baseline" (003A,0213) element in the DICOM standard.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Use this function to get the values for all the elements related to the channel sensitivity.

This function fails and Returns DICOM_ERROR_NULL_PTR if pdChannelSensitivity is NULL.

The pChannelSensitivityUnits parameter points to a structure that can be filled using the functions offered by the LDicomContextGroup class. For more information about this class and the use of Coded Concepts in DICOM, please refer to Working with Context Groups.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSensitivity
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelSource

#include "Ltdic.h"

pDICOMCODESEQUENCEITEM LDicomWaveformChannel::GetChannelSource()

Gets the channel source.

Returns

Pointer to a DICOMCODESEQUENCEITEM structure that describes the channel source.

Comments

This function always Returns a valid pointer even if a call to LDicomWaveformChannel::SetChannelSource to populate the data of the structure was never made.

Note:

This function Returns a pointer to an internal structure that is managed by the class. Therefore, you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSource
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelStatus

#include "Ltdic.h"

L_UINT16 LDicomWaveformChannel::GetChannelStatus()

Gets the channel status.

Returns

If the function fails it Returns 0. If the function succeeds it Returns a combination of the following values:

Value | Meaning
DICOM_CHANNEL_STATUS_OK | [0x01] OK
DICOM_CHANNEL_STATUS_TEST_DATA | [0x02] Test Data
DICOM_CHANNEL_STATUS_DISCONNECTED | [0x04] Disconnected
DICOM_CHANNEL_STATUS_QUESTIONABLE | [0x08] Questionable
DICOM_CHANNEL_STATUS_INVALID | [0x10] Invalid
DICOM_CHANNEL_STATUS_UNCALIBRATED | [0x20] Uncalibrated
DICOM_CHANNEL_STATUS_UNZEROED | [0x40] Unzeroed

Comments

This function Returns the channel status. For more information please refer to the "Channel Status"(003A, 0205) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelStatus
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetChannelTimeSkew

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetChannelTimeSkew(pdTimeSkew)

L_DOUBLE* pdTimeSkew;

/* pointer to a variable to be updated */

Gets the channel time skew.

Parameter | Description
pdTimeSkew | Pointer to a variable to be updated with the channel time skew.

Returns

TRUE | The channel time skew was retrieved successfully.
FALSE | An error occurred.

Comments

This function Returns the channel time skew. For more information refer to the "Channel Time Skew" (003A, 0214) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelTimeSkew
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetFilterHighFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetFilterHighFrequency(pdHighFrequency)

L_DOUBLE* pdHighFrequency;

/* pointer to a variable to be updated */

Gets the filter high frequency.

Parameter | Description
pdHighFrequency | Pointer to a variable to be updated with the filter high frequency.

Returns

TRUE | The filter high frequency was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Filter High Frequency" (003A,0221) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetFilterHighFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetFilterLowFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetFilterLowFrequency(pdLowFrequency)

L_DOUBLE* pdLowFrequency;

/* pointer to a variable to be updated */

Gets the filter low frequency.

Parameter | Description
pdLowFrequency | Pointer to a variable to be updated with the filter low frequency.

Returns

TRUE | The filter low frequency was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Filter Low Frequency" (003A,0220) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetFilterLowFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetIndex

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::GetIndex()

Returns the index of the waveform channel inside the parent "Multiplex Group".

Returns

Zero-based index of the channel inside the parent "Multiplex Group".

Comments

According to the DICOM standard, a waveform consists of one or more multiplex groups, each encoded into an item in the Waveform Sequence (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. This function Returns the index of the waveform channel inside its parent multiplex group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetNotchFilterBandwidth

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetNotchFilterBandwidth(pdBandwidth)

L_DOUBLE* pdBandwidth;

/* pointer to a variable to be updated */

Gets the notch filter bandwidth.

Parameter | Description
pdBandwidth | Pointer to a variable to be updated with the notch filter bandwidth.

Returns

TRUE | The notch filter bandwidth was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Notch Filter Bandwidth" (003A,0223) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetNotchFilterBandwidth
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetNotchFilterFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetNotchFilterFrequency(pdFrequency)

L_DOUBLE* pdFrequency;

/* pointer to a variable to be updated */

Gets the notch filter frequency.

Parameter | Description
pdFrequency | Pointer to a variable to be updated with the notch filter frequency.

Returns

TRUE | The notch filter frequency was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the "Notch Filter Frequency" (003A,0222) element for this channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetNotchFilterFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetWaveformChannelNumber

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::GetWaveformChannelNumber(pnChannelNumber)

L_INT32* pnChannelNumber;

/* pointer to a variable to be updated */

Gets the waveform channel number.

Parameter | Description
pnChannelNumber | Pointer to a variable to be updated with the waveform channel number.

Returns

TRUE | The waveform channel number was retrieved successfully.
FALSE | An error occurred.

Comments

This function gets the value of the " Waveform Channel Number " (003A,0202) element for the channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetWaveformChannelNumber
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::GetWaveformGroup

#include "Ltdic.h"

LDicomWaveformGroup* LDicomWaveformChannel::GetWaveformGroup()

Returns the "Multiplex Group" that represents the parent of the waveform channel.

Returns

!NULL | SUCCESS.
NULL | An error occurred.

Comments

This function Returns a pointer to an LDicomWaveformGroup object that represents the parent of the waveform channel.

A waveform in DICOM consists of one or more multiplex groups, each encoded into an Item in the Waveform Sequence (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelLabel

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelLabel(pszLabel)

L_CHAR* pszLabel;

/* new channel label*/

Sets the channel label.

Parameter | Description
pszLabel | Character string that contains the new channel label

Returns

TRUE | The waveform channel label was set successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Channel Label" (003A,0203) element for this channel.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Function | Class Members, LDicomWaveformChannel::GetChannelLabel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelMaximumValue

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelMaximumValue(bInclude, nMaxValue)

L_BOOL bInclude; | /* dataset insertion/removal flag */
L_INT32 nMaxValue; | /* new channel maximum value*/

Sets the channel maximum value.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Channel Maximum Value" (5400,0112) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Channel Maximum Value" (5400,0112) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Channel Maximum Value" (5400,0112) element (that corresponds to this channel) from the dataset.
nMaxValue | New channel maximum value.

Returns

TRUE | The channel maximum value was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Channel Maximum Value" (5400,0112) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Channel Maximum Value" (5400,0112) element that corresponds to this channel by setting bInclude to FALSE. In this case the nMaxValue parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelMaximumValue
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelMinimumValue

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelMinimumValue(bInclude, nMinValue)

L_BOOL bInclude; | /* dataset insertion/removal flag */
L_INT32 nMinValue; | /* new channel minimum value*/

Sets the channel minimum value.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Channel Minimum Value" (5400,0110) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Channel Minimum Value" (5400,0110) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Channel Minimum Value" (5400,0110) element (that corresponds to this channel) from the dataset.
nMinValue | New channel minimum value.

Returns

TRUE | The channel minimum value was set successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Channel Minimum Value" (5400,0110) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Channel Minimum Value" (5400,0110) element that corresponds to this channel by setting bInclude to FALSE. In this case the nMinValue parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions | Class Members, LDicomWaveformChannel::GetChannelMinimumValue
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelOffset(bInclude, dChannelOffset)

L_BOOL bInclude; | /* dataset insertion/deletion flag*/
L_DOUBLE dChannelOffset; | /* new channel offset*/

Sets the channel offset.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Channel Offset" (003A,0218) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Channel Offset" (003A,0218) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Channel Offset" (003A,0218) element (that corresponds to this channel) from the dataset.
dChannelOffset | New channel offset.

Returns

TRUE | The channel offset was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Channel Offset" (003A,0218) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Channel Offset" (003A,0218) element that corresponds to this channel by setting bInclude to FALSE. In this case the dChannelOffset parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelOffset
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelSamples16

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::SetChannelSamples16(pSamples, uCount)

L_INT16* pSamples; | /* pointer to the input buffer*/
L_UINT32 uCount; | /* size of the input buffer*/

Sets 16-bit data for a channel.

Parameter | Description
pSamples | Pointer to the buffer that holds the new channel samples.
uCount | Size of the buffer pointed to by pSamples.

Returns

The actual number of samples set for the channel.

Comments

This function sets the new samples for a channel. Before calling the LDicomWaveformChannel::SetChannelSamples16 function, be sure to call LDicomWaveformGroup::SetSampleInterpretation to set the waveform sample interpretation.

The number of samples actually set will be less than or equal to the "Number of samples per channel" (003A, 0010) in the multiplex group that represents the parent of this channel. To get that number, call the LDicomWaveformGroup::GetNumberOfSamplesPerChannel function.

This function is intended to be used for setting the data of 16-bit channels where the "Waveform Sample Interpretation" (5400,1006) is signed 16-bit linear (DICOM_SAMPLE_INTERPRETATION_SS) or unsigned 16-bit linear (DICOM_SAMPLE_INTERPRETATION_US). To get the waveform sample interpretation, use the LDicomWaveformGroup::GetSampleInterpretation function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelSamples32

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::SetChannelSamples32(pSamples, uCount)

L_INT32* pSamples; | /* pointer to the input buffer*/
L_UINT32 uCount; | /* size of the input buffer*/

Sets the data for a channel.

Parameter | Description
pSamples | Pointer to the buffer that holds the new channel samples.
uCount | Size of the buffer pointed to by pSamples.

Returns

This function sets the new samples for a channel.

Comments

Before calling the LDicomWaveformChannel::SetChannelSamples32 function, be sure to call LDicomWaveformGroup::SetSampleInterpretation to set the waveform sample interpretation.

The number of samples actually set will be less than or equal to the "Number of samples per channel" (003A, 0010) in the multiplex group that represents the parent of this channel. To get that number, you can call LDicomWaveformGroup::GetNumberOfSamplesPerChannel.

In DICOM, a waveform channel can have either 8- or 16-bit samples (32-bit samples are not defined yet). When calling this function the data is automatically converted based on the "Waveform Sample Interpretation" (5400,1006). For 8-bit channels the "Waveform Sample Interpretation" (5400,1006) can either be signed 8-bit linear (DICOM_SAMPLE_INTERPRETATION_SB), unsigned 8-bit linear (DICOM_SAMPLE_INTERPRETATION_UB), 8-bit mu-law (DICOM_SAMPLE_INTERPRETATION_MB) or 8-bit A-law(DICOM_SAMPLE_INTERPRETATION_AB). For 16-bit channels the "Waveform Sample Interpretation" can either be signed 16-bit linear (DICOM_SAMPLE_INTERPRETATION_SS) or unsigned 16-bit linear (DICOM_SAMPLE_INTERPRETATION_US). To get the waveform sample interpretation, use the LDicomWaveformGroup::GetSampleInterpretation function.

Libraries

win32

ltdic14n.dll

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::GetChannelSamples, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelSamples8

#include "Ltdic.h"

L_UINT32 LDicomWaveformChannel::SetChannelSamples8(pSamples, uCount)

L_CHAR* pSamples; | /* pointer to the input buffer*/
L_UINT32 uCount; | /* size of the input buffer*/

Sets 8-bit data for a channel.

Parameter | Description
pSamples | Pointer to the buffer that holds the new channel samples.
uCount | Size of the buffer pointed to by pSamples.

Returns

The actual number of samples set for the channel.

Comments

This function sets the new samples for a channel. Before calling the LDicomWaveformChannel::SetChannelSamples8 function, be sure to call LDicomWaveformGroup::SetSampleInterpretation to set the waveform sample interpretation.

The number of samples actually set will be less than or equal to the "Number of samples per channel" (003A, 0010) in the multiplex group that represents the parent of this channel. To get that number, call the LDicomWaveformGroup::GetNumberOfSamplesPerChannel function.

This function is intended to be used for setting the data of 8-bit channels where the "Waveform Sample Interpretation" (5400,1006) is signed 8-bit linear (DICOM_SAMPLE_INTERPRETATION_SB), unsigned 8-bit linear (DICOM_SAMPLE_INTERPRETATION_UB), 8-bit mu-law (DICOM_SAMPLE_INTERPRETATION_MB) or 8-bit A-law (DICOM_SAMPLE_INTERPRETATION_AB). To get the waveform sample interpretation, use the LDicomWaveformGroup::GetSampleInterpretation function.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel
Topics: | Working with DICOM Waveforms

Example

/******************************************************************/
/* This is a comprehensive sample, which shows how to insert a */
/* waveform group with one ECG channel into a dataset. */
/* The main function is InsertECGCWaveform ,and the rest of the */
/* functions are helping functions. */
/******************************************************************/

// Function prototypes
BOOL SetChannelSourceAndSensitivity(LDicomWaveformChannel* pECGChannel);
BOOL SetChannelAnnotations(LDicomWaveformChannel* pECGChannel);
BOOL InsertECGCChannel( LDicomWaveformGroup* pECGWaveformGroup,
L_INT16* pSamples,
L_UINT32 uSampleCount);

// The main function that creates the
// waveform group and adds to the dataset
BOOL InsertECGCWaveform
(
LDicomDS &InputDS,
L_INT16* pSamples,
L_UINT32 uSampleCount
)
{
// Sanity check
if(!pSamples || (uSampleCount == 0) )
{
return FALSE;
}

// Our new waveform group
LDicomWaveformGroup ECGWaveformGroup;

// Reset the waveform group, we don't
// really need to call this!
ECGWaveformGroup.Reset();

// Set the number of samples per channel. You can call
// LDicomWaveformGroup::GetNumberOfSamplesPerChannel to get
// the number of samples
if(!ECGWaveformGroup.SetNumberOfSamplesPerChannel(uSampleCount))
{
return FALSE;
}

// Set the sampling frequency. You can call
// LDicomWaveformGroup::GetSamplingFrequency to
// get the sampling frequency
ECGWaveformGroup.SetSamplingFrequency(240.00);
// Set sample interpretation
if(!ECGWaveformGroup.SetSampleInterpretation(DICOM_SAMPLE_INTERPRETATION_SS))
{
return FALSE;
}
// Just in case!
if(ECGWaveformGroup.GetSampleInterpretation() !=DICOM_SAMPLE_INTERPRETATION_SS)
{
return FALSE;
}

// No Multiplex Group Time Offset
// You can call LDicomWaveformGroup::GetMultiplexGroupTimeOffset
// to get the time offset
if(!ECGWaveformGroup.SetMultiplexGroupTimeOffset(FALSE, 0.0))
{
return FALSE;
}
// No Trigger Time Offset
// You can call LDicomWaveformGroup::GetTriggerTimeOffset
// to get the trigger time offset
if(!ECGWaveformGroup.SetTriggerTimeOffset(FALSE, 0.0))
{
return FALSE;
}
// No Trigger Sample Position
// You can call LDicomWaveformGroup::GetTriggerSamplePosition
// to get the trigger sample position
if(!ECGWaveformGroup.SetTriggerSamplePosition(FALSE, 0))
{
return FALSE;
}

// Waveform originality is original
ECGWaveformGroup.SetWaveformOriginality(DICOM_WAVEFORM_ORIGINALITY_ORIGINAL);

// Just in case
if(ECGWaveformGroup.GetWaveformOriginality() != DICOM_WAVEFORM_ORIGINALITY_ORIGINAL)
{
return FALSE;
}

// Set the multiplex group label
if(!ECGWaveformGroup.SetMultiplexGroupLabel("SCPECG Waveform"))
{
return FALSE;
}
if(ECGWaveformGroup.GetMultiplexGroupLabel() == NULL)
{
return FALSE;
}

// Set the Waveform padding value
// You can call LDicomWaveformGroup::GetWaveformPaddingValue
// to get the waveform padding value
if(!ECGWaveformGroup.SetWaveformPaddingValue(TRUE,32768))
{
return FALSE;
}

if (!InsertECGCChannel(&ECGWaveformGroup , pSamples, uSampleCount))
{
return FALSE;
}
// Delete any waveform groups that already exist in the dataset
L_UINT32 uWaveformGroupCount = InputDS.GetWaveformGroupCount();
for(L_UINT32 uIndex = 0 ; uIndex < uWaveformGroupCount ; uIndex++)
{
InputDS.DeleteWaveformGroup(uIndex,0);
}
// Insert the new waveform group into the dataset
if(InputDS.AddWaveformGroup(&ECGWaveformGroup, 0, ELEMENT_INDEX_MAX)!= DICOM_SUCCESS)
{
return FALSE;
}
return TRUE;
}

// Add an ECG channel to the group
BOOL InsertECGCChannel
(
LDicomWaveformGroup* pECGWaveformGroup,
L_INT16* pSamples,
L_UINT32 uSampleCount
)
{
LDicomWaveformChannel* pECGChannel= NULL;
L_UINT32 uNumberOfSamples =0;
L_INT32 nChannelNumber = -1;
L_INT32 nMinValue = 0;
L_INT32 nMaxValue = 0;

if(pECGWaveformGroup == NULL)
{
return FALSE;
}

// Add a channel to the group
pECGChannel = pECGWaveformGroup->AddChannel(/*ELEMENT_INDEX_MAX*/);
if(pECGChannel == NULL)
{
return FALSE;
}
// If we want to update a channel, we can first call
// LDicomWaveformGroup::DeleteChannel and then call
// LDicomWaveformGroup::AddChannel with the same
// index we passed to DeleteChannel

// Make sure that the channel really got added
// This is for the purposes of this sample only, because
// the check we did in the previous statement is enough
if( (pECGWaveformGroup->GetNumberOfChannels() !=1)||
(pECGWaveformGroup->GetChannel(0) ==NULL) )
{
return FALSE;
}
// Sanity checks!
if((pECGChannel->GetWaveformGroup() != pECGWaveformGroup)||
(pECGChannel->GetIndex() != 0))
{
return FALSE;
}
/*
Set the channel samples
The data we are setting in here is 16 bit data.
We would call SetChannelSamples8 if the data were 8 bit.
We can also call SetChannelSamples32, which will set the data
as either 8-bit or 16-bit depending on the sample interpretation
*/
if(pECGChannel->SetChannelSamples16(pSamples, uSampleCount)!=uSampleCount)
{
return FALSE;
}
// Just in case
if((!pECGChannel->GetChannelSamples(&uNumberOfSamples))||
(uNumberOfSamples == 0))
{
return FALSE;
}
// Set the channel source and sensitivity
if(!SetChannelSourceAndSensitivity(pECGChannel))
{
return FALSE;
}
// Set the channel status
pECGChannel->SetChannelStatus(DICOM_CHANNEL_STATUS_OK);
if(pECGChannel->GetChannelStatus()!=DICOM_CHANNEL_STATUS_OK)
{
return FALSE;
}
// Set the channel time skew. You can call
// LDicomWaveformChannel::GetChannelTimeSkew to get the time skew
// You can also call LDicomWaveformChannel::SetChannelSampleSkew
// And LDicomWaveformChannel::GetChannelSampleSkew to set and get
// the channel samples skew
pECGChannel->SetChannelTimeSkew(0.000000);

// Set the waveform channel number
if(!pECGChannel->SetWaveformChannelNumber(TRUE, 0))
{
return FALSE;
}
if((!pECGChannel->GetWaveformChannelNumber(&nChannelNumber))||
(nChannelNumber !=0))
{
return FALSE;
}
// Set the channel label
if(!pECGChannel->SetChannelLabel("First Channel"))
{
return FALSE;
}
if(!pECGChannel->GetChannelLabel())
{
return FALSE;
}
// No channel offset
// You can also call LDicomWaveformChannel::GetChannelOffset
// To get the channel offset
if(!pECGChannel->SetChannelOffset(FALSE, 0.0))
{
return FALSE;
}
// Set filter low frequency
// You can also call LDicomWaveformChannel::GetFilterLowFrequency
// To get the filter low frequency
if(!pECGChannel->SetFilterLowFrequency(TRUE, 0.050))
{
return FALSE;
}
// Set filter high frequency
// You can also call LDicomWaveformChannel::GetFilterHighFrequency
// To get the filter high frequency
if(!pECGChannel->SetFilterHighFrequency(TRUE, 100.00))
{
return FALSE;
}
// Set the channel minimum value
if(!pECGChannel->SetChannelMinimumValue(TRUE, -386))
{
return FALSE;
}
// Set the channel maximum value
if(!pECGChannel->SetChannelMaximumValue(TRUE, 1264))
{
return FALSE;
}
// Just in case
if((!pECGChannel->GetChannelMinimumValue(&nMinValue))||
(nMinValue !=-386))
{
return FALSE;
}
// Just in case
if((!pECGChannel->GetChannelMaximumValue(&nMaxValue))||
(nMaxValue !=1264))
{
return FALSE;
}
/*
You can also call the following functions to set and get the notch
filter frequency and bandwidth
LDicomWaveformChannel::SetNotchFilterFrequency
LDicomWaveformChannel::GetNotchFilterFrequency
LDicomWaveformChannel::SetNotchFilterBandwidth
LDicomWaveformChannel::GetNotchFilterBandwidth
*/

// Last, but not least, set the channel annotations!
return SetChannelAnnotations(pECGChannel);
}

//Set the channel source and sensitivity
BOOL SetChannelSourceAndSensitivity(LDicomWaveformChannel* pECGChannel)
{

// Let's use the DICOM context group tables!

///////////////////////Channel Source/////////////////////////
// Load the ECG Leads table
LDicomContextGroup::Load(CID_3001);
pDICOMCONTEXTGROUP pECGLeadsGroup = LDicomContextGroup::Find(CID_3001);
if(pECGLeadsGroup)
{
// 5.6.3-9-1 is Lead I (Einthoven)
pDICOMCODEDCONCEPT pCodedConcept = LDicomContextGroup::FindCodedConcept(pECGLeadsGroup,
"SCPECG",
"5.6.3-9-1");
if(pCodedConcept)
{
DICOMCODESEQUENCEITEM DicomSourceSequenceItem;
L_UINT16 uRet;

memset(&DicomSourceSequenceItem , 0 , sizeof(DICOMCODESEQUENCEITEM));
DicomSourceSequenceItem.uStructSize = sizeof(DICOMCODESEQUENCEITEM);

DicomSourceSequenceItem.pszCodeValue = pCodedConcept->pszCodeValue ;
DicomSourceSequenceItem.pszCodingSchemeDesignator = pCodedConcept->pszCodingSchemeDesignator ;
DicomSourceSequenceItem.pszCodingSchemeVersion = pCodedConcept->pszCodingSchemeVersion ;
DicomSourceSequenceItem.pszCodeMeaning = pCodedConcept->pszCodeMeaning ;

// Set the channel source
uRet = pECGChannel->SetChannelSource(&DicomSourceSequenceItem);
if(uRet!= DICOM_SUCCESS)
{
return FALSE;
}
// You can call LDicomWaveformChannel::GetChannelSource ()
// to get the channel source
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}

///////////////////////Channel Sensitivity////////////////////////

// Cardiology Units of Measurement
LDicomContextGroup::Load(CID_3082);
pDICOMCONTEXTGROUP pCardiologyUnitsGroup = LDicomContextGroup::Find(CID_3082);
if(pCardiologyUnitsGroup)
{
pDICOMCODEDCONCEPT pCodedConcept = LDicomContextGroup::FindCodedConcept(pCardiologyUnitsGroup,
"UCUM",
"mV");
if(pCodedConcept)
{
DICOMCODESEQUENCEITEM DicomSourceSequenceItem;
L_UINT16 uRet;

memset(&DicomSourceSequenceItem , 0 , sizeof(DICOMCODESEQUENCEITEM));
DicomSourceSequenceItem.uStructSize = sizeof(DICOMCODESEQUENCEITEM);

DicomSourceSequenceItem.pszCodeValue = pCodedConcept->pszCodeValue ;
DicomSourceSequenceItem.pszCodingSchemeDesignator = pCodedConcept->pszCodingSchemeDesignator ;
DicomSourceSequenceItem.pszCodingSchemeVersion = pCodedConcept->pszCodingSchemeVersion ;
DicomSourceSequenceItem.pszCodeMeaning = pCodedConcept->pszCodeMeaning ;

// Set the channel sensitivity
uRet = pECGChannel->SetChannelSensitivity( TRUE,
0.001220,
&DicomSourceSequenceItem);
if(uRet != DICOM_SUCCESS)
{
return FALSE;
}
// You can call LDicomWaveformChannel::GetChannelSensitivity()
// to get the channel sensitivity
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}

return TRUE;
}

// Add annotations for the channel
BOOL SetChannelAnnotations(LDicomWaveformChannel* pECGChannel)
{

// Delete any existing channel annotations
for(L_UINT32 uIndex = 0 ; uIndex <
pECGChannel->GetAnnotationCount();uIndex++)
{
if(pECGChannel->GetAnnotation(uIndex))
{
pECGChannel->DeleteAnnotation(uIndex);
}
}

DICOMWAVEFORMANNOTATION ECGWaveformAnnotation;

memset(&ECGWaveformAnnotation,0, sizeof(DICOMWAVEFORMANNOTATION));
ECGWaveformAnnotation.uStructSize = sizeof(DICOMWAVEFORMANNOTATION);

// Over here we are populating the DICOMCODESEQUENCEITEM structure
// directly. What we can also do is fill it with values from
// the LDicomContextGroup table which lists all the context
// group tables defined by the DICOM standard. You can look at
// the SetChannelSourceAndSensitivity above for an Example on
// how to do that

//
DICOMCODESEQUENCEITEM CodedName;
memset(&CodedName,0, sizeof(DICOMCODESEQUENCEITEM));
CodedName.uStructSize = sizeof(DICOMCODESEQUENCEITEM);
CodedName.pszCodeValue = "8867-4";
CodedName.pszCodeMeaning = "Heart rate";
CodedName.pszCodingSchemeDesignator = "LN";
CodedName.pszCodingSchemeVersion = "19971101";

ECGWaveformAnnotation.pCodedName = &CodedName;

DICOMCODESEQUENCEITEM MeasurementUnits;
memset(&MeasurementUnits,0, sizeof(DICOMCODESEQUENCEITEM));
MeasurementUnits.uStructSize =
sizeof(DICOMCODESEQUENCEITEM);
MeasurementUnits.pszCodeValue = "{H.B.}/min";
MeasurementUnits.pszCodeMeaning = "Heart beat per minute";
MeasurementUnits.pszCodingSchemeDesignator = "UCUM";
MeasurementUnits.pszCodingSchemeVersion = "1.4";

ECGWaveformAnnotation.pMeasurementUnits = &MeasurementUnits;

L_DOUBLE dNumericValue = 69.00;
ECGWaveformAnnotation.pNumericValue = &dNumericValue ;
ECGWaveformAnnotation.uNumericValueCount = 1;

if(pECGChannel->AddAnnotation(&ECGWaveformAnnotation) != DICOM_SUCCESS)
{
return FALSE;
}

return TRUE;
}


LDicomWaveformChannel::SetChannelSampleSkew

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelSampleSkew(dSampleSkew)

L_DOUBLE dSampleSkew;

/* new channel sample skew*/

Sets the channel sample skew.

Parameter | Description
dSampleSkew | New channel sample skew.

Returns

TRUE | The channel sample skew was updated successfully.
FALSE | An error occurred.

Comments

This function sets the channel sample skew. For more information refer to the " Channel Sample Skew " (003A,0215) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelSampleSkew
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelSensitivity

#include "Ltdic.h"

L_UINT16 LDicomWaveformChannel::SetChannelSensitivity(bInclude, dChannelSensitivity, pChannelSensitivityUnits, dChannelSensitivityCF= 1.0, dChannelBaseline= 0.0)

L_BOOL bInclude; | /* insertion/removal flag */
L_DOUBLE dChannelSensitivity; | /* new channel sensitivity*/
pDICOMCODESEQUENCEITEM pChannelSensitivityUnits; | /* pointer to a structure*/
L_DOUBLE dChannelSensitivityCF; | /* new Channel Sensitivity Correction Factor*/
L_DOUBLE dChannelBaseline; | /* new Channel Baseline*/

Sets the channel sensitivity.

Parameter | Description
bInclude | Flag that specifies whether the function should insert or remove the following elements from the DICOM dataset: Channel Sensitivity (003A,0210), Channel Sensitivity Units Sequence(003A,0211), Channel Sensitivity Correction Factor (003A,0212), and Channel Baseline (003A,0213).
 | Value | Meaning
 | TRUE | Insert the elements related to channel sensitivity (that correspond to this channel) into the dataset and then set their value.
 | FALSE | Delete the channel sensitivity-related elements (that correspond to this channel) from the dataset.
dChannelSensitivity | New channel sensitivity. For more information, refer to the Channel Sensitivity (003A,0210) element in the DICOM standard.
pChannelSensitivityUnits | Pointer to a structure that describes the channel sensitivity units. For more information, refer to "Channel Sensitivity Units Sequence" (003A,0211) in the DICOM standard.
dChannelSensitivityCF | New channel sensitivity correction factor. For more information, refer to the "Channel Sensitivity Correction Factor" (003A,0212) element in the DICOM standard. The default value for this parameter is 1.0.
dChannelBaseline | New channel baseline. For more information, refer to the "Channel Baseline" (003A,0213) element in the DICOM standard. The default value for this parameter is 0.0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

Use this function to insert and set the values for all the elements related to channel sensitivity.

This function fails and Returns DICOM_ERROR_NULL_PTR if pChannelSensitivityUnits is NULL.

Before calling this function, initialize pChannelSensitivityUnits > uStructSize to be sizeof(DICOMCODESEQUENCEITEM) and initialize all the members of the structure.

In DICOM, it is mandatory to specify the channel sensitivity if the channel samples represent defined (not arbitrary) units. Since this is almost always the case, it is important to call this function to create a proper waveform channel.

To fill the members of the pChannelSensitivityUnits structure you can use the functions offered by the LDicomContextGroup class. For more information about this class and the use of Coded Concepts in DICOM, please refer to Working with Context Groups.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelSensitivity
Topics: | Working with DICOM Waveforms, Working with Context Groups

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelSource

#include "Ltdic.h"

L_UINT16 LDicomWaveformChannel::SetChannelSource(pChannelSource)

pDICOMCODESEQUENCEITEM pChannelSource;

/* pointer to a structure*/

Sets the channel source.

Parameter | Description
pChannelSource | Pointer to a structure that describes the new channel source.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function sets the channel source. Before calling this function, initialize pChannelSource> uStructSize to be sizeof(DICOMCODESEQUENCEITEM) and initialize all the members of the structure.

In DICOM it is mandatory to specify the source for a channel. Therefore, it is important to call this function to create a proper waveform channel. For more information about a waveform channel source, please refer to "Channel Source Sequence" (003A, 0208) in the DICOM standard.

To fill the members of the pChannelSource structure you can use the functions offered by the LDicomContextGroup class. For more information about this class and the use of Coded Concepts in DICOM, please refer to Working with Context Groups.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelSource
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelStatus

#include "Ltdic.h"

L_VOID LDicomWaveformChannel::SetChannelStatus(uStatus)

L_UINT16 uStatus;

/* new channel status */

Sets the channel status.

Parameter | Description
uStatus | The new channel status. You can combine values by using a bitwise OR ( | ). Possible values are:
 | Value | Meaning
 | DICOM_CHANNEL_STATUS_OK | [0x01] OK
 | DICOM_CHANNEL_STATUS_TEST_DATA | [0x02] Test Data
 | DICOM_CHANNEL_STATUS_DISCONNECTED | [0x04] Disconnected
 | DICOM_CHANNEL_STATUS_QUESTIONABLE | [0x08] Questionable
 | DICOM_CHANNEL_STATUS_INVALID | [0x10] Invalid
 | DICOM_CHANNEL_STATUS_UNCALIBRATED | [0x20] Uncalibrated
 | DICOM_CHANNEL_STATUS_UNZEROED | [0x40] Unzeroed

Returns

None.

Comments

This function sets the channel status. For more information please refer to the "Channel Status"(003A, 0205) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelStatus
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetChannelTimeSkew

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetChannelTimeSkew(dTimeSkew)

L_DOUBLE dTimeSkew;

/* new channel time skew*/

Sets the channel time skew.

Parameter | Description
dTimeSkew | New channel time skew.

Returns

TRUE | The channel time skew was updated successfully.
FALSE | An error occurred.

Comments

This function sets the channel time skew. For more information refer to the "Channel Time Skew" (003A, 0214) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetChannelTimeSkew
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetFilterHighFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetFilterHighFrequency (bInclude, dHighFrequency)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_DOUBLE dHighFrequency; | /* new filter high frequency*/

Sets the filter high frequency.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Filter High Frequency" (003A,0221) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Filter High Frequency" (003A,0221) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Filter High Frequency" (003A,0221) element (that corresponds to this channel) from the dataset.
dHighFrequency | New filter high frequency.

Returns

TRUE | The filter high frequency was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Filter High Frequency" (003A,0221) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Filter High Frequency" (003A,0221) element that corresponds to this channel by setting bInclude to FALSE. In this case the dHighFrequency parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetFilterHighFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetFilterLowFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetFilterLowFrequency(bInclude, dLowFrequency)

L_BOOL bInclude; | /* dataset insertion/removal flag */
L_DOUBLE dLowFrequency; | /* new filter low frequency*/

Sets the filter low frequency.

Parameter | Description
bInclude | Boolean value that specifies whether the function should insert the "Filter Low Frequency" (003A,0220) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Filter Low Frequency" (003A,0220) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Filter Low Frequency" (003A,0220) element (that corresponds to this channel) from the dataset.
dLowFrequency | New filter low frequency.

Returns

TRUE | The filter low frequency was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Filter Low Frequency" (003A,0220) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Filter Low Frequency" (003A,0220) element that corresponds to this channel by setting bInclude to FALSE. In this case the dLowFrequency parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetFilterLowFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetNotchFilterBandwidth

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetNotchFilterBandwidth(bInclude, dBandwidth)

L_BOOL bInclude; | /* dataset insertion/removal flag */
L_DOUBLE dBandwidth; | /* new notch filter bandwidth*/

Sets the notch filter bandwidth for the channel.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Notch Filter Bandwidth" (003A,0223) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Notch Filter Bandwidth" (003A,0223) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Notch Filter Bandwidth" (003A,0223) element (that corresponds to this channel) from the dataset.
dBandwidth | New notch filter bandwidth.

Returns

TRUE | The notch filter bandwidth was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Notch Filter Bandwidth" (003A,0223) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Notch Filter Bandwidth" (003A,0223) element that corresponds to this channel by setting bInclude to FALSE. In this case the dBandwidth parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions | Class Members, LDicomWaveformChannel::GetNotchFilterBandwidth
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetNotchFilterFrequency

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetNotchFilterFrequency(bInclude, dFrequency)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_DOUBLE dFrequency; | /* new notch filter frequency*/

Sets the notch filter frequency for the channel.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the Notch Filter Frequency (003A,0222) element or remove it from the dataset.
 | Value | Meaning
 | TRUE | Insert the "Notch Filter Frequency" (003A,0222) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the "Notch Filter Frequency" (003A,0222) element (that corresponds to this channel) from the dataset.
dFrequency | New notch filter frequency.

Returns

TRUE | The notch filter frequency was set successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Notch Filter Frequency" (003A,0222) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Notch Filter Frequency" (003A,0222) element that corresponds to this channel by setting bInclude to FALSE. In this case the dFrequency parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetNotchFilterFrequency
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformChannel::SetWaveformChannelNumber

#include "Ltdic.h"

L_BOOL LDicomWaveformChannel::SetWaveformChannelNumber(bInclude, nChannelNumber)

L_BOOL bInclude; | /* dataset insertion/removal flag */
L_INT32 nChannelNumber; | /* new channel number*/

Sets the channel number.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Waveform Channel Number" (003A,0202) element or remove it from the DICOM dataset. Possible values are:
 | Value | Meaning
 | TRUE | Insert the Waveform Channel Number (003A, 0202) element (that corresponds to this channel) into the dataset and then set its value.
 | FALSE | Delete the Waveform Channel Number (003A,0202) element (that corresponds to this channel) from the dataset.
nChannelNumber | New waveform channel number

Returns

TRUE | The waveform channel number was updated successfully.
FALSE | An error occurred.

Comments

This function sets the value of the "Waveform Channel Number" (003A,0202) element that corresponds to this channel. Set bInclude to TRUE to force the function to insert the element if it doesn’t already exist in the dataset.

This function can also be used to delete the "Waveform Channel Number" (003A,0202) element that corresponds to this channel by setting bInclude to FALSE. In this case the nChannelNumber parameter is ignored.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformChannel::GetWaveformChannelNumber
Topics: | Working with DICOM Waveforms

Example

For an Example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::LDicomWaveformGroup

#include "Ltdic.h"

LDicomWaveformGroup::LDicomWaveformGroup()

Constructs the object and performs initializations.

Returns

None.

Comments

LDicomWaveformGroup::LDicomWaveformGroup () is a constructor for the LDicomWaveformGroup object.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::~LDicomWaveformGroup, LDicomWaveformGroup::Reset
Topics: | Working with DICOM Waveforms.


LDicomWaveformGroup::~LDicomWaveformGroup

#include "Ltdic.h"

virtual LDicomWaveformGroup::~LDicomWaveformGroup ()

Destroys the object and frees any resources associated with it.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::LDicomWaveformGroup, LDicomWaveformGroup::Reset
Topics: | Working with DICOM Waveforms.


LDicomWaveformGroup::AddChannel

#include "Ltdic.h"

LDicomWaveformChannel* LDicomWaveformGroup::AddChannel(uIndex= ELEMENT_INDEX_MAX)

L_UINT32 uIndex;

/* index*/

Adds a channel to the waveform group.

Parameter | Description
uIndex | Zero-based index of the new channel. This parameter defaults to ELEMENT_INDEX_MAX, which will add the new channel at the end.

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

A waveform in DICOM consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. Use this function to add a new channel to the waveform group.

This function returns a pointer to an internal object that is managed by the class. Therefore, you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::DeleteChannel, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformChannel::GetIndex
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::DeleteChannel

#include "Ltdic.h"

L_UINT32 LDicomWaveformGroup::DeleteChannel(uIndex)

L_UINT32 uIndex;

/* index*/

Deletes a channel from the waveform group.

Parameter | Description
uIndex | Zero-based index of the channel to delete. As an example, if there are 10 channels, the last one has an index of 9.

Returns

Remaining number of channels in the waveform group after deleting this channel.

Comments

Use this function to delete the specified channel from the waveform group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformChannel::GetIndex
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetChannel

#include "Ltdic.h"

LDicomWaveformChannel* LDicomWaveformGroup::GetChannel (uIndex)

L_UINT32 uIndex;

/* index*/

Gets a channel from the waveform group.

Parameter | Description
uIndex | Zero-based index of the channel to retrieve. As an example, if you want to retrieve the 10th channel, use an index of 9.

Returns

!NULL | SUCCESS
NULL | An error occurred.

Comments

A waveform in DICOM consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. Use this function to retrieve the specified channel under the waveform group.

This function returns a pointer to an internal object that is managed by the class. Therefore, you should not free it when you are done with it.

This function returns NULL if the index is out of range or if this waveform group does not have any channels associated with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetNumberOfChannels, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformChannel::GetIndex
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetMultiplexGroupLabel

#include "Ltdic.h"

L_CHAR* LDicomWaveformGroup::GetMultiplexGroupLabel()

Gets the label for the multiplex group.

Returns

A string that contains the current label for the multiplex group.

Comments

This function returns the multiplex group label. For more information refer to the "Multiplex Group Label" (003A, 0020) element in the DICOM standard.

This function returns a pointer to an internal string that is managed by the class. Therefore you should not free it when you are done with it.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetMultiplexGroupLabel
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetMultiplexGroupTimeOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::GetMultiplexGroupTimeOffset(pdOffset)

L_DOUBLE* pdOffset;

/* pointer to a variable to be updated */

Gets the multiplex group time offset.

Parameter | Description
pdOffset | Pointer to a variable to be updated with the multiplex group time offset.

Returns

TRUE | The multiplex group time offset was retrieved successfully.
FALSE | An error occurred.

Comments

This function returns the multiplex group time offset. For more information refer to the "Multiplex Group Time Offset " (0018,1068) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetMultiplexGroupTimeOffset
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetNumberOfChannels

#include "ltdic.h"

L_UINT32 LDicomWaveformGroup::GetNumberOfChannels()

Returns the number of channels for this multiplex group.

Returns

Number of channels associated with this multiplex group.

Comments

A waveform in DICOM consists of one or more multiplex groups, each encoded into an item in the "Waveform Sequence" (5400,0100). All channels within a multiplex group are synchronously digitized at a common sampling frequency. Use this function to retrieve the number of channels associated with this waveform group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetChannel, LDicomWaveformGroup::AddChannel, LDicomWaveformGroup::DeleteChannel, LDicomWaveformChannel::GetWaveformGroup, LDicomWaveformChannel::GetIndex
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetNumberOfSamplesPerChannel

#include "Ltdic.h"

L_UINT32 LDicomWaveformGroup::GetNumberOfSamplesPerChannel()

Gets the number of samples per channel.

Returns

The number of samples per channel

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency and have the same number of samples. Use this function to get the number of samples per channel in this group.

The initial value for the number of samples per channel is zero.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetNumberOfSamplesPerChannel, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetSampleInterpretation

#include "Ltdic.h"

L_UINT16 LDicomWaveformGroup::GetSampleInterpretation()

Gets the waveform sample interpretation.

Returns

The current waveform sample interpretation.

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency and have the same sample interpretation. Use this function to get the waveform sample interpretation, which applies to all channels in the waveform group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetSampleInterpretation, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetSamplingFrequency

#include "Ltdic.h"

L_DOUBLE LDicomWaveformGroup::GetSamplingFrequency()

Gets the sampling frequency.

Returns

The current sampling frequency.

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency. Use this function to get the sampling frequency in Hz.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetSamplingFrequency
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetTriggerSamplePosition

#include "Ltdic.h"

L_BOOLBasicDataTypes LDicomWaveformGroup::GetTriggerSamplePosition(puSamplePosition)

L_UINT32* puSamplePosition;

/* pointer to a variable to be updated */

Gets the trigger sample position.

Parameter | Description
puSamplePosition | Pointer to a variable to be updated with the trigger sample position.

Returns

TRUE | The trigger sample position was retrieved successfully.
FALSE | An error occurred.

Comments

This function returns the trigger sample position. For more information refer to the "Trigger Sample Position" (0018,106E) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetTriggerSamplePosition
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetTriggerTimeOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::GetTriggerTimeOffset(pdOffset)

L_DOUBLE* pdOffset;

/* pointer to a variable to be updated */

Gets the trigger time offset.

Parameter | Description
pdOffset | Pointer to a variable to be updated with the trigger time offset.

Returns

TRUE | The trigger time offset was retrieved successfully.
FALSE | An error occurred.

Comments

This function returns the trigger time offset. For more information refer to the "Trigger Time Offset" (0018,1069) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetTriggerTimeOffset
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetWaveformOriginality

#include "Ltdic.h"

L_UINT16 LDicomWaveformGroup::GetWaveformOriginality()

Gets the waveform originality.

Returns

The current waveform originality for the waveform group. Possible values are:

Value | Meaning
DICOM_WAVEFORM_ORIGINALITY_ORIGINAL | Original
DICOM_WAVEFORM_ORIGINALITY_DERIVED | Derived

Comments

This function returns the waveform originality. For more information refer to the "Waveform Originality" (003A, 0004) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetWaveformOriginality
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::GetWaveformPaddingValue

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::GetWaveformPaddingValue(pnPaddingValue)

L_INT32* pnPaddingValue;

/* pointer to a variable to be updated */

Gets the waveform padding value.

Parameter | Description
pnPaddingValue | Pointer to a variable to be updated with the waveform padding value.

Returns

TRUE | The waveform padding value was retrieved successfully.
FALSE | An error occurred.

Comments

This function returns the waveform padding value. For more information refer to the "Waveform Padding Value" (5400,100A) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SetWaveformPaddingValue
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::LoadAudio

#include "Ltdic.h"

L_UINT16 LDicomWaveformGroup::LoadAudio(pszFilename, uFlags = 0)

L_CHAR* pszFilename; | /* file name */
L_UINT16 uFlags; | /* reserved for future use */

Inserts an audio (wave) file into the waveform group.

Parameter | Description
pszFilename | Name of the audio file to load.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function is mainly intended to be used with 8-bit (mono and stereo) PCM, mu-Law and a-Law wave files. It can also be used with 16-bit (mono and stereo) PCM wave files, but in this case it will automatically convert them to 8-bit. Please note that this is a limitation in the DICOM standard and not in the function itself.

This function fails and returns DICOM_ERROR_FORMAT if the format of the input wave file is not PCM, mu-Law or a-Law.

This function is very useful when creating DICOM objects of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1), which is typically used for report dictation. Two of the main constraints of this IOD are the sampling frequency, which should be 8000; and sample interpretation, which should be unsigned 8-bit linear, 8-bit mu-law or 8-bit A-law. For more information about this object, refer to "Basic Voice Audio Information Object Definition" and "Basic Voice Audio IOD Content Constraints" in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::SaveAudio
Topics: | Working with DICOM Waveforms

Example

//This sample shows how to insert a wave stream into a dataset
BOOL InsertWaveFileIntoDataset(LDicomDS &InputDS, L_CHAR * pszInputWaveFileName)
{
LDicomWaveformGroup AudioWaveformGroup;

// Load an audio file into the waveform group.
if(AudioWaveformGroup.LoadAudio(pszInputWaveFileName,0) != DICOM_SUCCESS)
{
return FALSE;
}
// Insert the waveform group into the dataset
if(InputDS.AddWaveformGroup(&AudioWaveformGroup, 0,ELEMENT_INDEX_MAX) != DICOM_SUCCESS)
{
return FALSE;
}
return TRUE;
}


LDicomWaveformGroup::Reset

#include "Ltdic.h"

LDicomWaveformGroup::Reset()

Frees any resources associated with the class and resets all its members.

Returns

None.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SaveAudio

#include "Ltdic.h"

L_UINT16 LDicomWaveformGroup::SaveAudio(pszFilename, uFlags = 0)

L_CHAR* pszFilename; | /* file name */
L_UINT16 uFlags; | /* reserved for future use */

Creates an audio (wave) file from the channels in the waveform group.

Parameter | Description
pszFilename | Name of the audio file to be created.
uFlags | Reserved for future use. Pass 0.

Returns

0 | The function was successful.
> 0 | An error occurred. Refer to Return Codes.

Comments

This function is very useful for extracting audio (wave) data from a DICOM object of type "Basic Voice Audio" (1.2.840.10008.5.1.4.1.1.9.4.1), which is typically used for report dictation.

The resulting wave file has the following characteristics:

1. | Number of channels: will either be 1 or 2, based on the value of the number of channels for this multiplex group. You can call LDicomWaveformGroup::GetNumberOfChannels to get the number of channels in a multiplex group.
2. | Bits per sample (sample size) will always be 8.
3. | Samples per second (sampling rate): This will be the same as the sampling frequency for the waveform group, call LDicomWaveformGroup::GetSamplingFrequency to get this value.
4. | Format category: PCM, mu-Law or a-Law, based on the value of the waveform sample interpretation which can be retrieved by calling LDicomWaveformGroup::GetSampleInterpretation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::LoadAudio
Topics: | Working with DICOM Waveforms

Example

// This sample shows how to extract a
// wave stream from a dataset
BOOL GetWaveFileFromDataset(LDicomDS &InputDS, L_CHAR * pszResultingWaveFileName)
{
LDicomWaveformGroup AudioWaveformGroup;

// Do we have any waveforms in the dataset?
if(InputDS.GetWaveformGroupCount() <1)
{
return FALSE;
}

// Extract the first waveform group
if(InputDS.GetWaveformGroup(0,&AudioWaveformGroup) != DICOM_SUCCESS)
{
return FALSE;
}

// Extract the wave stream from the waveform group and save it to disk
if(AudioWaveformGroup.SaveAudio(pszResultingWaveFileName,0) != DICOM_SUCCESS)
{
return FALSE;
}
return TRUE;
}


LDicomWaveformGroup::SetMultiplexGroupLabel

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetMultiplexGroupLabel(pszLabel)

L_CHAR* pszLabel;

/* label for the multiplex group */

Sets the label for the multiplex group.

Parameter | Description
pszLabel | New label for the multiplex group.

Returns

TRUE | The label for the multiplex group was set successfully.
FALSE | An error occurred.

Comments

Use this function to set the multiplex group label. For more information refer to the "Multiplex Group Label" (003A, 0020) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetMultiplexGroupLabel
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetMultiplexGroupTimeOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetMultiplexGroupTimeOffset(bInclude, dOffset)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_DOUBLE dOffset; | /* multiplex group time offset*/

Sets the multiplex group time offset.

Parameter | Description
bInclude | Boolean flag that specifies whether the function should insert the "Multiplex Group Time Offset" (0018,1068) element or remove it from the DICOM dataset. Possible values are:
 | Value | Meaning
 | TRUE | Insert the "Multiplex Group Time Offset" (0018,1068) element (that corresponds to this waveform group) into the dataset and then set its value.
 | FALSE | Delete the "Multiplex Group Time Offset" (0018,1068) element (that corresponds to this waveform group) from the dataset.
dOffset | New multiplex group time offset.

Returns

TRUE | The multiplex group time offset was set successfully.
FALSE | An error occurred.

Comments

Use this function to set the multiplex group time offset. For more information refer to the "Multiplex Group Time Offset " (0018,1068) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetMultiplexGroupTimeOffset
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetNumberOfSamplesPerChannel

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetNumberOfSamplesPerChannel(uNumberOfSamples)

L_UINT32 uNumberOfSamples;

/* number of samples for the channel*/

Sets the number of samples per channel.

Parameter | Description
uNumberOfSamples | New number of samples for a channel included in this waveform group.

Returns

TRUE | The number of samples per channel was set successfully.
FALSE | An error occurred.

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency and have the same number of samples. Use this function to set the number of samples per channel in this group.

The initial value for the number of samples per channel is zero.

Make sure to call this function before you call any functions that are used to set the data for a channel that is included in the waveform group. The functions that are used to set the data for a channel include LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16 and LDicomWaveformChannel::SetChannelSamples32

If you call this function after setting the data for one or more channels that are included in this group, then the function will expand or shrink the internal buffers that hold the data for each of the channels accordingly. For example, if you initially call this function and pass it 150 as the number of samples per channel and then call LDicomWaveformChannel::SetChannelSamples8 and set 150 samples for a channel that is included in the waveform group and then call this function again and pass it 125, then this will shrink the buffer that holds the data for the channel to be 125 samples long and will discard all the samples that don’t fit in the buffer any more.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetNumberOfSamplesPerChannel, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetSampleInterpretation

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetSampleInterpretation(uInterpretation)

L_UINT16 uInterpretation;

/* new sample interpretation*/

Sets the waveform sample interpretation.

Parameter | Description
uInterpretation | The new waveform sample interpretation. Possible values are:
 | Value | Meaning
 | DICOM_SAMPLE_INTERPRETATION_SS | [0x00] signed 16-bit linear
 | DICOM_SAMPLE_INTERPRETATION_US | [0x01] unsigned 16-bit linear
 | DICOM_SAMPLE_INTERPRETATION_SB | [0x02] signed 8-bit linear
 | DICOM_SAMPLE_INTERPRETATION_UB | [0x03] unsigned 8-bit linear
 | DICOM_SAMPLE_INTERPRETATION_MB | [0x04] 8-bit mu-law
 | DICOM_SAMPLE_INTERPRETATION_AB | [0x05] 8-bit A-law

Returns

TRUE | The waveform sample interpretation was set successfully.
FALSE | An error occurred.

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency and have the same sample interpretation. Use this function to set the waveform sample interpretation, which applies to all channels in the waveform group.

For more information about sample interpretation refer to the "Waveform Sample Interpretation" (5400,1006) element in the DICOM standard.

The default value for sample interpretation is DICOM_SAMPLE_INTERPRETATION_SS.

Make sure to call this function before you call any functions that are used to set the data for a channel that is included in the waveform group. Such functions include LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16 and LDicomWaveformChannel::SetChannelSamples32

If you call this function after setting the data for one or more channels that are included in this group, then the function will convert the data for each of the channels to match the new sample interpretation.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetSampleInterpretation, LDicomWaveformChannel::SetChannelSamples8, LDicomWaveformChannel::SetChannelSamples16, LDicomWaveformChannel::SetChannelSamples32, LDicomWaveformChannel::GetChannelSamples
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetSamplingFrequency

#include "Ltdic.h"

L_VOID LDicomWaveformGroup::SetSamplingFrequency(dFrequency)

L_DOUBLE dFrequency;

/* frequency in Hz */

Sets the sampling frequency.

Parameter | Description
dFrequency | New sampling frequency in Hz.

Returns

None.

Comments

In DICOM all channels within a multiplex group are synchronously digitized at a common sampling frequency. Use this function to set the sampling frequency in Hz.

The initial value for the sampling frequency is zero.

In DICOM it is mandatory to specify the sampling frequency for a waveform group. Therefore it is important to call this function to create a proper waveform group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetSamplingFrequency
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetTriggerSamplePosition

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetTriggerSamplePosition(bInclude, uSamplePosition)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_UINT32 uSamplePosition; | /* trigger sample position*/

Sets the trigger sample position.

Parameter | Description
bInclude | Specifies whether the function should insert the "Trigger Sample Position" (0018,106E) element or remove it from the DICOM dataset.
 | Value | Meaning
 | TRUE | Insert the "Trigger Sample Position" (0018,106E) element (that corresponds to this waveform group) into the dataset and then set its value.
 | FALSE | Delete the "Trigger Sample Position" (0018,106E) element (that corresponds to this waveform group) from the dataset.
uSamplePosition | New trigger sample position.

Returns

TRUE | The trigger sample position was set successfully.
FALSE | An error occurred.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetTriggerSamplePosition
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetTriggerTimeOffset

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetTriggerTimeOffset(bInclude, dOffset)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_DOUBLE dOffset; | /* trigger time offset*/

Sets the trigger time offset.

Parameter | Description
bInclude | Boolean value that specifies whether the function should insert the "Trigger Time Offset" (0018,1069) element or remove it from the DICOM dataset. Possible values are:
 | Value | Meaning
 | TRUE | Insert the "Trigger Time Offset" (0018,1069) element (that corresponds to this waveform group) into the dataset and then set its value.
 | FALSE | Delete the "Trigger Time Offset" (0018,1069) element (that corresponds to this waveform group) from the dataset.
dOffset | New trigger time offset.

Returns

TRUE | The trigger time offset was set successfully.
FALSE | An error occurred.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetTriggerTimeOffset
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetWaveformOriginality

#include "Ltdic.h"

L_VOID LDicomWaveformGroup::SetWaveformOriginality(uOriginality)

L_UINT16 uOriginality;

/* waveform originality*/

Sets the waveform originality.

Parameter | Description
uOriginality | New waveform originality. Possible values are:
 | Value | Meaning
 | DICOM_WAVEFORM_ORIGINALITY_ORIGINAL | [0x00] Original
 | DICOM_WAVEFORM_ORIGINALITY_DERIVED | [0x01] Derived

Returns

None.

Comments

The default value for the waveform originality is DICOM_WAVEFORM_ORIGINALITY_ORIGINAL.

In DICOM it is mandatory to specify the waveform originality for a waveform group. For this reason it is important to call this function to create a proper waveform group.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetWaveformOriginality
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


LDicomWaveformGroup::SetWaveformPaddingValue

#include "Ltdic.h"

L_BOOL LDicomWaveformGroup::SetWaveformPaddingValue(bInclude, nPaddingValue)

L_BOOL bInclude; | /* dataset insertion/removal flag*/
L_INT32 nPaddingValue; | /* waveform padding value*/

Sets the waveform padding value.

Parameter | Description
bInclude | Boolean value that specifies whether the function should insert the "Waveform Padding Value" (5400,100A) element or remove it from the DICOM dataset. Possible values are:
 | Value | Meaning
 | TRUE | Insert the "Waveform Padding Value" (5400,100A) element (that corresponds to this waveform group) into the dataset and then set its value.
 | FALSE | Delete the "Waveform Padding Value" (5400,100A) element (that corresponds to this waveform group) from the dataset.
nPaddingValue | New waveform padding value.

Returns

TRUE | The waveform padding value was set successfully.
FALSE | An error occurred.

Comments

It is mandatory to set this value if the acquisition equipment adds padding. For more information refer to the "Waveform Padding Value" (5400,100A) element in the DICOM standard.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions: | Class Members, LDicomWaveformGroup::GetWaveformPaddingValue
Topics: | Working with DICOM Waveforms

Example

For an example, refer to LDicomWaveformChannel::SetChannelSamples8


CONFORMANCECALLBACK Function

#include "ltdic.h"

L_BOOL pEXT_CALLBACK YourFunction(pElement, nFlags, pUserData)

pDICOMELEMENT pElement; | /* a DICOM handle */
L_UINT16 nFlags; | /* flag that indicates any errors */
L_VOID L_FAR * pUserData; | /* pointer to additional data */

Processes each Data Element of the Data Set to determine conformance.

Parameter | Description
pElement | A DICOM handle.
nFlags | Flag that indicates errors associated with the Data Element. Possible values are given below and may be combined using the bitwise OR ( | ) operator.
 | Value | Meaning
 | CALLBACK_ERROR_UNKNOWN_CLASS | [0x0001] Error- improper class code.
 | CALLBACK_ERROR_UNKNOWN_TAG | [0x0002] Error - improper tag value.
 | CALLBACK_ERROR_UNKNOWN_VR | [0x0004] Error - unknown Value Representation code.
 | CALLBACK_ERROR_WRONG_VR | [0x0008] Error - incorrect Value Representation code.
 | CALLBACK_ERROR_MIN_VM | [0x0010] Error - improper minimum value multiplicity value.
 | CALLBACK_ERROR_MAX_VM | [0x0020] Error - improper maximum value multiplicity value.
 | CALLBACK_ERROR_DIVIDE_VM | [0x0040] Error - improper value multiplicity divisor.
 | CALLBACK_ERROR_IMAGE | [0x0080] Error - improper image.
pUserData | Void pointer that you can use to access a variable or structure containing data that your callback function needs. This gives you a way to receive data indirectly from the function that uses this callback function. (This is the same pointer that you pass in the pUserData parameter of the LDicomDS::ConformanceDS function.)
 | Keep in mind that this is a void pointer, which must be cast to the appropriate data type within your callback function.

Returns

TRUE | The Data Set comforms to the standard.
FALSE | The Data Set does not comform to the standard.

Comments

The LDicomDS::ConformanceDS function calls your callback function to verify each Data Element in the DataSet.

The purpose of this callback function is just to verify that the data provided in the Data Set conforms to the standard.

Set nFlags with the appropriate error message for any inconsistency encountered. For example, if a Data Element has a Value Representation of VR_FD (Floating Point Double) and the Value Field has an integer value, set the CALLBACK_ERROR_VR error in nFlags and return False.

Example

Refer to LDicomDS::ConformanceDS.


FILEREADCALLBACK Function

#include "l_bitmap.h"

L_INT pEXT_CALLBACK YourFunction (pFileInfo, pBitmap, pBuffer, uFlags, nRow, nLines, pUserData)

pFILEINFO pFileInfo; | /* pointer to the file information handle */
pBITMAPHANDLE pBitmap; | /* pointer to the bitmap handle */
L_UCHAR L_FAR * pBuffer; | /* pointer to a buffer of the caller's output data */
L_UINT uFlags; | /* flags for first and last row, and first and last pass */
L_INT nRow; | /* current row number of the first line in the buffer */
L_INT nLines; | /* number of lines in the buffer */
L_VOID L_FAR * pUserData; | /* pointer to additional parameters */

Handles the output image data that the calling function has written to a buffer.

Parameter | Description
pFileInfo | The pointer to the FILEINFO structure that contains image information.
pBitmap | The pointer to the bitmap handle referencing the bitmap that contains the image information.
pBuffer | A pointer to a buffer containing one or more lines of output image data that the calling function has already processed (read or decompressed).
uFlags | Flags that describe whether this is the first or last call of the callback, and whether the buffer contains first or last row of image data. The following are possible flags:
 | Constant | Meaning
 | FILEREAD_FIRSTPASS | [0x0001] This is the first pass through a progressive JPEG or CMP file.
 | FILEREAD_LASTPASS | [0x0002] This is the last pass through a progressive JPEG or CMP file.
 | FILEREAD_FIRSTROW | [0x0004] The first row of the buffer is the first row of the bitmap.
 | FILEREAD_LASTROW | [0x0008] The last row of the buffer is the last row of the bitmap.
 | FILEREAD_COMPRESSED | [0x0010] The data in the buffer is 1-bit compressed data, which you can handle as explained in Speeding Up 1-Bit Documents .
nRow | The current bitmap row number of the first line in the buffer.
nLines | The number of lines in the pBuffer buffer.
pUserData | A void pointer that you can use to access a variable or structure containing data that your callback function needs. This gives you a way to receive data indirectly from the function that uses this callback function. (This is the same pointer that you pass in the pUserData parameter of the calling function.)
 | Keep in mind that this is a void pointer, which must be cast to the appropriate data type within your callback function.

Returns

SUCCESS | The function was successful.
< 1 | An error occurred. Refer to Return Codes.

Comments

Several LEADTOOLS functions use this type of callback function. In some cases, The pBuffer buffer contains data that your callback function must output in order for the calling function to accomplish anything. In other cases, where the callback is optional, the callback gets a copy of the data, and the callback's output is in addition to the calling function's output. Refer to the description of the calling function to see how it uses the callback.

The FILEINFO structure that gets passed to the FILEREADCALLBACK function does not contain the total number of pages. To get the total number of pages, you should call L_FileInfo and set the FILEINFO_TOTALPAGES flag.

See Also

Functions

L_DecompressMemory , L_LoadFile , L_LoadFileOffset , L_LoadMemory , L_StartFeedLoad , LDicomDS::GetImage

Example

/* This FILEREADCALLBACK function paints the image as it loads */

/**************** Global declarations **************************************/

HPALETTE hpalPaint; /* Paint palette handle */
HINSTANCE hInst; /* Current instance of the application, set by the InitInstance function */
RECT rLeadDest; /* Destination rectangle for painting */
RECT rLeadSource; /* Source rectangle for painting */

/* Structure used for the callback function's user data */
typedef struct tagIMAGECBPARM
{
HWND hwnd; /* Current window */
HDC hdc; /* Device context for the current window */
L_INT nRow; /* First row in the input buffer */
} IMAGECBPARM;

/*******************************************************************************/

L_INT L_EXPORT EXT_CALLBACK LoadImageCB(pFILEINFO pFileInfo,
pBITMAPHANDLE pBitmap, L_UCHAR L_FAR *pBuffer,
L_UINT uFlags, L_INT nRow, L_INT nLines, IMAGECBPARM L_FAR* pUserData )
{
/* If this is the first call (row 0), select and realize the palette */
if((uFlags & FILEREAD_FIRSTPASS) && (uFlags & FILEREAD_FIRSTROW) )
{
/* Set the source rectangle to use the whole bitmap */
SetRect(&rLeadSource, 0, 0, pFileInfo->Width, pFileInfo->Height);
SendMessage (pUserData->hwnd, WM_QUERYNEWPALETTE, 0, 0L);
SelectPalette( pUserData->hdc, hpalPaint, TRUE );
RealizePalette(pUserData->hdc);
}

/* Paint the buffer to the specified device context */
L_PaintDCBuffer( pUserData->hdc, /* Device context - from function parameter */
pBitmap, /* Bitmap handle - from function parameter */
&rLeadSource, /* Source rect - set globally in WM_CREATE */
&rLeadSource, /* Source clip rect - same as source rect */
&rLeadDest, /* Destination rect - set globally in WM_CREATE */
&rLeadDest, /* Destination clip rect - same as destination rect */
SRCCOPY, /* ROP code for normal painting */
pBuffer, /* Input buffer - from function parameter */
nRow, /* First row in the buffer - from function parameter */
(uFlags & FILEREAD_COMPRESSED) ? -nLines : nLines );

return( SUCCESS );
}


FILESAVECALLBACK Function

#include "l_bitmap.h"

L_INT pEXT_CALLBACK YourFunction (pBitmap, pBuffer, uRow, uLines, pUserData)

pBITMAPHANDLE pBitmap; | /* pointer to the bitmap handle */
L_UCHAR L_FAR * pBuffer; | /* pointer to a buffer for the caller's input data */
L_UINT uRow; | /* first line to write to the buffer */
L_UINT uLines; | /* number of lines to write to the buffer */
L_VOID L_FAR * pUserData; | /* pointer to additional parameters */

Provides input to the L_SaveFile, L_SaveFileOffset, LDicomDS::InsertImage, and LDicomDS::SetImage functions.

Parameter | Description
pBitmap | Pointer to the bitmap handle that contains the image information.
pBuffer | Pointer to the caller's input buffer where the callback function must put the data.
uRow | The number of the first line that the callback function must put in the buffer.
uLines | The number of lines that the callback function must put in the buffer.
pUserData | A void pointer that you can use to access a variable or structure containing data that your callback function needs. This gives you a way to receive data indirectly from the function that uses this callback function. (This is the same pointer that you pass in the pUserData parameter of the calling function.)
 | Keep in mind that this is a void pointer, which must be cast to the appropriate data type within your callback function.

Returns

SUCCESS | The function was successful.
< 1 | An error occurred. Refer to Return Codes.

Comments

This type callback function is optional. If you provide a callback function, it must supply the image data. It can also do other useful things, such as updating a status bar. If you do not provide a callback function, the calling function saves data from the specified bitmap.

See Also

Functions

L_SaveFile , L_SaveFileOffset , L_StartCompressBuffer , LDicomDS::InsertImage, LDicomDS::SetImage

Example

/* This FILESAVECALLBACK function supplies image data from the LEAD bitmap,
to fulfill the minimum requirements of the callback */

L_INT L_EXPORT EXT_CALLBACK SaveImageCB (pBITMAPHANDLE pBitmap,
L_UCHAR L_FAR * pBuffer,
L_UINT nRowBegin,
L_UINT nRowsToGet,
L_VOID L_FAR * pUserData)
{
L_UINT i; /* Row counter */
L_UINT nRowLast = nRowBegin + nRowsToGet; /* Used when counting rows */

/* Put the required rows in the buffer */
for (i = nRowBegin; i < nRowLast; i++)
{
/* Get a row from the bitmap and put it in the buffer */
L_AccessBitmap (pBitmap);
L_GetBitmapRow (pBitmap, pBuffer, i, pBitmap->BytesPerLine);
L_ReleaseBitmap (pBitmap);

/* Move the pointer to the position in the buffer for the next row */
pBuffer += pBitmap->BytesPerLine;
}

return (SUCCESS);
}


Abstract Syntax Values

Value | Meaning
UID_VERIFICATION_CLASS | "1.2.840.10008.1.1"
UID_MEDIA_STORAGE_DIRECTORY | "1.2.840.10008.1.3.10"
UID_BASIC_STUDY_NOTIFICATION_CLASS | "1.2.840.10008.1.9"
UID_STORAGE_COMMITMENT_PUSH_MODEL_CLASS | "1.2.840.10008.1.20.1"
UID_STORAGE_COMMITMENT_PUSH_MODEL_INSTANCE | "1.2.840.10008.1.20.1.1"
UID_STORAGE_COMMITMENT_PULL_MODEL_CLASS | "1.2.840.10008.1.20.2"
UID_STORAGE_COMMITMENT_PULL_MODEL_INSTANCE | "1.2.840.10008.1.20.2.1"
UID_APPLICATION_CONTEXT_NAME | "1.2.840.10008.3.1.1.1"
UID_DETACHED_PATIENT_CLASS | "1.2.840.10008.3.1.2.1.1"
UID_DETACHED_PATIENT_META_CLASS | "1.2.840.10008.3.1.2.1.4"
UID_DETACHED_VISIT_CLASS | "1.2.840.10008.3.1.2.2.1"
UID_DETACHED_STUDY_CLASS | "1.2.840.10008.3.1.2.3.1"
UID_STUDY_COMPONENT_CLASS | "1.2.840.10008.3.1.2.3.2"
UID_MODALITY_PERFORMED_CLASS | "1.2.840.10008.3.1.2.3.3"
UID_MODALITY_PERFORMED_RETRIEVE_CLASS | "1.2.840.10008.3.1.2.3.4"
UID_MODALITY_PERFORMED_NOTIFICATION_CLASS | "1.2.840.10008.3.1.2.3.5"
UID_DETACHED_RESULTS_CLASS | "1.2.840.10008.3.1.2.5.1"
UID_DETACHED_RESULTS_META_CLASS | "1.2.840.10008.3.1.2.5.4"
UID_DETACHED_STUDY_META_CLASS | "1.2.840.10008.3.1.2.5.5"
UID_DETACHED_INTERPRETATION_CLASS | "1.2.840.10008.3.1.2.6.1"
UID_BASIC_FILM_SESSION_CLASS | "1.2.840.10008.5.1.1.1"
UID_BASIC_FILM_BOX_CLASS | "1.2.840.10008.5.1.1.2"
UID_BASIC_GRAYSCALE_IMAGE_BOX_CLASS | "1.2.840.10008.5.1.1.4"
UID_BASIC_COLOR_IMAGE_BOX_CLASS | "1.2.840.10008.5.1.1.4.1"
UID_REFERENCED_IMAGE_BOX_CLASS | "1.2.840.10008.5.1.1.4.2"
UID_REFERENCED_IMAGE_BOX_CLASS_RETIRED | "1.2.840.10008.5.1.1.4.2"
UID_BASIC_GRAYSCALE_PRINT_META_CLASS | "1.2.840.10008.5.1.1.9"
UID_REFERENCED_GRAYSCALE_PRINT_META_CLASS_RETIRED | "1.2.840.10008.5.1.1.9.1"
UID_PRINT_JOB_CLASS | "1.2.840.10008.5.1.1.14"
UID_BASIC_ANNOTATION_BOX_CLASS | "1.2.840.10008.5.1.1.15"
UID_PRINTER_CLASS | "1.2.840.10008.5.1.1.16"
UID_PRINTER_CONFIGURATION_RETRIEVAL_CLASS | "1.2.840.10008.5.1.1.16.376"
UID_PRINTER_INSTANCE | "1.2.840.10008.5.1.1.17"
UID_PRINTER_CONFIGURATION_RETRIEVAL_INSTANCE | "1.2.840.10008.5.1.1.17.376"
UID_BASIC_COLOR_PRINT_META_CLASS | "1.2.840.10008.5.1.1.18"
UID_REFERENCED_COLOR_PRINT_META_CLASS_RETIRED | "1.2.840.10008.5.1.1.18.1"
UID_VOI_LUT_BOX_CLASS_RETIRED | "1.2.840.10008.5.1.1.22"
UID_PRESENTATION_LUT_CLASS | "1.2.840.10008.5.1.1.23"
UID_IMAGE_OVERLAY_BOX_CLASS_RETIRED | "1.2.840.10008.5.1.1.24"
UID_BASIC_PRINT_IMAGE_OVERLAY_BOX_CLASS | "1.2.840.10008.5.1.1.24.1"
UID_PRINT_QUEUE_INSTANCE | "1.2.840.10008.5.1.1.25"
UID_PRINT_QUEUE_CLASS | "1.2.840.10008.5.1.1.26"
UID_STORED_PRINT_STORAGE_CLASS | "1.2.840.10008.5.1.1.27"
UID_HARDCOPY_GRAYSCALE_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.1.29"
UID_HARDCOPY_COLOR_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.1.30"
UID_PULL_PRINT_REQUEST_CLASS | "1.2.840.10008.5.1.1.31"
UID_PULL_STORED_PRINT_META_CLASS | "1.2.840.10008.5.1.1.32"
UID_CR_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.1"
UID_CT_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.2"
UID_US_MULTIFRAME_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.3"
UID_US_MULTIFRAME_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.3.1"
UID_MR_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.4"
UID_NM_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.5"
UID_US_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.6"
UID_US_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.6.1"
UID_SC_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.7"
UID_STANDALONE_OVERLAY_STORAGE | "1.2.840.10008.5.1.4.1.1.8"
UID_STANDALONE_CURVE_STORAGE | "1.2.840.10008.5.1.4.1.1.9"
UID_STANDALONE_MODALITY_LUT_STORAGE | "1.2.840.10008.5.1.4.1.1.10"
UID_STANDALONE_VOI_LUT_STORAGE | "1.2.840.10008.5.1.4.1.1.11"
UID_XA_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.12.1"
UID_XRF_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.12.2"
UID_XA_BIPLANE_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.12.3"
UID_NM_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.20"
UID_PET_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.128"
UID_STANDALONE_PET_CURVE_STORAGE | "1.2.840.10008.5.1.4.1.1.129"
UID_RT_IMAGE_STORAGE | "1.2.840.10008.5.1.4.1.1.481.1"
UID_RT_DOSE_STORAGE | "1.2.840.10008.5.1.4.1.1.481.2"
UID_RT_STRUCTURE_STORAGE | "1.2.840.10008.5.1.4.1.1.481.3"
UID_RT_BEAMS_TREATMENT_RECORD_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.481.4"
UID_RT_PLAN_STORAGE | "1.2.840.10008.5.1.4.1.1.481.5"
UID_RT_BRACHY_TREATMENT_RECORD_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.481.6"
UID_RT_TREATMENT_SUMMARY_RECORD_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.481.7"
UID_VL_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.77.1"
UID_VL_MULTIFRAME_IMAGE_STORAGE_RETIRED | "1.2.840.10008.5.1.4.1.1.77.2"
UID_VL_ENDOSCOPIC_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.77.1.1"
UID_VL_MICROSCOPIC_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.77.1.2"
UID_VL_SLIDE_COORDINATES_MICROSCOPIC_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.77.1.3"
UID_VL_PHOTOGRAPHIC_IMAGE_STORAGE_CLASS | "1.2.840.10008.5.1.4.1.1.77.1.4"
UID_BASIC_TEXT_SR | "1.2.840.10008.5.1.4.1.1.88.11"
UID_ENHANCED_SR | "1.2.840.10008.5.1.4.1.1.88.22"
UID_COMPREHENSIVE_SR | "1.2.840.10008.5.1.4.1.1.88.33"
UID_PAPYRUS_3_IMPLICIT_VR_LITTLE_ENDIAN | "1.2.840.10008.1.20"
UID_WAVEFORM_STORAGE | "1.2.840.10008.5.1.4.1.1.9.1"
UID_ECG_WAVEFORM_STORAGE | "1.2.840.10008.5.1.4.1.1.9.1.1"
UID_AUDIO_WAVEFORM_STORAGE | "1.2.840.10008.5.1.4.1.1.9.1.2"
UID_GE_MR_IMAGE | "1.2.840.113619.4.2"
UID_GE_CT_IMAGE | "1.2.840.113619.4.3"
UID_GE_DISPLAY_IMAGERMATION | "1.2.840.113619.4.4"
UID_GE_ARM_MIGRATION | "1.2.840.113619.4.10"
UID_GE_ARM_MIGRATION_INSTANCE | "1.2.840.113619.7.2"
UID_DX_IMAGE_STORAGE_PRESENTATION | "1.2.840.10008.5.1.4.1.1.1.1"
UID_DX_IMAGE_STORAGE_PROCESSING | "1.2.840.10008.5.1.4.1.1.1.1.1"
UID_DX_MAMMOGRAPHY_IMAGE_STORAGE_PRESENTATION | "1.2.840.10008.5.1.4.1.1.1.2"
UID_DX_MAMMOGRAPHY_IMAGE_STORAGE_PROCESSING | "1.2.840.10008.5.1.4.1.1.1.2.1"
UID_DX_INTRAORAL_IMAGE_STORAGE_PRESENTATION | "1.2.840.10008.5.1.4.1.1.1.3"
UID_DX_INTRAORAL_IMAGE_STORAGE_PROCESSING | "1.2.840.10008.5.1.4.1.1.1.3.1"
UID_PATIENT_ROOT_QUERY_FIND | "1.2.840.10008.5.1.4.1.2.1.1"
UID_PATIENT_ROOT_QUERY_MOVE | "1.2.840.10008.5.1.4.1.2.1.2"
UID_PATIENT_ROOT_QUERY_GET | "1.2.840.10008.5.1.4.1.2.1.3"
UID_STUDY_ROOT_QUERY_FIND | "1.2.840.10008.5.1.4.1.2.2.1"
UID_STUDY_ROOT_QUERY_MOVE | "1.2.840.10008.5.1.4.1.2.2.2"
UID_STUDY_ROOT_QUERY_GET | "1.2.840.10008.5.1.4.1.2.2.3"
UID_PATIENT_STUDY_QUERY_FIND | "1.2.840.10008.5.1.4.1.2.3.1"
UID_PATIENT_STUDY_QUERY_MOVE | "1.2.840.10008.5.1.4.1.2.3.2"
UID_PATIENT_STUDY_QUERY_GET | "1.2.840.10008.5.1.4.1.2.3.3"
UID_MODALITY_WORKLIST_FIND | "1.2.840.10008.5.1.4.31"


C-CANCEL-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-CANCEL-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000100 | Command Field | US | 1 | 0x0FFF
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT


C-ECHO-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-ECHO-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M = UID_VERIFICATION_CLASS
0x00000100 | Command Field | US | 1 | 0x0030
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT


C-ECHO-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the C-ECHO-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U = UID_VERIFICATION_CLASS
0x00000100 | Command Field | US | 1 | 0x8030
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M


C-FIND-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-FIND-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0020
0x00000110 | Message ID | US | 1 | M
0x00000700 | Priority | US | 1 | M
0x00000800 | Data Set Type | US | 1 | 0x0102
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | M


C-FIND-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the C-FIND-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8020
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | 0x0102
0x00000900 | Status | US | 1 | M
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | C


C-GET-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-GET-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0010
0x00000110 | Message ID | US | 1 | M
0x00000700 | Priority | US | 1 | M
0x00000800 | Data Set Type | US | 1 | 0x0102
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | M


C-GET-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the C-GET-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8010
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001020 | Number of Remaining Sub-operations | US | 1 | C
0x00001021 | Number of Completed Sub-operations | US | 1 | C
0x00001022 | Number of Failed Sub-operations | US | 1 | C
0x00001023 | Number of Warning Sub-operations | US | 1 | C
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | U


C-MOVE-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-MOVE-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0021
0x00000110 | Message ID | US | 1 | M
0x00000600 | Move Destination | AE | 1 | M
0x00000700 | Priority | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | M


C-MOVE-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the C-MOVE-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8021
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001020 | Number of Remaining Sub-operations | US | 1 | C
0x00001021 | Number of Complete Sub-operations | US | 1 | C
0x00001022 | Number of Failed Sub-operations | US | 1 | C
0x00001023 | Number of Warning Sub-operations | US | 1 | C
Data Set | Identifier - A Data Set which encode the Identifier to be matched |  |  | U


C-STORE-REQUEST Default Table

The following table provides default information about the Command Elements contained in the C-STORE-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0001
0x00000110 | Message ID | US | 1 | M
0x00000700 | Priority | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT
0x00001000 | Affected SOP Instance UID | UI | 1 | M
0x00001030 | Move Originator Application Entity Title | AE | 1 | U
0x00001031 | Move Originator Message ID | US | 1 | U
Data Set | Application-specific Data Set |  |  | M


C-STORE-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the C-STORE-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8001
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U


Command Set Default Tables

The following tables provide default information about the available Command Sets, and their respective Command Elements.

C-STORE-REQUEST

C-STORE-RESPONSE

C-FIND-REQUEST

C-FIND-RESPONSE

C-GET-REQUEST

C-GET-RESPONSE

C-MOVE-REQUEST

C-MOVE-RESPONSE

C-CANCEL-REQUEST

C-ECHO-REQUEST

C-ECHO-RESPONSE

N-EVENT-REPORT-REQUEST

N-EVENT-REPORT-RESPONSE

N-GET-REQUEST

N-GET-RESPONSE

N-SET-REQUEST

N-SET-RESPONSE

N-ACTION-REQUEST

N-ACTION-RESPONSE

N-CREATE-REQUEST

N-CREATE-RESPONSE

N-DELETE-REQUEST

N-DELETE-RESPONSE


Compression Table

The table below contains possible combinations of compression, photometric setting, bits per pixel, and quality factor.

Compression | Photometric | BPP | QFactor
IMAGE_COMPRESSION_NONE | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 |
IMAGE_COMPRESSION_NONE | IMAGE_PHOTOMETRIC_MONOCHROME2 | 16 |
IMAGE_COMPRESSION_NONE | IMAGE_PHOTOMETRIC_PALETTE_COLOR | 8 |
IMAGE_COMPRESSION_NONE | IMAGE_PHOTOMETRIC_RGB | 24 |
IMAGE_COMPRESSION_RLE | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 |
IMAGE_COMPRESSION_RLE | IMAGE_PHOTOMETRIC_MONOCHROME2 | 16 |
IMAGE_COMPRESSION_RLE | IMAGE_PHOTOMETRIC_PALETTE_COLOR | 8 |
IMAGE_COMPRESSION_RLE | IMAGE_PHOTOMETRIC_RGB | 24 |
IMAGE_COMPRESSION_JPEG_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 |
IMAGE_COMPRESSION_JPEG_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 12 |
IMAGE_COMPRESSION_JPEG_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 16 |
IMAGE_COMPRESSION_JPEG_LOSSLESS | IMAGE_PHOTOMETRIC_RGB | 24 |
IMAGE_COMPRESSION_JPEG_LOSSY | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 | 2-255
IMAGE_COMPRESSION_JPEG_LOSSY | IMAGE_PHOTOMETRIC_MONOCHROME2 | 12 | 2-255
IMAGE_COMPRESSION_JPEG_LOSSY | IMAGE_PHOTOMETRIC_RGB | 24 | 2-255
IMAGE_COMPRESSION_J2K_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 |
IMAGE_COMPRESSION_J2K_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 12 |
IMAGE_COMPRESSION_J2K_LOSSLESS | IMAGE_PHOTOMETRIC_MONOCHROME2 | 16 |
IMAGE_COMPRESSION_J2K_LOSSLESS | IMAGE_PHOTOMETRIC_RGB | 24 |
IMAGE_COMPRESSION_J2K_LOSSY | IMAGE_PHOTOMETRIC_MONOCHROME2 | 8 | 2-255
IMAGE_COMPRESSION_J2K_LOSSY | IMAGE_PHOTOMETRIC_MONOCHROME2 | 12 | 2-255
IMAGE_COMPRESSION_J2K_LOSSY | IMAGE_PHOTOMETRIC_MONOCHROME2 | 16 | 2-255
IMAGE_COMPRESSION_J2K_LOSSY | IMAGE_PHOTOMETRIC_RGB | 24 | 2-255


Context Identifier Values

LEADTOOLS maintains an internal table of the Context Groups defined by the DICOM Content Mapping Resource (DCMR). The following is a list of the Context Identifiers (CIDs) of these Context Groups, along with their names.

Value | Context ID | Name
CID_2 | "CID 2" | "Anatomic Modifier"
CID_4 | "CID 4" | "Anatomic Region"
CID_5 | "CID 5" | "Transducer Approach"
CID_6 | "CID 6" | "Transducer Orientation"
CID_7 | "CID 7" | "Ultrasound Beam Path"
CID_8 | "CID 8" | "Angiographic Interventional Devices"
CID_9 | "CID 9" | "Image Guided Therapeutic Procedures"
CID_10 | "CID 10" | "Interventional Drug"
CID_11 | "CID 11" | "Route of Administration"
CID_12 | "CID 12" | "Radiographic Contrast Agent"
CID_18 | "CID 18" | "Isotopes in Radiopharmaceuticals"
CID_19 | "CID 19" | "Patient Orientation"
CID_20 | "CID 20" | "Patient Orientation Modifier"
CID_21 | "CID 21" | "Patient Gantry Relationship"
CID_23 | "CID 23" | "Cranio-caudad Angulation"
CID_25 | "CID 25" | "Radiopharmaceuticals"
CID_26 | "CID 26" | "Nuclear Medicine Projections"
CID_29 | "CID 29" | "Acquisition Modality"
CID_30 | "CID 30" | "DICOM Devices"
CID_42 | "CID 42" | "Numeric Value Qualifier"
CID_82 | "CID 82" | "Units of Measurement"
CID_244 | "CID 244" | "Laterality"
CID_3001 | "CID 3001" | "ECG Leads"
CID_3003 | "CID 3003" | "Hemodynamic Waveform Sources"
CID_3010 | "CID 3010" | "Cardiovascular Anatomic Locations"
CID_3011 | "CID 3011" | "Electrophysiology Anatomic Locations"
CID_3014 | "CID 3014" | "Coronary Artery Segments"
CID_3015 | "CID 3015" | "Coronary Arteries"
CID_3019 | "CID 3019" | "Cardiovascular Anatomic Location Modifiers"
CID_3082 | "CID 3082" | "Cardiology Units of Measurement"
CID_3090 | "CID 3090" | "Time Synchronization Channel Types"
CID_3101 | "CID 3101" | "NM Procedural State Values"
CID_3240 | "CID 3240" | "Electrophysiology Measurement Functions and Techniques"
CID_3241 | "CID 3241" | "Hemodynamic Measurement Techniques"
CID_3250 | "CID 3250" | "Catheterization Procedure Phase"
CID_3254 | "CID 3254" | "Electrophysiology Procedure Phase"
CID_3261 | "CID 3261" | "Stress Protocols"
CID_3262 | "CID 3262" | "ECG Patient State Values"
CID_3263 | "CID 3263" | "Electrode Placement Values"
CID_3264 | "CID 3264" | "XYZ Electrode Placement Values"
CID_3271 | "CID 3271" | "Hemodynamic Physiological Challenges"
CID_3335 | "CID 3335" | "ECG Annotations"
CID_3337 | "CID 3337" | "Hemodynamic Annotations"
CID_3339 | "CID 3339" | "Electrophysiology Annotations"
CID_4009 | "CID 4009" | "DX Anatomy Images"
CID_4010 | "CID 4010" | "DX View"
CID_4011 | "CID 4011" | "DX View Modifier"
CID_4012 | "CID 4012" | "Projection Eponymous Name"
CID_4013 | "CID 4013" | "Anatomic Region for Mammography"
CID_4014 | "CID 4014" | "View for Mammography"
CID_4015 | "CID 4015" | "View Modifier for Mammography"
CID_4016 | "CID 4016" | "Anatomic Region for Intra-oral Radiography"
CID_4017 | "CID 4017" | "Anatomic Region Modifier for Intra-oral Radiography"
CID_4018 | "CID 4018" | "Primary Anatomic Structure for Intra-oral Radiography (Permanent Dentition - Designation of Teeth)"
CID_4019 | "CID 4019" | "Primary Anatomic Structure for Intra-oral Radiography (Deciduous Dentition - Designation of Teeth)"
CID_4020 | "CID 4020" | "PET Radionuclide"
CID_4021 | "CID 4021" | "PET Radiopharmaceutical"
CID_4030 | "CID 4030" | "MR Spectroscopy Metabolites"
CID_4031 | "CID 4031" | "MR Proton Spectroscopy Metabolites"
CID_4200 | "CID 4200" | "Ophthalmic Imaging Agent"
CID_4201 | "CID 4201" | "Patient Eye Movement Command"
CID_4202 | "CID 4202" | "Ophthalmic Photography Acquisition Device"
CID_4203 | "CID 4203" | "Ophthalmic Photography Illumination"
CID_4204 | "CID 4204" | "Ophthalmic Filter"
CID_4205 | "CID 4205" | "Ophthalmic Lens"
CID_4206 | "CID 4206" | "Ophthalmic Channel Description"
CID_4207 | "CID 4207" | "Ophthalmic Image Position"
CID_4208 | "CID 4208" | "Mydriatic Agent"
CID_4209 | "CID 4209" | "Ophthalmic Anatomic Structure Imaged"
CID_5000 | "CID 5000" | "Languages"
CID_5001 | "CID 5001" | "Countries"
CID_6000 | "CID 6000" | "Overall Breast Composition"
CID_6001 | "CID 6001" | "Overall Breast Composition from BI-RADS®"
CID_6002 | "CID 6002" | "Change Since Last Mammogram or Prior Surgery"
CID_6003 | "CID 6003" | "Change Since Last Mammogram or Prior Surgery from BI-RADS®"
CID_6004 | "CID 6004" | "Mammography Characteristics of Shape"
CID_6005 | "CID 6005" | "Characteristics of Shape from BI-RADS®"
CID_6006 | "CID 6006" | "Mammography Characteristics of Margin"
CID_6007 | "CID 6007" | "Characteristics of Margin from BI-RADS®"
CID_6008 | "CID 6008" | "Density Modifier"
CID_6009 | "CID 6009" | "Density Modifier from BI-RADS®"
CID_6010 | "CID 6010" | "Mammography Calcification Types"
CID_6011 | "CID 6011" | "Calcification Types from BI-RADS®"
CID_6012 | "CID 6012" | "Calcification Distribution Modifier"
CID_6013 | "CID 6013" | "Calcification Distribution Modifier from BI-RADS®"
CID_6014 | "CID 6014" | "Mammography Single Image Finding"
CID_6015 | "CID 6015" | "Single Image Finding from BI-RADS®"
CID_6016 | "CID 6016" | "Mammography Composite Feature"
CID_6017 | "CID 6017" | "Composite Feature from BI-RADS®"
CID_6018 | "CID 6018" | "Clockface Location or Region"
CID_6019 | "CID 6019" | "Clockface Location or Region from BI-RADS®"
CID_6020 | "CID 6020" | "Quadrant Location"
CID_6021 | "CID 6021" | "Quadrant Location from BI-RADS®"
CID_6022 | "CID 6022" | "Side"
CID_6023 | "CID 6023" | "Side from BI-RADS®"
CID_6024 | "CID 6024" | "Depth"
CID_6025 | "CID 6025" | "Depth from BI-RADS®"
CID_6026 | "CID 6026" | "Mammography Assessment"
CID_6027 | "CID 6027" | "Assessment from BI-RADS®"
CID_6028 | "CID 6028" | "Mammography Recommended Follow-up"
CID_6029 | "CID 6029" | "Recommended Follow-up from BI-RADS®"
CID_6030 | "CID 6030" | "Mammography Pathology Codes"
CID_6031 | "CID 6031" | "Benign Pathology Codes from BI-RADS®"
CID_6032 | "CID 6032" | "High Risk Lesions Pathology Codes from BI-RADS®"
CID_6033 | "CID 6033" | "Malignant Pathology Codes from BI-RADS®"
CID_6034 | "CID 6034" | "Intended Use of CAD Output"
CID_6035 | "CID 6035" | "Composite Feature Relations"
CID_6036 | "CID 6036" | "Scope of Feature"
CID_6037 | "CID 6037" | "Mammography Quantitative Temporal Difference Type"
CID_6038 | "CID 6038" | "Mammography Qualitative Temporal Difference Type"
CID_6039 | "CID 6039" | "Nipple Characteristic"
CID_6040 | "CID 6040" | "Non-Lesion Object Type"
CID_6041 | "CID 6041" | "Mammography Image Quality Finding"
CID_6042 | "CID 6042" | "Status of Results"
CID_6043 | "CID 6043" | "Types of Mammography CAD Analysis"
CID_6044 | "CID 6044" | "Types of Image Quality Assessment"
CID_6045 | "CID 6045" | "Mammography Types of Quality Control Standard"
CID_6046 | "CID 6046" | "Units of Follow-up Interval"
CID_6047 | "CID 6047" | "CAD Processing and Findings Summary"
CID_6100 | "CID 6100" | "Chest Component Categories"
CID_6101 | "CID 6101" | "Chest Finding or Feature"
CID_6102 | "CID 6102" | "Chest Finding or Feature Modifier"
CID_6103 | "CID 6103" | "Abnormal Lines Finding or Feature"
CID_6104 | "CID 6104" | "Abnormal Opacity Finding or Feature"
CID_6105 | "CID 6105" | "Abnormal Lucency Finding or Feature"
CID_6106 | "CID 6106" | "Abnormal Texture Finding or Feature"
CID_6107 | "CID 6107" | "Width Descriptor"
CID_6108 | "CID 6108" | "Chest Anatomic Structure Abnormal Distribution"
CID_6109 | "CID 6109" | "Radiographic Anatomy Finding or Feature"
CID_6110 | "CID 6110" | "Lung Anatomy Finding or Feature"
CID_6111 | "CID 6111" | "Bronchovascular Anatomy Finding or Feature"
CID_6112 | "CID 6112" | "Pleura Anatomy Finding or Feature"
CID_6113 | "CID 6113" | "Mediastinum Anatomy Finding or Feature"
CID_6114 | "CID 6114" | "Osseous Anatomy Finding or Feature"
CID_6115 | "CID 6115" | "Osseous Anatomy Modifiers"
CID_6116 | "CID 6116" | "Muscular Anatomy"
CID_6117 | "CID 6117" | "Vascular Anatomy"
CID_6118 | "CID 6118" | "Size Descriptor"
CID_6119 | "CID 6119" | "Chest Border Shape"
CID_6120 | "CID 6120" | "Chest Border Definition"
CID_6121 | "CID 6121" | "Chest Orientation Descriptor"
CID_6122 | "CID 6122" | "Chest Content Descriptor"
CID_6123 | "CID 6123" | "Chest Opacity Descriptor"
CID_6124 | "CID 6124" | "Location in Chest"
CID_6125 | "CID 6125" | "General Chest Location"
CID_6126 | "CID 6126" | "Location in Lung"
CID_6127 | "CID 6127" | "Segment Location in Lung"
CID_6128 | "CID 6128" | "Chest Distribution Descriptor"
CID_6129 | "CID 6129" | "Chest Site Involvement"
CID_6130 | "CID 6130" | "Severity Descriptor"
CID_6131 | "CID 6131" | "Chest Texture Descriptor"
CID_6132 | "CID 6132" | "Chest Calcification Descriptor"
CID_6133 | "CID 6133" | "Chest Quantitative Temporal Difference Type"
CID_6134 | "CID 6134" | "Chest Qualitative Temporal Difference Type"
CID_6135 | "CID 6135" | "Chest Image Quality Finding"
CID_6136 | "CID 6136" | "Chest Types of Quality Control Standard"
CID_6137 | "CID 6137" | "Types of Chest CAD Analysis"
CID_6138 | "CID 6138" | "Chest Non-Lesion Object Type"
CID_6139 | "CID 6139" | "Non-Lesion Modifiers"
CID_6140 | "CID 6140" | "Calculation Methods"
CID_6141 | "CID 6141" | "Attenuation Coefficient Measurements"
CID_6142 | "CID 6142" | "Calculated Value"
CID_6143 | "CID 6143" | "Response Criteria"
CID_6144 | "CID 6144" | "RECIST Response Criteria"
CID_6145 | "CID 6145" | "Baseline Category"
CID_7000 | "CID 7000" | "Diagnostic Imaging Report Document Titles"
CID_7001 | "CID 7001" | "Diagnostic Imaging Report Headings"
CID_7002 | "CID 7002" | "Diagnostic Imaging Report Elements"
CID_7003 | "CID 7003" | "Diagnostic Imaging Report Purposes of Reference"
CID_7004 | "CID 7004" | "Waveform Purposes of Reference"
CID_7005 | "CID 7005" | "Contributing Equipment Purposes of Reference"
CID_7010 | "CID 7010" | "Key Object Selection Document Title"
CID_7011 | "CID 7011" | "Rejected for Quality Reasons"
CID_7012 | "CID 7012" | "Best In Set"
CID_7201 | "CID 7201" | "Referenced Image Purposes of Reference"
CID_7202 | "CID 7202" | "Source Image Purposes of Reference"
CID_7203 | "CID 7203" | "Image Derivation"
CID_7210 | "CID 7210" | "Related Series Purposes Of Reference"
CID_7452 | "CID 7452" | "Organizational Roles"
CID_7453 | "CID 7453" | "Performing Roles"
CID_7454 | "CID 7454" | "Species"
CID_7455 | "CID 7455" | "Sex"
CID_7456 | "CID 7456" | "Units of Measure for Age"
CID_7460 | "CID 7460" | "Units of Linear Measurement"
CID_7461 | "CID 7461" | "Units of Area Measurement"
CID_7462 | "CID 7462" | "Units of Volume Measurement"
CID_7470 | "CID 7470" | "Linear Measurements"
CID_7471 | "CID 7471" | "Area Measurements"
CID_7472 | "CID 7472" | "Volume Measurements"
CID_9231 | "CID 9231" | "General Purpose Workitem Definition"
CID_9232 | "CID 9232" | "Non-DICOM Output Types"
CID_9300 | "CID 9300" | "Procedure Discontinuation Reasons"
CID_12001 | "CID 12001" | "Ultrasound Protocol Types"
CID_12002 | "CID 12002" | "Ultrasound Protocol Stage Types"
CID_12140 | "CID 12140" | "Pelvic Vasculature Anatomical Location"
CID_12141 | "CID 12141" | "Fetal Vasculature Anatomical Location"


Data Element Tag Constants

The following is a list of the default Data Element Tags that are standard for the DICOM file format.

Code constant | Code value
TAG_FILE_META_INFORMATION_VERSION | 0x00020001
TAG_MEDIA_STORAGE_SOP_CLASS_UID | 0x00020002
TAG_MEDIA_STORAGE_SOP_INSTANCE_UID | 0x00020003
TAG_TRANSFER_SYNTAX_UID | 0x00020010
TAG_IMPLEMENTATION_CLASS_UID | 0x00020012
TAG_IMPLEMENTATION_VERSION_NAME | 0x00020013
TAG_SOURCE_APPLICATION_ENTITY_TITLE | 0x00020016
TAG_PRIVATE_INFORMATION_CREATOR_UID | 0x00020100
TAG_PRIVATE_INFORMATION | 0x00020102
TAG_FILE_SET_ID | 0x00041130
TAG_FILE_SET_DESCRIPTOR_FILE_ID | 0x00041141
TAG_SPECIFIC_CHARACTER_SET_OF_FILE | 0x00041142
TAG_OFFSET_FIRST_ROOT_DIRECTORY | 0x00041200
TAG_OFFSET_LAST_ROOT_DIRECTORY | 0x00041202
TAG_FILE_SET_CONSISTENCY_FLAG | 0x00041212
TAG_DIRECTORY_RECORD_SEQUENCE | 0x00041220
TAG_OFFSET_NEXT_DIRECTORY | 0x00041400
TAG_RECORD_IN_USE_FLAG | 0x00041410
TAG_OFFSET_CHILD_DIRECTORY | 0x00041420
TAG_DIRECTORY_RECORD_TYPE | 0x00041430
TAG_PRIVATE_RECORD_UID | 0x00041432
TAG_REFERENCED_FILE_ID | 0x00041500
TAG_OFFSET_MRDR_DIRECTORY | 0x00041504
TAG_REFERENCED_SOP_CLASS_UID_IN_FILE | 0x00041510
TAG_REFERENCED_SOP_INSTANCE_UID_IN_FILE | 0x00041511
TAG_REFERENCED_TRANSFER_SYNTAX_UID_IN_FILE | 0x00041512
TAG_NUMBER_OF_REFERENCES | 0x00041600
TAG_SPECIFIC_CHARACTER_SET | 0x00080005
TAG_IMAGE_TYPE | 0x00080008
TAG_INSTANCE_CREATION_DATE | 0x00080012
TAG_INSTANCE_CREATION_TIME | 0x00080013
TAG_INSTANCE_CREATOR_UID | 0x00080014
TAG_SOP_CLASS_UID | 0x00080016
TAG_SOP_INSTANCE_UID | 0x00080018
TAG_STUDY_DATE | 0x00080020
TAG_SERIES_DATE | 0x00080021
TAG_ACQUISITION_DATE | 0x00080022
TAG_IMAGE_DATE | 0x00080023
TAG_OVERLAY_DATE | 0x00080024
TAG_CURVE_DATE | 0x00080025
TAG_STUDY_TIME | 0x00080030
TAG_SERIES_TIME | 0x00080031
TAG_ACQUISITION_TIME | 0x00080032
TAG_IMAGE_TIME | 0x00080033
TAG_OVERLAY_TIME | 0x00080034
TAG_CURVE_TIME | 0x00080035
TAG_NUCLEAR_MEDICINE_SERIES_TYPE_RETIRED | 0x00080042
TAG_ACCESSION_NUMBER | 0x00080050
TAG_QUERY_RETRIEVE_LEVEL | 0x00080052
TAG_RETRIEVE_AE_TITLE | 0x00080054
TAG_FAILED_SOP_INSTANCE_UID_LIST | 0x00080058
TAG_MODALITY | 0x00080060
TAG_MODALITIES_IN_STUDY | 0x00080061
TAG_CONVERSION_TYPE | 0x00080064
TAG_PRESENTATION_INTENT_TYPE | 0x00080068
TAG_MANUFACTURER | 0x00080070
TAG_INSTITUTION_NAME | 0x00080080
TAG_INSTITUTION_ADDRESS | 0x00080081
TAG_INSTITUTION_CODE_SEQUENCE | 0x00080082
TAG_REFERRING_PHYSICIAN_NAME | 0x00080090
TAG_REFERRING_PHYSICIAN_ADDRESS | 0x00080092
TAG_REFERRING_PHYSICIAN_TELEPHONE_NUMBERS | 0x00080094
TAG_REFERRING_PHYSICIAN_IDENTIFICATION_SEQUENCE | 0x00080096
TAG_CODE_VALUE | 0x00080100
TAG_CODING_SCHEME_DESIGNATOR | 0x00080102
TAG_CODE_MEANING | 0x00080104
TAG_CONTEXT_GROUP_LOCAL_VERSION | 0x00080107
TAG_CONTEXT_GROUP_EXTENSION_FLAG | 0x0008010B
TAG_CODING_SCHEME_UID | 0x0008010C
TAG_CONTEXT_GROUP_EXTENSION_CREATOR_UID | 0x0008010D
TAG_CODING_SCHEME_IDENTIFICATION_SEQUENCE | 0x00080110
TAG_CODING SCHEME REGISTRY | 0x00080112
TAG_CODING_SCHEME_EXTERNAL_ID | 0x00080114
TAG_CODING_SCHEME_NAME | 0x00080115
TAG_RESPONSIBLE_ORGANIZATION | 0x00080116
TAG_STATION_NAME | 0x00081010
TAG_STUDY_DESCRIPTION | 0x00081030
TAG_PROCEDURE_CODE_SEQUENCE | 0x00081032
TAG_SERIES_DESCRIPTION | 0x0008103E
TAG_INSTITUTIONAL_DEPARTMENT_NAME | 0x00081040
TAG_PHYSICIAN_OF_RECORD | 0x00081048
TAG_PHYSICIAN_OF_RECORD_IDENTIFICATION_SEQUENCE | 0x00081049
TAG_PERFORMING_PHYSICIAN_NAME | 0x00081050
TAG_PERFORMING_PHYSICIAN_IDENTIFICATION_SEQUENCE | 0x00081052
TAG_NAME_OF_PHYSICIAN_READING_STUDY | 0x00081060
TAG_PHYSICIAN_READING_STUDY_IDENTIFICATION_SEQUENCE | 0x00081062
TAG_OPERATORS_NAME | 0x00081070
TAG_OPERATOR_IDENTIFICATION_SEQUENCE | 0x00081072
TAG_ADMITTING_DIAGNOSES_DESCRIPTION | 0x00081080
TAG_ADMITTING_DIAGNOSIS_CODE_SEQUENCE | 0x00081084
TAG_MANUFACTURER_MODEL_NAME | 0x00081090
TAG_REFERENCED_RESULTS_SEQUENCE | 0x00081100
TAG_REFERENCED_STUDY_SEQUENCE | 0x00081110
TAG_REFERENCED_STUDY_COMPONENT_SEQUENCE | 0x00081111
TAG_REFERENCED_SERIES_SEQUENCE | 0x00081115
TAG_REFERENCED_PATIENT_SEQUENCE | 0x00081120
TAG_REFERENCED_VISIT_SEQUENCE | 0x00081125
TAG_REFERENCED_OVERLAY_SEQUENCE_0008 | 0x00081130
TAG_REFERENCED_WAVEFORM_SEQUENCE | 0x0008113A
TAG_REFERENCED_IMAGE_SEQUENCE | 0x00081140
TAG_REFERENCED_INSTANCE_SEQUENCE | 0x0008114A
TAG_REFERENCED_CURVE_SEQUENCE | 0x00081145
TAG_REFERENCED_SOP_CLASS_UID | 0x00081150
TAG_REFERENCED_SOP_INSTANCE_UID | 0x00081155
TAG_SOP_CLASSES_SUPPORTED | 0x0008115A
TAG_REFERENCED_FRAME_NUMBER | 0x00081160
TAG_TRANSACTION_UID | 0x00081195
TAG_FAILURE_REASON | 0x00081197
TAG_FAILED_SOP_SEQUENCE | 0x00081198
TAG_REFERENCED_SOP_SEQUENCE | 0x00081199
TAG_STUDIES_CONTAINING_OTHER_REFERENCED_INSTANCES_SEQUENCE | 0x00081200
TAG_LOSSY_IMAGE_COMPRESSION_RETIRED | 0x00082110
TAG_DERIVATION_DESCRIPTION | 0x00082111
TAG_SOURCE_IMAGE_SEQUENCE | 0x00082112
TAG_STAGE_NAME | 0x00082120
TAG_STAGE_NUMBER | 0x00082122
TAG_NUMBER_OF_STAGES | 0x00082124
TAG_VIEW_NAME | 0x00082127
TAG_VIEW_NUMBER | 0x00082128
TAG_NUMBER_OF_EVENT_TIMERS | 0x00082129
TAG_NUMBER_OF_VIEWS_IN_STAGE | 0x0008212A
TAG_EVENT_ELAPSED_TIME | 0x00082130
TAG_EVENT_TIMER_NAME | 0x00082132
TAG_START_TRIM | 0x00082142
TAG_STOP_TRIM | 0x00082143
TAG_RECOMMENDED_DISPLAY_FRAME_RATE | 0x00082144
TAG_TRANSDUCER_POSITION_RETIRED | 0x00082200
TAG_TRANSDUCER_ORIENTATION_RETIRED | 0x00082204
TAG_ANATOMIC_STRUCTURE_RETIRED | 0x00082208
TAG_ANATOMIC_REGION_SEQUENCE | 0x00082218
TAG_ANATOMIC_REGION_MODIFIER_SEQUENCE | 0x00082220
TAG_PRIMARY_ANATOMIC_STRUCTURE_SEQUENCE | 0x00082228
TAG_ANATOMIC_STRUCTURE_SPACE_OR_REGION_SEQUENCE | 0x00082229
TAG_PRIMARY_ANATOMIC_STRUCTURE_MODIFIER_SEQUENCE | 0x00082230
TAG_TRANSDUCER_POSITION_SEQUENCE | 0x00082240
TAG_TRANSDUCER_POSITION_MODIFIER_SEQUENCE | 0x00082242
TAG_TRANSDUCER_ORIENTATION_SEQUENCE | 0x00082244
TAG_TRANSDUCER_ORIENTATION_MODIFIER_SEQUENCE | 0x00082246
TAG_FRAME_TYPE | 0x00089007
TAG_REFERENCED_IMAGE_EVIDENCE_SEQUENCE | 0x00089092
TAG_REFERENCED_RAW_DATA_SEQUENCE | 0x00089121
TAG_CREATOR_VERSION_UID | 0x00089123
TAG_DERIVATION_IMAGE_SEQUENCE | 0x00089124
TAG_SOURCE_IMAGE_EVIDENCE_SEQUENCE | 0x00089154
TAG_PIXEL_PRESENTATION | 0x00089205
TAG_VOLUMETRIC_PROPERTIES | 0x00089206
TAG_VOLUME_BASED_CALCULATION_TECHNIQUE | 0x00089207
TAG_COMPLEX_IMAGE_COMPONENT | 0x00089208
TAG_ACQUISITION_CONTRAST | 0x00089209
TAG_DERIVATION_CODE_SEQUENCE | 0x00089215
TAG_REFERENCED_GRAYSCALE_PRESENTATION_STATE_SEQUENCE | 0x00089237
TAG_PATIENT_NAME | 0x00100010
TAG_PATIENT_ID | 0x00100020
TAG_ISSUER_OF_PATIENT_ID | 0x00100021
TAG_PATIENT_BIRTH_DATE | 0x00100030
TAG_PATIENT_BIRTH_TIME | 0x00100032
TAG_PATIENT_SEX | 0x00100040
TAG_PATIENT_INSURANCE_PLAN_CODE_SEQUENCE | 0x00100050
TAG_PATIENT_PRIMARY_LANGUAGE_CODE_SEQUENCE | 0x00100101
TAG_PATIENT_PRIMARY_LANGUAGE_CODE_MODIFIER_SEQUENCE | 0x00100102
TAG_OTHER_PATIENT_IDS | 0x00101000
TAG_OTHER_PATIENT_NAMES | 0x00101001
TAG_PATIENT_BIRTH_NAME | 0x00101005
TAG_PATIENT_AGE | 0x00101010
TAG_PATIENT_SIZE | 0x00101020
TAG_PATIENT_WEIGHT | 0x00101030
TAG_PATIENT_ADDRESS | 0x00101040
TAG_PATIENT_MOTHER_BIRTH_NAME | 0x00101060
TAG_MILITARY_RANK | 0x00101080
TAG_BRANCH_OF_SERVICE | 0x00101081
TAG_MEDICAL_RECORD_LOCATOR | 0x00101090
TAG_MEDICAL_ALERTS | 0x00102000
TAG_CONTRAST_ALLERGIES | 0x00102110
TAG_COUNTRY_OF_RESIDENCE | 0x00102150
TAG_REGION_OF_RESIDENCE | 0x00102152
TAG_PATIENT_TELEPHONE_NUMBERS | 0x00102154
TAG_ETHNIC_GROUP | 0x00102160
TAG_OCCUPATION | 0x00102180
TAG_SMOKING_STATUS | 0x001021A0
TAG_ADDITIONAL_PATIENT_HISTORY | 0x001021B0
TAG_PREGNANCY_STATUS | 0x001021C0
TAG_LAST_MENSTRUAL_DATE | 0x001021D0
TAG_PATIENT_RELIGIOUS_PREFERENCE | 0x001021F0
TAG_PATIENT_COMMENTS | 0x00104000
TAG_CLINICAL_TRIAL_SPONSOR_NAME | 0x00120010
TAG_CLINICAL_TRIAL_PROTOCOL_ID | 0x00120020
TAG_CLINICAL_TRIAL_PROTOCOL_NAME | 0x00120021
TAG_CLINICAL_TRIAL_SITE_ID | 0x00120030
TAG_CLINICAL_TRIAL_SITE_NAME | 0x00120031
TAG_CLINICAL_TRIAL_SUBJECT_ID | 0x00120040
TAG_CLINICAL_TRIAL_SUBJECT_READING_ID | 0x00120042
TAG_CLINICAL_TRIAL_TIME_POINT_ID | 0x00120050
TAG_CLINICAL_TRIAL_TIME_POINT_DESCRIPTION | 0x00120051
TAG_CLINICAL_TRIAL_COORDINATING_CENTER_NAME | 0x00120060
TAG_CONTRAST_BOLUS_AGENT | 0x00180010
TAG_CONTRAST_BOLUS_AGENT_SEQUENCE | 0x00180012
TAG_CONTRAST_BOLUS_ADMINISTRATION_ROUTE_SEQUENCE | 0x00180014
TAG_BODY_PART_EXAMINED | 0x00180015
TAG_SCANNING_SEQUENCE | 0x00180020
TAG_SEQUENCE_VARIANT | 0x00180021
TAG_SCAN_OPTIONS | 0x00180022
TAG_MR_ACQUISITION_TYPE | 0x00180023
TAG_SEQUENCE_NAME | 0x00180024
TAG_ANGIO_FLAG | 0x00180025
TAG_INTERVENTION_DRUG_INFORMATION_SEQUENCE | 0x00180026
TAG_INTERVENTION_DRUG_STOP_TIME | 0x00180027
TAG_INTERVENTION_DRUG_DOSE | 0x00180028
TAG_INTERVENTION_DRUG_CODE_SEQUENCE | 0x00180029
TAG_ADDITIONAL_DRUG_SEQUENCE | 0x0018002A
TAG_RADIONUCLIDE_RETIRED | 0x00180030
TAG_RADIOPHARMACEUTICAL | 0x00180031
TAG_ENERGY_WINDOW_CENTERLINE_RETIRED | 0x00180032
TAG_ENERGY_WINDOW_TOTAL_WIDTH_RETIRED | 0x00180033
TAG_INTERVENTION_DRUG_NAME | 0x00180034
TAG_INTERVENTION_DRUG_START_TIME | 0x00180035
TAG_INTERVENTIONAL_THERAPY_SEQUENCE | 0x00180036
TAG_THERAPY_TYPE | 0x00180037
TAG_INTERVENTIONAL_STATUS | 0x00180038
TAG_THERAPY_DESCRIPTION | 0x00180039
TAG_CINE_RATE | 0x00180040
TAG_SLICE_THICKNESS | 0x00180050
TAG_KVP | 0x00180060
TAG_COUNTS_ACCUMULATED | 0x00180070
TAG_ACQUISITION_TERMINATION_CONDITION | 0x00180071
TAG_EFFECTIVE_SERIES_DURATION | 0x00180072
TAG_ACQUISITION_START_CONDITION | 0x00180073
TAG_ACQUISITION_START_CONDITION_DATA | 0x00180074
TAG_ACQUISITION_TERMINATION_CONDITION_DATA | 0x00180075
TAG_REPETITION_TIME | 0x00180080
TAG_ECHO_TIME | 0x00180081
TAG_INVERSION_TIME | 0x00180082
TAG_NUMBER_OF_AVERAGES | 0x00180083
TAG_IMAGING_FREQUENCY | 0x00180084
TAG_IMAGED_NUCLEUS | 0x00180085
TAG_ECHO_NUMBER | 0x00180086
TAG_MAGNETIC_FIELD_STRENGTH | 0x00180087
TAG_SPACING_BETWEEN_SLICES | 0x00180088
TAG_NUMBER_OF_PHASE_ENCODING_STEPS | 0x00180089
TAG_DATA_COLLECTION_DIAMETER | 0x00180090
TAG_ECHO_TRAIN_LENGTH | 0x00180091
TAG_PERCENT_SAMPLING | 0x00180093
TAG_PERCENT_PHASE_FIELD_OF_VIEW | 0x00180094
TAG_PIXEL_BANDWIDTH | 0x00180095
TAG_DEVICE_SERIAL_NUMBER | 0x00181000
TAG_PLATE_ID | 0x00181004
TAG_SECONDARY_CAPTURE_DEVICE_ID | 0x00181010
TAG_HARDCOPY_CREATION_DEVICE_ID | 0x00181011
TAG_DATE_OF_SECONDARY_CAPTURE | 0x00181012
TAG_TIME_OF_SECONDARY_CAPTURE | 0x00181014
TAG_SECONDARY_CAPTURE_DEVICE_MANUFACTURER | 0x00181016
TAG_HARDCOPY_DEVICE_MANUFACTURER | 0x00181017
TAG_SECONDARY_CAPTURE_DEVICE_MANUFACTURER_MODEL_NAME | 0x00181018
TAG_SECONDARY_CAPTURE_DEVICE_SOFTWARE_VERSION | 0x00181019
TAG_HARDCOPY_DEVICE_SOFTWARE_VERSION | 0x0018101A
TAG_HARDCOPY_DEVICE_MANFUACTURER_MODEL_NAME | 0x0018101B
TAG_SOFTWARE_VERSION | 0x00181020
TAG_VIDEO_IMAGE_FORMAT_ACQUIRED | 0x00181022
TAG_DIGITAL_IMAGE_FORMAT_ACQUIRED | 0x00181023
TAG_PROTOCOL_NAME | 0x00181030
TAG_CONTRAST_BOLUS_ROUTE | 0x00181040
TAG_CONTRAST_BOLUS_VOLUME | 0x00181041
TAG_CONTRAST_BOLUS_START_TIME | 0x00181042
TAG_CONTRAST_BOLUS_STOP_TIME | 0x00181043
TAG_CONTRAST_BOLUS_TOTAL_DOSE | 0x00181044
TAG_SYRINGE_COUNTS | 0x00181045
TAG_CONTRAST_FLOW_RATE | 0x00181046
TAG_CONTRAST_FLOW_DURATION | 0x00181047
TAG_CONTRAST_BOLUS_INGREDIENT | 0x00181048
TAG_CONTRAST_BOLUS_INGREDIENT_CONCENTRATION | 0x00181049
TAG_SPATIAL_RESOLUTION | 0x00181050
TAG_TRIGGER_TIME | 0x00181060
TAG_TRIGGER_SOURCE_OR_TYPE | 0x00181061
TAG_NOMINAL_INTERVAL | 0x00181062
TAG_FRAME_TIME | 0x00181063
TAG_FRAMING_TYPE | 0x00181064
TAG_FRAME_TIME_VECTOR | 0x00181065
TAG_FRAME_DELAY | 0x00181066
TAG_RADIOPHARMACEUTICAL_ROUTE | 0x00181070
TAG_RADIOPHARMACEUTICAL_VOLUME | 0x00181071
TAG_RADIOPHARMACEUTICAL_START_TIME | 0x00181072
TAG_RADIOPHARMACEUTICAL_STOP_TIME | 0x00181073
TAG_RADIONUCLIDE_TOTAL_DOSE | 0x00181074
TAG_RADIONUCLIDE_HALF_LIFE | 0x00181075
TAG_RADIONUCLIDE_POSITRON_FRACTION | 0x00181076
TAG_RADIOPHARMACEUTICAL_SPECIFIC_ACTIVITY | 0x00181077
TAG_BEAT_REJECTION_FLAG | 0x00181080
TAG_LOW_R_R_VALUE | 0x00181081
TAG_HIGH_R_R_VALUE | 0x00181082
TAG_INTERVALS_ACQUIRED | 0x00181083
TAG_INTERVALS_REJECTED | 0x00181084
TAG_PVC_REJECTION | 0x00181085
TAG_SKIP_BEATS | 0x00181086
TAG_HEART_RATE | 0x00181088
TAG_CARDIAC_NUMBER_OF_IMAGES | 0x00181090
TAG_TRIGGER_WINDOW | 0x00181094
TAG_RECONSTRUCTION_DIAMETER | 0x00181100
TAG_DISTANCE_SOURCE_TO_DETECTOR | 0x00181110
TAG_DISTANCE_SOURCE_TO_PATIENT | 0x00181111
TAG_ESTIMATED_RADIOGRAPHIC_MAGNIFICATION_FACTOR | 0x00181114
TAG_GANTRY_DETECTOR_TILT | 0x00181120
TAG_GANTRY_DETECTOR_SLEW | 0x00181121
TAG_TABLE_HEIGHT | 0x00181130
TAG_TABLE_TRAVERSE | 0x00181131
TAG_TABLE_MOTION | 0x00181134
TAG_TABLE_VERTICAL_INCREMENT | 0x00181135
TAG_TABLE_LATERAL_INCREMENT | 0x00181136
TAG_TABLE_LONGITUDINAL_INCREMENT | 0x00181137
TAG_TABLE_ANGLE | 0x00181138
TAG_ROTATION_DIRECTION | 0x00181140
TAG_ANGULAR_POSITION | 0x00181141
TAG_RADIAL_POSITION | 0x00181142
TAG_SCAN_ARC | 0x00181143
TAG_ANGULAR_STEP | 0x00181144
TAG_CENTER_OF_ROTATION_OFFSET | 0x00181145
TAG_ROTATION_OFFSET_RETIRED | 0x00181146
TAG_FIELD_OF_VIEW_SHAPE | 0x00181147
TAG_FIELD_OF_VIEW_DIMENSION | 0x00181149
TAG_EXPOSURE_TIME | 0x00181150
TAG_X_RAY_TUBE_CURRENT | 0x00181151
TAG_EXPOSURE | 0x00181152
TAG_EXPOSURE_IN_UAS | 0x00181153
TAG_AVERAGE_PULSE_WIDTH | 0x00181154
TAG_RADIATION_SETTING | 0x00181155
TAG_RADIATION_MODE | 0x0018115A
TAG_IMAGE_AREA_DOSE_PRODUCT | 0x0018115E
TAG_FILTER_TYPE | 0x00181160
TAG_TYPE_OF_FILTERS | 0x00181161
TAG_INTENSIFIER_SIZE | 0x00181162
TAG_IMAGER_PIXEL_SPACING | 0x00181164
TAG_GRID | 0x00181166
TAG_GENERATOR_POWER | 0x00181170
TAG_COLLIMATOR_GRID_NAME | 0x00181180
TAG_COLLIMATOR_TYPE | 0x00181181
TAG_FOCAL_DISTANCE | 0x00181182
TAG_X_FOCUS_CENTER | 0x00181183
TAG_Y_FOCUS_CENTER | 0x00181184
TAG_FOCAL_SPOT | 0x00181190
TAG_DATE_OF_LAST_CALIBRATION | 0x00181200
TAG_TIME_OF_LAST_CALIBRATION | 0x00181201
TAG_CONVOLUTION_KERNEL | 0x00181210
TAG_ACTUAL_FRAME_DURATION | 0x00181242
TAG_COUNT_RATE | 0x00181243
TAG_PREFERRED_PLAYBACK_SEQUENCING | 0x00181244
TAG_RECEIVING_COIL | 0x00181250
TAG_TRANSMITTING_COIL | 0x00181251
TAG_PLATE_TYPE | 0x00181260
TAG_PHOSPHOR_TYPE | 0x00181261
TAG_SCAN_VELOCITY | 0x00181300
TAG_WHOLE_BODY_TECHNIQUE | 0x00181301
TAG_SCAN_LENGTH | 0x00181302
TAG_ACQUISITION_MATRIX | 0x00181310
TAG_PHASE_ENCODING_DIRECTION | 0x00181312
TAG_FLIP_ANGLE | 0x00181314
TAG_VARIABLE_FLIP_ANGLE_FLAG | 0x00181315
TAG_SAR | 0x00181316
TAG_DB_DT | 0x00181318
TAG_ACQUISITION_DEVICE_PROCESSING_DESCRIPTION | 0x00181400
TAG_ACQUISITION_DEVICE_PROCESSING_CODE | 0x00181401
TAG_CASSETTE_ORIENTATION | 0x00181402
TAG_CASSETTE_SIZE | 0x00181403
TAG_EXPOSURES_ON_PLATE | 0x00181404
TAG_RELATIVE_X_RAY_EXPOSURE | 0x00181405
TAG_COLUMN_ANGULATION | 0x00181450
TAG_TOMO_LAYER_HEIGHT | 0x00181460
TAG_TOMO_ANGLE | 0x00181470
TAG_TOMO_TIME | 0x00181480
TAG_POSITIONER_MOTION | 0x00181500
TAG_POSITIONER_PRIMARY_ANGLE | 0x00181510
TAG_POSITIONER_SECONDARY_ANGLE | 0x00181511
TAG_POSITIONER_PRIMARY_ANGLE_INCREMENT | 0x00181520
TAG_POSITIONER_SECONDARY_ANGLE_INCREMENT | 0x00181521
TAG_DETECTOR_PRIMARY_ANGLE | 0x00181530
TAG_DETECTOR_SECONDARY_ANGLE | 0x00181531
TAG_SHUTTER_SHAPE | 0x00181600
TAG_SHUTTER_LEFT_VERTICAL_EDGE | 0x00181602
TAG_SHUTTER_RIGHT_VERTICAL_EDGE | 0x00181604
TAG_SHUTTER_UPPER_HORIZONTAL_EDGE | 0x00181606
TAG_SHUTTER_LOWER_HORIZONTAL_EDGE | 0x00181608
TAG_CENTER_OF_CIRCULAR_SHUTTER | 0x00181610
TAG_RADIUS_OF_CIRCULAR_SHUTTER | 0x00181612
TAG_VERTICES_OF_THE_POLYGONAL_SHUTTER | 0x00181620
TAG_COLLIMATOR_SHAPE | 0x00181700
TAG_COLLIMATOR_LEFT_VERTICAL_EDGE | 0x00181702
TAG_COLLIMATOR_RIGHT_VERTICAL_EDGE | 0x00181704
TAG_COLLIMATOR_UPPER_HORIZONTAL_EDGE | 0x00181706
TAG_COLLIMATOR_LOWER_HORIZONTAL_EDGE | 0x00181708
TAG_CENTER_OF_CIRCULAR_COLLIMATOR | 0x00181710
TAG_RADIUS_OF_CIRCULAR_COLLIMATOR | 0x00181712
TAG_VERTICES_OF_THE_POLYGONAL_COLLIMATOR | 0x00181720
TAG_PAGE_NUMBER_VECTOR | 0x00182001
TAG_FRAME_LABEL_VECTOR | 0x00182002
TAG_FRAME_PRIMARY_ANGLE_VECTOR | 0x00182003
TAG_FRAME_SECONDARY_ANGLE_VECTOR | 0x00182004
TAG_SLICE_LOCATION_VECTOR | 0x00182005
TAG_DISPLAY_WINDOW_LABEL_VECTOR | 0x00182006
TAG_NOMINAL_SCANNED_PIXEL_SPACING | 0x00182010
TAG_DIGITIZING_DEVICE_TRANSPORT_DIRECTION | 0x00182020
TAG_ROTATION_OF_SCANNED_FILM | 0x00182030
TAG_IVUS_ACQUISITION | 0x00183100
TAG_IVUS_PULLBACK_RATE | 0x00183101
TAG_IVUS_GATED_RATE | 0x00183102
TAG_IVUS_PULLBACK_START_FRAME_NUMBER | 0x00183103
TAG_IVUS_PULLBACK_STOP_FRAME_NUMBER | 0x00183104
TAG_LESION_NUMBER | 0x00183105
TAG_OUTPUT_POWER | 0x00185000
TAG_TRANSDUCER_DATA | 0x00185010
TAG_FOCUS_DEPTH | 0x00185012
TAG_PROCESSING_FUNCTION | 0x00185020
TAG_POSTPROCESSING_FUNCTION | 0x00185021
TAG_MECHANICAL_INDEX | 0x00185022
TAG_THERMAL_INDEX | 0x00185024
TAG_CRANIAL_THERMAL_INDEX | 0x00185026
TAG_SOFT_TISSUE_THERMAL_INDEX | 0x00185027
TAG_SOFT_TISSUE_FOCUS_THERMAL_INDEX | 0x00185028
TAG_SOFT_TISSUE_SURFACE_THERMAL_INDEX | 0x00185029
TAG_DEPTH_OF_SCAN_FIELD | 0x00185050
TAG_PATIENT_POSITION | 0x00185100
TAG_VIEW_POSITION | 0x00185101
TAG_IMAGE_TRANSFORMATION_MATRIX | 0x00185210
TAG_IMAGE_TRANSLATION_VECTOR | 0x00185212
TAG_SENSITIVITY | 0x00186000
TAG_SEQUENCE_OF_ULTRASOUND_REGIONS | 0x00186011
TAG_REGION_SPATIAL_FORMAT | 0x00186012
TAG_REGION_DATA_TYPE | 0x00186014
TAG_REGION_FLAGS | 0x00186016
TAG_REGION_LOCATION_MIN_X_0 | 0x00186018
TAG_REGION_LOCATION_MIN_Y_0 | 0x0018601A
TAG_REGION_LOCATION_MAX_X_1 | 0x0018601C
TAG_REGION_LOCATION_MAX_Y_1 | 0x0018601E
TAG_REFERENCE_PIXEL_X_0 | 0x00186020
TAG_REFERENCE_PIXEL_Y_0 | 0x00186022
TAG_PHYSICAL_UNITS_X_DIRECTION | 0x00186024
TAG_PHYSICAL_UNITS_Y_DIRECTION | 0x00186026
TAG_REFERENCE_PIXEL_PHYSICAL_VALUE_X | 0x00186028
TAG_REFERENCE_PIXEL_PHYSICAL_VALUE_Y | 0x0018602A
TAG_PHYSICAL_DELTA_X | 0x0018602C
TAG_PHYSICAL_DELTA_Y | 0x0018602E
TAG_TRANSDUCER_FREQUENCY | 0x00186030
TAG_TRANSDUCER_TYPE | 0x00186031
TAG_PULSE_REPETITION_FREQUENCY | 0x00186032
TAG_DOPPLER_CORRECTION_ANGLE | 0x00186034
TAG_STEERING_ANGLE | 0x00186036
TAG_DOPPLER_SAMPLE_VOLUME_X_POSITION | 0x00186039
TAG_DOPPLER_SAMPLE_VOLUME_Y_POSITION | 0x0018603B
TAG_TM_LINE_POSITION_X_0 | 0x0018603C
TAG_TM_LINE_POSITION_X0 | 0x0018603D
TAG_TM_LINE_POSITION_Y_0 | 0x0018603F
TAG_TM_LINE_POSITION_X_1 | 0x00186041
TAG_TM_LINE_POSITION_Y_1 | 0x00186043
TAG_PIXEL_COMPONENT_ORGANIZATION | 0x00186044
TAG_PIXEL_COMPONENT_MASK | 0x00186046
TAG_PIXEL_COMPONENT_RANGE_START | 0x00186048
TAG_PIXEL_COMPONENT_RANGE_STOP | 0x0018604A
TAG_PIXEL_COMPONENT_PHYSICAL_UNITS | 0x0018604C
TAG_PIXEL_COMPONENT_DATA_TYPE | 0x0018604E
TAG_NUMBER_OF_TABLE_BREAK_POINTS | 0x00186050
TAG_TABLE_OF_X_BREAK_POINTS | 0x00186052
TAG_TABLE_OF_Y_BREAK_POINTS | 0x00186054
TAG_NUMBER_OF_TABLE_ENTRIES | 0x00186056
TAG_TABLE_OF_PIXEL_VALUES | 0x00186058
TAG_TABLE_OF_PARAMETER_VALUES | 0x0018605A
TAG_CONTENT_QUALIFICATION | 0x00189004
TAG_MR_IMAGING_MODIFIER_SEQUENCE | 0x00189006
TAG_ECHO_PULSE_SEQUENCE | 0x00189008
TAG_INVERSION_RECOVERY | 0x00189009
TAG_FLOW_COMPENSATION | 0x00189010
TAG_MULTIPLE_SPIN_ECHO | 0x00189011
TAG_MULTI_PLANAR_EXCITATION | 0x00189012
TAG_PHASE_CONTRAST | 0x00189014
TAG_TIME_OF_FLIGHT_CONTRAST | 0x00189015
TAG_SPOILING | 0x00189016
TAG_STEADY_STATE_PULSE_SEQUENCE | 0x00189017
TAG_ECHO_PLANAR_PULSE_SEQUENCE | 0x00189018
TAG_TAG_ANGLE_FIRST_AXIS | 0x00189019
TAG_MAGNETIZATION_TRANSFER | 0x00189020
TAG_T2_PREPARATION | 0x00189021
TAG_BLOOD_SIGNAL_NULLING | 0x00189022
TAG_SATURATION_RECOVERY | 0x00189024
TAG_SPECTRALLY_SELECTED_SUPPRESSION | 0x00189025
TAG_SPECTRALLY_SELECTED_EXCITATION | 0x00189026
TAG_SPATIAL_PRE_SATURATION | 0x00189027
TAG_TAGGING | 0x00189028
TAG_OVERSAMPLING_PHASE | 0x00189029
TAG_BLOOD_SIGNAL_NULLING | 0x00189022
TAG_TAG_SPACING_FIRST_DIMENSION | 0x00189030
TAG_GEOMETRY_OF_K_SPACE_TRAVERSAL | 0x00189032
TAG_SEGMENTED_K_SPACE_TRAVERSAL | 0x00189033
TAG_RECTILINEAR_PHASE_ENCODE_REORDERING | 0x00189034
TAG_TAG_THICKNESS | 0x00189035
TAG_PARTIAL_FOURIER_DIRECTION | 0x00189036
TAG_CARDIAC_SYNCHRONIZATION_TECHNIQUE | 0x00189037
TAG_RECEIVE_COIL_MANUFACTURER_NAME | 0x00189041
TAG_MR_RECEIVE_COIL_SEQUENCE | 0x00189042
TAG_RECEIVE_COIL_TYPE | 0x00189043
TAG_QUADRATURE_RECEIVE_COIL | 0x00189044
TAG_MULTI_COIL_DEFINITION_SEQUENCE | 0x00189045
TAG_MULTI_COIL_CONFIGURATION | 0x00189046
TAG_MULTI_COIL_ELEMENT_NAME | 0x00189047
TAG_MULTI_COIL_ELEMENT_USED | 0x00189048
TAG_MR_TRANSMIT_COIL_SEQUENCE | 0x00189049
TAG_TRANSMIT_COIL_MANUFACTURER_NAME | 0x00189050
TAG_TRANSMIT_COIL_TYPE | 0x00189051
TAG_SPECTRAL_WIDTH | 0x00189052
TAG_CHEMICAL_SHIFT_REFERENCE | 0x00189053
TAG_VOLUME_LOCALIZATION_TECHNIQUE | 0x00189054
TAG_MR_ACQUISITION_FREQUENCY_ENCODING_STEPS | 0x00189058
TAG_DE_COUPLING | 0x00189059
TAG_DE_COUPLED_NUCLEUS | 0x00189060
TAG_DE_COUPLING_FREQUENCY | 0x00189061
TAG_DE_COUPLING_METHOD | 0x00189062
TAG_DE_COUPLING_CHEMICAL_SHIFT_REFERENCE | 0x00189063
TAG_K_SPACE_FILTERING | 0x00189064
TAG_TIME_DOMAIN_FILTERING | 0x00189065
TAG_NUMBER_OF_ZERO_FILLS | 0x00189066
TAG_BASELINE_CORRECTION | 0x00189067
TAG_PARALLEL_REDUCTION_FACTOR_IN_PLANE | 0x00189069
TAG_CARDIAC_R_R_INTERVAL_SPECIFIED | 0x00189070
TAG_ACQUISITION_DURATION | 0x00189073
TAG_FRAME_ACQUISITION_DATETIME | 0x00189074
TAG_DIFFUSION_GRADIENT_DIRECTION_SEQUENCE | 0x00189076
TAG_PARALLEL_ACQUISITION | 0x00189077
TAG_PARALLEL_ACQUISITION_TECHNIQUE | 0x00189078
TAG_INVERSION_TIMES | 0x00189079
TAG_METABOLITE_MAP_DESCRIPTION | 0x00189080
TAG_PARTIAL_FOURIER | 0x00189081
TAG_EFFECTIVE_ECHO_TIME | 0x00189082
TAG_SPECTRAL_WIDTH | 0x00189052
TAG_CHEMICAL_SHIFT_SEQUENCE | 0x00189084
TAG_CARDIAC_SIGNAL_SOURCE | 0x00189085
TAG_DIFFUSION_B_VALUE | 0x00189087
TAG_DIFFUSION_GRADIENT_ORIENTATION | 0x00189089
TAG_VELOCITY_ENCODING_DIRECTION | 0x00189090
TAG_VELOCITY_ENCODING_MINIMUM_VALUE | 0x00189091
TAG_NUMBER_OF_K_SPACE_TRAJECTORIES | 0x00189093
TAG_COVERAGE_OF_K_SPACE | 0x00189094
TAG_SPECTROSCOPY_ACQUISITION_PHASE_ROWS | 0x00189095
TAG_TRANSMITTER_FREQUENCY | 0x00189098
TAG_RESONANT_NUCLEUS | 0x00189100
TAG_FREQUENCY_CORRECTION | 0x00189101
TAG_MR_SPECTROSCOPY_FOV_GEOMETRY_SEQUENCE | 0x00189103
TAG_SLAB_THICKNESS | 0x00189104
TAG_SLAB_ORIENTATION | 0x00189105
TAG_MID_SLAB_POSITION | 0x00189106
TAG_MR_SPATIAL_SATURATION_SEQUENCE | 0x00189107
TAG_MR_TIMING_AND_RELATED_PARAMETERS_SEQUENCE | 0x00189112
TAG_MR_ECHO_SEQUENCE | 0x00189114
TAG_MR_MODIFIER_SEQUENCE | 0x00189115
TAG_MR_DIFFUSION_SEQUENCE | 0x00189117
TAG_CARDIAC_TRIGGER_SEQUENCE | 0x00189118
TAG_MR_AVERAGES_SEQUENCE | 0x00189119
TAG_MR_FOV_GEOMETRY_SEQUENCE | 0x00189125
TAG_VOLUME_LOCALIZATION_SEQUENCE | 0x00189126
TAG_SPECTROSCOPY_ACQUISITION_DATA_COLUMNS | 0x00189127
TAG_DIFFUSION_ANISOTROPY_TYPE | 0x00189147
TAG_FRAME_REFERENCE_DATETIME | 0x00189151
TAG_MR_METABOLITE_MAP_SEQUENCE | 0x00189152
TAG_PARALLEL_REDUCTION_FACTOR_OUT_OF_PLANE | 0x00189155
TAG_SPECTROSCOPY_ACQUISITION_OUT_OF_PLANE_PHASE_STEPS | 0x00189159
TAG_BULK_MOTION_STATUS | 0x00189166
TAG_PARALLEL_REDUCTION_FACTOR_SECOND_IN_PLANE | 0x00189168
TAG_CARDIAC_BEAT_REJECTION_TECHNIQUE | 0x00189169
TAG_RESPIRATORY_MOTION_COMPENSATION_TECHNIQUE | 0x00189170
TAG_RESPIRATORY_SIGNAL_SOURCE | 0x00189171
TAG_BULK_MOTION_COMPENSATION_TECHNIQUE | 0x00189172
TAG_BULK_MOTION_SIGNAL_SOURCE | 0x00189173
TAG_APPLICABLE_SAFETY_STANDARD_AGENCY | 0x00189174
TAG_APPLICABLE_SAFETY_STANDARD_DESCRIPTION | 0x00189175
TAG_OPERATING_MODE_SEQUENCE | 0x00189176
TAG_OPERATING_MODE_TYPE | 0x00189177
TAG_OPERATING_MODE | 0x00189178
TAG_SPECIFIC_ABSORPTION_RATE_DEFINITION | 0x00189179
TAG_GRADIENT_OUTPUT_TYPE | 0x00189180
TAG_SPECIFIC_ABSORPTION_RATE_VALUE | 0x00189181
TAG_GRADIENT_OUTPUT | 0x00189182
TAG_FLOW_COMPENSATION_DIRECTION | 0x00189183
TAG_TAGGING_DELAY | 0x00189184
TAG_CHEMICAL_SHIFTS_MINIMUM_INTEGRATION_LIMIT | 0x00189195
TAG_CHEMICAL_SHIFTS_MAXIMUM_INTEGRATION_LIMIT | 0x00189196
TAG_MR_VELOCITY_ENCODING_SEQUENCE | 0x00189197
TAG_FIRST_ORDER_PHASE_CORRECTION | 0x00189198
TAG_WATER_REFERENCED_PHASE_CORRECTION | 0x00189199
TAG_MR_SPECTROSCOPY_ACQUISITION_TYPE | 0x00189200
TAG_RESPIRATORY_CYCLE_POSITION | 0x00189214
TAG_VELOCITY_ENCODING_MAXIMUM_VALUE | 0x00189217
TAG_TAG_SPACING_SECOND_DIMENSION | 0x00189218
TAG_TAG_ANGLE_SECOND_AXIS | 0x00189219
TAG_FRAME_ACQUISITION_DURATION | 0x00189220
TAG_MR_IMAGE_FRAME_TYPE_SEQUENCE | 0x00189226
TAG_MR_SPECTROSCOPY_FRAME_TYPE_SEQUENCE | 0x00189227
TAG_MR_ACQUISITION_PHASE_ENCODING_STEPS_IN_PLANE | 0x00189231
TAG_MR_ACQUISITION_PHASE_ENCODING_STEPS_OUT_OF_PLANE | 0x00189232
TAG_SPECTROSCOPY_ACQUISITION_PHASE_COLUMNS | 0x00189234
TAG_CARDIAC_CYCLE_POSITION | 0x00189236
TAG_SPECIFIC_ABSORPTION_RATE_SEQUENCE | 0x00189239
TAG_CONTRAST_BOLUS_AGENT_NUMBER | 0x00189337
TAG_CONTRAST_BOLUS_INGREDIENT_CODE_SEQUENCE | 0x00189338
TAG_CONTRAST_ADMINISTRATION_PROFILE_SEQUENCE | 0x00189340
TAG_CONTRAST_BOLUS_USAGE_SEQUENCE | 0x00189341
TAG_CONTRAST_BOLUS_AGENT_ADMINISTERED | 0x00189342
TAG_CONTRAST_BOLUS_AGENT_DETECTED | 0x00189343
TAG_CONTRAST_BOLUS_AGENT_PHASE | 0x00189344
TAG_CTDIVOL | 0x00189345
TAG_CONTRIBUTING_EQUIPMENT_SEQUENCE | 0x0018A001
TAG_CONTRIBUTION_DATETIME | 0x0018A002
TAG_CONTRIBUTION_DESCRIPTION | 0x0018A003
TAG_STUDY_INSTANCE_UID | 0x0020000D
TAG_SERIES_INSTANCE_UID | 0x0020000E
TAG_STUDY_ID | 0x00200010
TAG_SERIES_NUMBER | 0x00200011
TAG_ACQUISITION_NUMBER | 0x00200012
TAG_INSTANCE_NUMBER | 0x00200013
TAG_ISOTOPE_NUMBER_RETIRED | 0x00200014
TAG_PHASE_NUMBER_RETIRED | 0x00200015
TAG_INTERVAL_NUMBER_RETIRED | 0x00200016
TAG_TIME_SLOT_NUMBER_RETIRED | 0x00200017
TAG_ANGLE_NUMBER_RETIRED | 0x00200018
TAG_ITEM_NUMBER | 0x00200019
TAG_PATIENT_ORIENTATION | 0x00200020
TAG_OVERLAY_NUMBER | 0x00200022
TAG_CURVE_NUMBER | 0x00200024
TAG_LOOKUP_TABLE_NUMBER | 0x00200026
TAG_IMAGE_POSITION_PATIENT | 0x00200032
TAG_IMAGE_ORIENTATION_PATIENT | 0x00200037
TAG_FRAME_OF_REFERENCE_UID | 0x00200052
TAG_LATERALITY | 0x00200060
TAG_TEMPORAL_POSITION_IDENTIFIER | 0x00200100
TAG_NUMBER_OF_TEMPORAL_POSITIONS | 0x00200105
TAG_TEMPORAL_RESOLUTION | 0x00200110
TAG_SERIES_IN_STUDY | 0x00201000
TAG_IMAGES_IN_ACQUISITION | 0x00201002
TAG_ACQUISITIONS_IN_STUDY | 0x00201004
TAG_POSITION_REFERENCE_INDICATOR | 0x00201040
TAG_SLICE_LOCATION | 0x00201041
TAG_OTHER_STUDY_NUMBERS | 0x00201070
TAG_NUMBER_OF_PATIENT_RELATED_STUDIES | 0x00201200
TAG_NUMBER_OF_PATIENT_RELATED_SERIES | 0x00201202
TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES | 0x00201204
TAG_NUMBER_OF_STUDY_RELATED_SERIES | 0x00201206
TAG_NUMBER_OF_STUDY_RELATED_INSTANCES | 0x00201208
TAG_NUMBER_OF_SERIES_RELATED_INSTANCES | 0x00201209
TAG_IMAGE_COMMENTS | 0x00204000
TAG_STACK_ID | 0x00209056
TAG_IN_STACK_POSITION_NUMBER | 0x00209057
TAG_FRAME_ANATOMY_SEQUENCE | 0x00209071
TAG_FRAME_LATERALITY | 0x00209072
TAG_FRAME_CONTENT_SEQUENCE | 0x00209111
TAG_PLANE_POSITION_SEQUENCE | 0x00209113
TAG_PLANE_ORIENTATION_SEQUENCE | 0x00209116
TAG_TEMPORAL_POSITION_INDEX | 0x00209128
TAG_TRIGGER_DELAY_TIME | 0x00209153
TAG_FRAME_ACQUISITION_NUMBER | 0x00209156
TAG_DIMENSION_INDEX_VALUES | 0x00209157
TAG_FRAME_COMMENTS | 0x00209158
TAG_CONCATENATION_UID | 0x00209161
TAG_IN_CONCATENATION_NUMBER | 0x00209162
TAG_IN_CONCATENATION_TOTAL_NUMBER | 0x00209163
TAG_DIMENSION_ORGANIZATION_UID | 0x00209164
TAG_DIMENSION_INDEX_POINTER | 0x00209165
TAG_FUNCTIONAL_GROUP_POINTER | 0x00209167
TAG_DIMENSION_INDEX_PRIVATE_CREATOR | 0x00209213
TAG_DIMENSION_ORGANIZATION_SEQUENCE | 0x00209221
TAG_DIMENSION_INDEX_SEQUENCE | 0x00209222
TAG_CONCATENATION_FRAME_OFFSET_NUMBER | 0x00209228
TAG_FUNCTIONAL_GROUP_PRIVATE_CREATOR | 0x00209238
TAG_LIGHT_PATH_FILTER_PASS_THROUGH_WAVELENGTH | 0x00220001
TAG_LIGHT_PATH_FILTER_PASS_BAND | 0x00220002
TAG_IMAGE_PATH_FILTER_PASS_THROUGH_WAVELENGTH | 0x00220003
TAG_IMAGE_PATH_FILTER_PASS_BAND | 0x00220004
TAG_PATIENT_EYE_MOVEMENT_COMMANDED | 0x00220005
TAG_PATIENT_EYE_MOVEMENT_COMMAND_CODE_SEQUENCE | 0x00220006
TAG_SPHERICAL_LENS_POWER | 0x00220007
TAG_CYLINDER_LENS_POWER | 0x00220008
TAG_CYLINDER_AXIS | 0x00220009
TAG_EMMETROPIC_MAGNIFICATION | 0x0022000A
TAG_INTRA_OCULAR_PRESSURE | 0x0022000B
TAG_HORIZONTAL_FIELD_OF_VIEW | 0x0022000C
TAG_PUPIL_DILATED | 0x0022000D
TAG_DEGREE_OF_DILATION | 0x0022000E
TAG_STEREO_BASELINE_ANGLE | 0x00220010
TAG_STEREO_BASELINE_DISPLACEMENT | 0x00220011
TAG_STEREO_HORIZONTAL_PIXEL_OFFSET | 0x00220012
TAG_STEREO_VERTICAL_PIXEL_OFFSET | 0x00220013
TAG_STEREO_ROTATION | 0x00220014
TAG_ACQUISITION_DEVICE_TYPE_CODE_SEQUENCE | 0x00220015
TAG_ILLUMINATION_TYPE_CODE_SEQUENCE | 0x00220016
TAG_LIGHT_PATH_FILTER_TYPE_STACK_CODE_SEQUENCE | 0x00220017
TAG_IMAGE_PATH_FILTER_TYPE_STACK_CODE_SEQUENCE | 0x00220018
TAG_LENSES_CODE_SEQUENCE | 0x00220019
TAG_CHANNEL_DESCRIPTION_CODE_SEQUENCE | 0x0022001A
TAG_REFRACTIVE_STATE_SEQUENCE | 0x0022001B
TAG_MYDRIATIC_AGENT_CODE_SEQUENCE | 0x0022001C
TAG_RELATIVE_IMAGE_POSITION_CODE_SEQUENCE | 0x0022001D
TAG_STEREO_PAIRS_SEQUENCE | 0x00220020
TAG_LEFT_IMAGE_SEQUENCE | 0x00220021
TAG_RIGHT_IMAGE_SEQUENCE | 0x00220022
TAG_SAMPLES_PER_PIXEL | 0x00280002
TAG_SAMPLES_PER_PIXEL_USED | 0x00280003
TAG_PHOTOMETRIC_INTERPRETATION | 0x00280004
TAG_PLANAR_CONFIGURATION | 0x00280006
TAG_NUMBER_OF_FRAMES | 0x00280008
TAG_FRAME_INCREMENT_POINTER | 0x00280009
TAG_ROWS | 0x00280010
TAG_COLUMNS | 0x00280011
TAG_PLANES | 0x00280012
TAG_ULTRASOUND_COLOR_DATA_PRESENT | 0x00280014
TAG_PIXEL_SPACING | 0x00280030
TAG_ZOOM_FACTOR | 0x00280031
TAG_ZOOM_CENTER | 0x00280032
TAG_PIXEL_ASPECT_RATIO | 0x00280034
TAG_CORRECTED_IMAGE | 0x00280051
TAG_BITS_ALLOCATED | 0x00280100
TAG_BITS_STORED | 0x00280101
TAG_HIGH_BIT | 0x00280102
TAG_PIXEL_REPRESENTATION | 0x00280103
TAG_SMALLEST_IMAGE_PIXEL_VALUE | 0x00280106
TAG_LARGEST_IMAGE_PIXEL_VALUE | 0x00280107
TAG_SMALLEST_PIXEL_VALUE_IN_SERIES | 0x00280108
TAG_LARGEST_PIXEL_VALUE_IN_SERIES | 0x00280109
TAG_SMALLEST_IMAGE_PIXEL_VALUE_IN_PLANE | 0x00280110
TAG_LARGEST_IMAGE_PIXEL_VALUE_IN_PLANE | 0x00280111
TAG_PIXEL_PADDING_VALUE | 0x00280120
TAG_PIXEL_INTENSITY_RELATIONSHIP | 0x00281040
TAG_WINDOW_CENTER | 0x00281050
TAG_WINDOW_WIDTH | 0x00281051
TAG_RESCALE_INTERCEPT | 0x00281052
TAG_RESCALE_SLOPE | 0x00281053
TAG_RESCALE_TYPE | 0x00281054
TAG_WINDOW_CENTER_WIDTH_EXPLANATION | 0x00281055
TAG_RECOMMENDED_VIEWING_MODE | 0x00281090
TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR | 0x00281101
TAG_GREEN_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR | 0x00281102
TAG_BLUE_PALETTE_COLOR_LOOKUP_TABLE_DESCRIPTOR | 0x00281103
TAG_PALETTE_COLOR_LOOKUP_TABLE_UID | 0x00281199
TAG_RED_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281201
TAG_GREEN_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281202
TAG_BLUE_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281203
TAG_SEGMENTED_RED_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281221
TAG_SEGMENTED_GREEN_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281222
TAG_SEGMENTED_BLUE_PALETTE_COLOR_LOOKUP_TABLE_DATA | 0x00281223
TAG_LOSSY_IMAGE_COMPRESSION | 0x00282110
TAG_LOSSY_IMAGE_COMPRESSION_RATIO | 0x00282112
TAG_LOSSY_IMAGE_COMPRESSION_METHOD | 0x00282114
TAG_MODALITY_LUT_SEQUENCE | 0x00283000
TAG_LUT_DESCRIPTOR | 0x00283002
TAG_LUT_EXPLANATION | 0x00283003
TAG_MODALITY_LUT_TYPE | 0x00283004
TAG_LUT_DATA | 0x00283006
TAG_VOI_LUT_SEQUENCE | 0x00283010
TAG_BIPLANE_ACQUISITION_SEQUENCE | 0x00285000
TAG_REPRESENTATIVE_FRAME_NUMBER | 0x00286010
TAG_FRAME_NUMBERS_OF_INTEREST_FOI | 0x00286020
TAG_FRAME_OF_INTEREST_DESCRIPTION | 0x00286022
TAG_MASK_POINTER | 0x00286030
TAG_R_WAVE_POINTER | 0x00286040
TAG_MASK_SUBTRACTION_SEQUENCE | 0x00286100
TAG_MASK_OPERATION | 0x00286101
TAG_APPLICABLE_FRAME_RANGE | 0x00286102
TAG_MASK_FRAME_NUMBERS | 0x00286110
TAG_CONTRAST_FRAME_AVERAGING | 0x00286112
TAG_MASK_SUB_PIXEL_SHIFT | 0x00286114
TAG_TID_OFFSET | 0x00286120
TAG_MASK_OPERATION_EXPLANATION | 0x00286190
TAG_DATA_POINT_ROWS | 0x00289001
TAG_DATA_POINT_COLUMNS | 0x00289002
TAG_SIGNAL_DOMAIN_COLUMNS | 0x00289003
TAG_LARGEST_MONOCHROME_PIXEL_VALUE | 0x00289099
TAG_DATA_REPRESENTATION | 0x00289108
TAG_PIXEL_MEASURES_SEQUENCE | 0x00289110
TAG_FRAME_VOI_LUT_SEQUENCE | 0x00289132
TAG_PIXEL_VALUE_TRANSFORMATION_SEQUENCE | 0x00289145
TAG_SIGNAL_DOMAIN_ROWS | 0x00289235
TAG_STUDY_STATUS_ID | 0x0032000A
TAG_STUDY_PRIORITY_ID | 0x0032000C
TAG_STUDY_ID_ISSUER | 0x00320012
TAG_STUDY_VERIFIED_DATE | 0x00320032
TAG_STUDY_VERIFIED_TIME | 0x00320033
TAG_STUDY_READ_DATE | 0x00320034
TAG_STUDY_READ_TIME | 0x00320035
TAG_SCHEDULED_STUDY_START_DATE | 0x00321000
TAG_SCHEDULED_STUDY_START_TIME | 0x00321001
TAG_SCHEDULED_STUDY_STOP_DATE | 0x00321010
TAG_SCHEDULED_STUDY_STOP_TIME | 0x00321011
TAG_SCHEDULED_STUDY_LOCATION | 0x00321020
TAG_SCHEDULED_STUDY_LOCATION_AE_TITLE | 0x00321021
TAG_REASON_FOR_STUDY | 0x00321030
TAG_REQUESTING_PHYSICIAN_IDENTIFICATION_SEQUENCE | 0x00321031
TAG_REQUESTING_PHYSICIAN | 0x00321032
TAG_REQUESTING_SERVICE | 0x00321033
TAG_STUDY_ARRIVAL_DATE | 0x00321040
TAG_STUDY_ARRIVAL_TIME | 0x00321041
TAG_STUDY_COMPLETION_DATE | 0x00321050
TAG_STUDY_COMPLETION_TIME | 0x00321051
TAG_STUDY_COMPONENT_STATUS_ID | 0x00321055
TAG_REQUESTED_PROCEDURE_DESCRIPTION | 0x00321060
TAG_REQUESTED_PROCEDURE_CODE_SEQUENCE | 0x00321064
TAG_REQUESTED_CONTRAST_AGENT | 0x00321070
TAG_STUDY_COMMENTS | 0x00324000
TAG_REFERENCED_PATIENT_ALIAS_SEQUENCE | 0x00380004
TAG_VISIT_STATUS_ID | 0x00380008
TAG_ADMISSION_ID | 0x00380010
TAG_ISSUER_OF_ADMISSION_ID | 0x00380011
TAG_ROUTE_OF_ADMISSIONS | 0x00380016
TAG_SCHEDULED_ADMISSION_DATE | 0x0038001A
TAG_SCHEDULED_ADMISSION_TIME | 0x0038001B
TAG_SCHEDULED_DISCHARGE_DATE | 0x0038001C
TAG_SCHEDULED_DISCHARGE_TIME | 0x0038001D
TAG_SCHEDULED_PATIENT_INSTITUTION_RESIDENCE | 0x0038001E
TAG_ADMITTING_DATE | 0x00380020
TAG_ADMITTING_TIME | 0x00380021
TAG_DISCHARGE_DATE | 0x00380030
TAG_DISCHARGE_TIME | 0x00380032
TAG_DISCHARGE_DIAGNOSIS_DESCRIPTION | 0x00380040
TAG_DISCHARGE_DIAGNOSIS_CODE_SEQUENCE | 0x00380044
TAG_SPECIAL_NEEDS | 0x00380050
TAG_CURRENT_PATIENT_LOCATION | 0x00380300
TAG_PATIENT_INSTITUTION_RESIDENCE | 0x00380400
TAG_PATIENT_STATE | 0x00380500
TAG_VISIT_COMMENTS | 0x00384000
TAG_SCHEDULED_STATION_AE_TITLE | 0x00400001
TAG_SCHEDULED_PROCEDURE_STEP_START_DATE | 0x00400002
TAG_SCHEDULED_PROCEDURE_STEP_START_TIME | 0x00400003
TAG_SCHEDULED_PROCEDURE_STEP_END_DATE | 0x00400004
TAG_SCHEDULED_PROCEDURE_STEP_END_TIME | 0x00400005
TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME | 0x00400006
TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION | 0x00400007
TAG_SCHEDULED_ACTION_ITEM_CODE_SEQUENCE | 0x00400008
TAG_SCHEDULED_PROCEDURE_STEP_ID | 0x00400009
TAG_STAGE_CODE_SEQUENCE | 0x0040000A
TAG_SCHEDULED_PERFORMING_PHYSICIAN_IDENTIFICATION_SEQUENCE | 0x0040000B
TAG_SCHEDULED_STATION_NAME | 0x00400010
TAG_SCHEDULED_PROCEDURE_STEP_LOCATION | 0x00400011
TAG_PRE_MEDICATION | 0x00400012
TAG_SCHEDULED_PROCEDURE_STEP_STATUS | 0x00400020
TAG_SCHEDULED_PROCEDURE_STEP_SEQUENCE | 0x00400100
TAG_REFERENCED_STANDALONE_SOP_INSTANCE_SEQUENCE | 0x00400220
TAG_PERFORMED_STATION_AE_TITLE | 0x00400241
TAG_PERFORMED_STATION_NAME | 0x00400242
TAG_PERFORMED_LOCATION | 0x00400243
TAG_PERFORMED_PROCEDURE_STEP_START_DATE | 0x00400244
TAG_PERFORMED_PROCEDURE_STEP_START_TIME | 0x00400245
TAG_PERFORMED_PROCEDURE_STEP_END_DATE | 0x00400250
TAG_PERFORMED_PROCEDURE_STEP_END_TIME | 0x00400251
TAG_PERFORMED_PROCEDURE_STEP_STATUS | 0x00400252
TAG_PERFORMED_PROCEDURE_STEP_ID | 0x00400253
TAG_PERFORMED_PROCEDURE_STEP_DESCRIPTION | 0x00400254
TAG_PERFORMED_PROCEDURE_TYPE_DESCRIPTION | 0x00400255
TAG_PERFORMED_ACTION_ITEM_SEQUENCE | 0x00400260
TAG_SCHEDULED_STEP_ATTRIBUTES_SEQUENCE | 0x00400270
TAG_REQUEST_ATTRIBUTES_SEQUENCE | 0x00400275
TAG_COMMENTS_ON_THE_PERFORMED_PROCEDURE_STEPS | 0x00400280
TAG_PERFORMED_PROCEDURE_STEP_DISCONTINUATION_REASON_CODE_SEQUENCE | 0x00400281
TAG_QUANTITY_SEQUENCE | 0x00400293
TAG_QUANTITY | 0x00400294
TAG_MEASURING_UNITS_SEQUENCE | 0x00400295
TAG_BILLING_ITEM_SEQUENCE | 0x00400296
TAG_TOTAL_TIME_OF_FLUOROSCOPY | 0x00400300
TAG_TOTAL_NUMBER_OF_EXPOSURES | 0x00400301
TAG_ENTRANCE_DOSE | 0x00400302
TAG_EXPOSED_AREA | 0x00400303
TAG_DISTANCE_SOURCE_TO_ENTRANCE | 0x00400306
TAG_EXPOSURE_DOSE_SEQUENCE | 0x0040030E
TAG_COMMENTS_ON_RADIATION_DOSE | 0x00400310
TAG_BILLING_PROCEDURE_STEP_SEQUENCE | 0x00400320
TAG_FILM_CONSUMPTION_SEQUENCE | 0x00400321
TAG_BILLING_SUPPLIES_AND_DEVICES_SEQUENCE | 0x00400324
TAG_REFERENCED_PROCEDURE_STEP_SEQUENCE | 0x00400330
TAG_PERFORMED_SERIES_SEQUENCE | 0x00400340
TAG_COMMENTS_ON_THE_SCHEDULED_PROCEDURE_STEP | 0x00400400
TAG_REQUESTED_PROCEDURE_ID | 0x00401001
TAG_REASON_FOR_THE_REQUESTED_PROCEDURE | 0x00401002
TAG_REQUESTED_PROCEDURE_PRIORITY | 0x00401003
TAG_PATIENT_TRANSPORT_ARRANGEMENTS | 0x00401004
TAG_REQUESTED_PROCEDURE_LOCATION | 0x00401005
TAG_PLACER_ORDER_NUMBER_PROCEDURE_RETIRED | 0x00401006
TAG_FILLER_ORDER_NUMBER_PROCEDURE_RETIRED | 0x00401007
TAG_CONFIDENTIALITY_CODE | 0x00401008
TAG_REPORTING_PRIORITY | 0x00401009
TAG_NAMES_OF_INTENDED_RECIPIENTS_OF_RESULTS | 0x00401010
TAG_INTENDED_RECIPIENTS_OF_RESULTS_IDENTIFICATION_SEQUENCE | 0x00401011
TAG_PERSON_IDENTIFICATION_CODE_SEQUENCE | 0x00401101
TAG_PERSONS_ADDRESS | 0x00401102
TAG_PERSONS_TELEPHONE_NUMBERS | 0x00401103
TAG_REQUESTED_PROCEDURE_COMMENTS | 0x00401400
TAG_REASON_FOR_THE_IMAGING_SERVICE_REQUEST | 0x00402001
TAG_ISSUE_DATE_OF_IMAGING_SERVICE_REQUEST | 0x00402004
TAG_ISSUE_TIME_OF_IMAGING_SERVICE_REQUEST | 0x00402005
TAG_PLACER_ORDER_NUMBER_IMAGING_SERVICE_REQUEST_RETIRED | 0x00402006
TAG_FILLER_ORDER_NUMBER_IMAGING_SERVICE_REQUEST_RETIRED | 0x00402007
TAG_ORDER_ENTERED_BY | 0x00402008
TAG_ORDER_ENTERER_LOCATION | 0x00402009
TAG_ORDER_CALLBACK_PHONE_NUMBER | 0x00402010
TAG_PLACER_ORDER_NUMBER_IMAGING_SERVICE_REQUEST | 0x00402016
TAG_FILLER_ORDER_NUMBER_IMAGING_SERVICE_REQUEST | 0x00402017
TAG_IMAGING_SERVICE_REQUEST_COMMENTS | 0x00402400
TAG_CONFIDENTIALITY_CONSTRAINT_ON_PATIENT_DATA_DESCRIPTION | 0x00403001
TAG_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_STATUS | 0x00404001
TAG_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEP_STATUS | 0x00404002
TAG_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_PRIORITY | 0x00404003
TAG_SCHEDULED_PROCESSING_APPLICATIONS_CODE_SEQUENCE | 0x00404004
TAG_SCHEDULED_PROCEDURE_STEP_START_DATE_AND_TIME | 0x00404005
TAG_MULTIPLE_COPIES_FLAG | 0x00404006
TAG_PERFORMED_PROCESSING_APPLICATIONS_CODE_SEQUENCE | 0x00404007
TAG_HUMAN_PERFORMER_CODE_SEQUENCE | 0x00404009
TAG_EXPECTED_COMPLETION_DATE_AND_TIME | 0x00404011
TAG_RESULTING_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEPS_SEQUENCE | 0x00404015
TAG_REFERENCED_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_SEQUENCE | 0x00404016
TAG_SCHEDULED_WORKITEM_CODE_SEQUENCE | 0x00404018
TAG_PERFORMED_WORKITEM_CODE_SEQUENCE | 0x00404019
TAG_INPUT_AVAILABILITY_FLAG | 0x00404020
TAG_INPUT_INFORMATIONSEQUENCE | 0x00404021
TAG_RELEVANT_INFORMATION_SEQUENCE | 0x00404022
TAG_REFERENCED_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_TRANSACTION_UID | 0x00404023
TAG_SCHEDULED_STATION_NAME_CODE_SEQUENCE | 0x00404025
TAG_SCHEDULED_STATION_CLASS_CODE_SEQUENCE | 0x00404026
TAG_SCHEDULED_STATION_GEOGRAPHIC_LOCATION_CODE_SEQUENCE | 0x00404027
TAG_PERFORMED_STATION_NAME_CODE_SEQUENCE | 0x00404028
TAG_PERFORMED_STATION_CLASS_CODE_SEQUENCE | 0x00404029
TAG_PERFORMED_STATION_GEOGRAPHIC_LOCATION_CODE_SEQUENCE | 0x00404030
TAG_REQUESTED_SUBSEQUENT_WORKITEM_CODE_SEQUENCE | 0x00404031
TAG_NON_DICOM_OUTPUT_CODE_SEQUENCE | 0x00404032
TAG_OUTPUT_INFORMATION_SEQUENCE | 0x00404033
TAG_SCHEDULED_HUMAN_PERFORMERS_SEQUENCE | 0x00404034
TAG_ACTUAL_HUMAN_PERFORMERS_SEQUENCE | 0x00404035
TAG_HUMAN_PERFORMER_ORGANIZATION | 0x00404036
TAG_HUMAN_PERFORMER_NAME | 0x00404037
TAG_REAL_WORLD_VALUE_MAPPING_SEQUENCE | 0x00409096
TAG_LUT_LABEL | 0x00409210
TAG_REAL_WORLD_VALUE_LAST_VALUE_MAPPED | 0x00409211
TAG_REAL_WORLD_VALUE_LUT_DATA | 0x00409212
TAG_REAL_WORLD_VALUE_FIRST_VALUE_MAPPED | 0x00409216
TAG_REAL_WORLD_VALUE_INTERCEPT | 0x00409224
TAG_REAL_WORLD_VALUE_SLOPE | 0x00409225
TAG_PURPOSE_OF_REFERENCE_CODE_SEQUENCE | 0x0040A170
TAG_NUMERIC_VALUE_QUALIFIER_CODE_SEQUENCE | 0x0040A301
TAG_CALIBRATION_IMAGE | 0x00500004
TAG_DEVICE_SEQUENCE | 0x00500010
TAG_DEVICE_LENGTH | 0x00500014
TAG_DEVICE_DIAMETER | 0x00500016
TAG_DEVICE_DIAMETER_UNITS | 0x00500017
TAG_DEVICE_VOLUME | 0x00500018
TAG_INTER_MARKER_DISTANCE | 0x00500019
TAG_DEVICE_DESCRIPTION | 0x00500020
TAG_ENERGY_WINDOW_VECTOR | 0x00540010
TAG_NUMBER_OF_ENERGY_WINDOWS | 0x00540011
TAG_ENERGY_WINDOW_INFORMATION_SEQUENCE | 0x00540012
TAG_ENERGY_WINDOW_RANGE_SEQUENCE | 0x00540013
TAG_ENERGY_WINDOW_LOWER_LIMIT | 0x00540014
TAG_ENERGY_WINDOW_UPPER_LIMIT | 0x00540015
TAG_RADIOPHARMACEUTICAL_INFORMATION_SEQUENCE | 0x00540016
TAG_RESIDUAL_SYRINGE_COUNTS | 0x00540017
TAG_ENERGY_WINDOW_NAME | 0x00540018
TAG_DETECTOR_VECTOR | 0x00540020
TAG_NUMBER_OF_DETECTORS | 0x00540021
TAG_DETECTOR_INFORMATION_SEQUENCE | 0x00540022
TAG_PHASE_VECTOR | 0x00540030
TAG_NUMBER_OF_PHASES | 0x00540031
TAG_PHASE_INFORMATION_SEQUENCE | 0x00540032
TAG_NUMBER_OF_FRAMES_IN_PHASE | 0x00540033
TAG_PHASE_DELAY | 0x00540036
TAG_PAUSE_BETWEEN_FRAMES | 0x00540038
TAG_ROTATION_VECTOR | 0x00540050
TAG_NUMBER_OF_ROTATIONS | 0x00540051
TAG_ROTATION_INFORMATION_SEQUENCE | 0x00540052
TAG_NUMBER_OF_FRAMES_IN_ROTATION | 0x00540053
TAG_R_R_INTERVAL_VECTOR | 0x00540060
TAG_NUMBER_OF_R_R_INTERVALS | 0x00540061
TAG_GATED_INFORMATION_SEQUENCE | 0x00540062
TAG_DATA_INFORMATION_SEQUENCE | 0x00540063
TAG_TIME_SLOT_VECTOR | 0x00540070
TAG_NUMBER_OF_TIME_SLOTS | 0x00540071
TAG_TIME_SLOT_INFORMATION_SEQUENCE | 0x00540072
TAG_TIME_SLOT_TIME | 0x00540073
TAG_SLICE_VECTOR | 0x00540080
TAG_NUMBER_OF_SLICES | 0x00540081
TAG_ANGULAR_VIEW_VECTOR | 0x00540090
TAG_TIME_SLICE_VECTOR | 0x00540100
TAG_NUMBER_OF_TIME_SLICES | 0x00540101
TAG_START_ANGLE | 0x00540200
TAG_TYPE_OF_DETECTOR_MOTION | 0x00540202
TAG_TRIGGER_VECTOR | 0x00540210
TAG_NUMBER_OF_TRIGGERS_IN_PHASE | 0x00540211
TAG_VIEW_CODE_SEQUENCE | 0x00540220
TAG_VIEW_MODIFIER_CODE_SEQUENCE | 0x00540222
TAG_RADIONUCLIDE_CODE_SEQUENCE | 0x00540300
TAG_ADMINISTRATION_ROUTE_CODE_SEQUENCE | 0x00540302
TAG_RADIOPHARMACEUTICAL_CODE_SEQUENCE | 0x00540304
TAG_CALIBRATION_DATA_SEQUENCE | 0x00540306
TAG_ENERGY_WINDOW_NUMBER | 0x00540308
TAG_IMAGE_ID | 0x00540400
TAG_PATIENT_ORIENTATION_CODE_SEQUENCE | 0x00540410
TAG_PATIENT_ORIENTATION_MODIFIER_CODE_SEQUENCE | 0x00540412
TAG_PATIENT_GANTRY_RELATIONSHIP_CODE_SEQUENCE | 0x00540414
TAG_SERIES_TYPE | 0x00541000
TAG_UNITS | 0x00541001
TAG_COUNTS_SOURCE | 0x00541002
TAG_REPROJECTION_METHOD | 0x00541004
TAG_RANDOMS_CORRECTION_METHOD | 0x00541100
TAG_ATTENUATION_CORRECTION_METHOD | 0x00541101
TAG_DECAY_CORRECTION | 0x00541102
TAG_RECONSTRUCTION_METHOD | 0x00541103
TAG_DETECTOR_LINES_OF_RESPONSE_USED | 0x00541104
TAG_SCATTER_CORRECTION_METHOD | 0x00541105
TAG_AXIAL_ACCEPTANCE | 0x00541200
TAG_AXIAL_MASH | 0x00541201
TAG_TRANSVERSE_MASH | 0x00541202
TAG_DETECTOR_ELEMENT_SIZE | 0x00541203
TAG_COINCIDENCE_WINDOW_WIDTH | 0x00541210
TAG_SECONDARY_COUNTS_TYPE | 0x00541220
TAG_FRAME_REFERENCE_TIME | 0x00541300
TAG_PRIMARY_PROMPTS_COUNTS_ACCUMULATED | 0x00541310
TAG_SECONDARY_COUNTS_ACCUMULATED | 0x00541311
TAG_SLICE_SENSITIVITY_FACTOR | 0x00541320
TAG_DECAY_FACTOR | 0x00541321
TAG_DOSE_CALIBRATION_FACTOR | 0x00541322
TAG_SCATTER_FRACTION_FACTOR | 0x00541323
TAG_DEAD_TIME_FACTOR | 0x00541324
TAG_IMAGE_INDEX | 0x00541330
TAG_COUNTS_INCLUDED | 0x00541400
TAG_DEAD_TIME_CORRECTION_FLAG | 0x00541401
TAG_HISTOGRAM_SEQUENCE | 0x00603000
TAG_HISTOGRAM_NUMBER_OF_BINS | 0x00603002
TAG_HISTOGRAM_FIRST_BIN_VALUE | 0x00603004
TAG_HISTOGRAM_LAST_BIN_VALUE | 0x00603006
TAG_HISTOGRAM_BIN_WIDTH | 0x00603008
TAG_HISTOGRAM_EXPLANATION | 0x00603010
TAG_HISTOGRAM_DATA | 0x00603020
TAG_GRAPHIC_ANNOTATION_SEQUENCE | 0x00700001
TAG_GRAPHIC_LAYER | 0x00700002
TAG_BOUNDING_BOX_ANNOTATION_UNITS | 0x00700003
TAG_ANCHOR_POINT_ANNOTATION_UNITS | 0x00700004
TAG_GRAPHIC_ANNOTATION_UNITS | 0x00700005
TAG_UNFORMATTED_TEXT_VALUE | 0x00700006
TAG_TEXT_OBJECT_SEQUENCE | 0x00700008
TAG_GRAPHIC_OBJECT_SEQUENCE | 0x00700009
TAG_BOUNDING_BOX_TOP_LEFT_HAND_CORNER | 0x00700010
TAG_BOUNDING_BOX_BOTTOM_RIGHT_HAND_CORNER | 0x00700011
TAG_BOUNDING_BOX_TEXT_HORIZONTAL_JUSTIFICATION | 0x00700012
TAG_ANCHOR_POINT | 0x00700014
TAG_ANCHOR_POINT_VISIBILITY | 0x00700015
TAG_GRAPHIC_DIMENSIONS | 0x00700020
TAG_NUMBER_OF_GRAPHIC_POINTS | 0x00700021
TAG_GRAPHIC_DATA | 0x00700022
TAG_GRAPHIC_TYPE | 0x00700023
TAG_GRAPHIC_FILLED | 0x00700024
TAG_DISPLAYED_AREA_TOP_LEFT_HAND_CORNER | 0x00700052
TAG_DISPLAYED_AREA_BOTTOM_RIGHT_HAND_CORNER | 0x00700053
TAG_DISPLAYED_AREA_SELECTION_SEQUENCE | 0x0070005A
TAG_GRAPHIC_LAYER_SEQUENCE | 0x00700060
TAG_GRAPHIC_LAYER_ORDER | 0x00700062
TAG_GRAPHIC_LAYER_RECOMMENDED_DISPLAY_GRAYSCALE_VALUE | 0x00700066
TAG_GRAPHIC_LAYER_RECOMMENDED_DISPLAY_RGB_VALUE | 0x00700067
TAG_GRAPHIC_LAYER_DESCRIPTION | 0x00700068
TAG_PRESENTATION_LABEL | 0x00700080
TAG_PRESENTATION_DESCRIPTION | 0x00700081
TAG_PRESENTATION_CREATTION_DATE | 0x00700082
TAG_PRESENTATION_CREATTION_TIME | 0x00700083
TAG_PRESENTATION_CREATOR_NAME | 0x00700084
TAG_PRESENTATION_SIZE_MODE | 0x00700100
TAG_PRESENTATION_PIXEL_SPACING | 0x00700101
TAG_PRESENTATION_PIXEL_ASPECT_RATIO | 0x00700102
TAG_PRESENTATION_PIXEL_MAGNIFICATION_RATIO | 0x00700103
TAG_STORAGE_MEDIA_FILE_SET_ID | 0x00880130
TAG_STORAGE_MEDIA_FILE_SET_UID | 0x00880140
TAG_ICON_IMAGE_SEQUENCE | 0x00880200
TAG_TOPIC_TITLE | 0x00880904
TAG_TOPIC_SUBJECT | 0x00880906
TAG_TOPIC_AUTHOR | 0x00880910
TAG_TOPIC_KEY_WORDS | 0x00880912
TAG_MAC_ID_NUMBER | 0x04000005
TAG_MAC_CALCULATION_TRANSFER_SYNTAX_UID | 0x04000010
TAG_MAC_ALGORITHM | 0x04000015
TAG_DATA_ELEMENTS_SIGNED | 0x04000020
TAG_DIGITAL_SIGNATURE_UID | 0x04000100
TAG_DIGITAL_SIGNATURE_DATETIME | 0x04000105
TAG_CERTIFICATE_TYPE | 0x04000110
TAG_CERTIFICATE_OF_SIGNER | 0x04000115
TAG_SIGNATURE | 0x04000120
TAG_CERTIFIED_TIMESTAMP_TYPE | 0x04000305
TAG_CERTIFIED_TIMESTAMP | 0x04000310
TAG_ENCRYPTED_ATTRIBUTES_SEQUENCE | 0x04000500
TAG_ENCRYPTED_CONTENT_TRANSFER_SYNTAX_UID | 0x04000510
TAG_ENCRYPTED_CONTENT | 0x04000520
TAG_MODIFIED_ATTRIBUTES_SEQUENCE | 0x04000550
TAG_NUMBER_OF_COPIES | 0x20000010
TAG_PRINTER_CONFIGURATION_SEQUENCE | 0x2000001E
TAG_PRINT_PRIORITY | 0x20000020
TAG_MEDIUM_TYPE | 0x20000030
TAG_FILM_DESTINATION | 0x20000040
TAG_FILM_SESSION_LABEL | 0x20000050
TAG_MEMORY_ALLOCATION | 0x20000060
TAG_MAXIMUM_MEMORY_ALLOCATION | 0x20000061
TAG_COLOR_IMAGE_PRINTING_FLAG | 0x20000062
TAG_COLLATION_FLAG | 0x20000063
TAG_ANNOTATION_FLAG | 0x20000065
TAG_IMAGE_OVERLAY_FLAG | 0x20000067
TAG_PRESENTATION_LUT_FLAG | 0x20000069
TAG_IMAGE_BOX_PRESENTATION_LUT_FLAG | 0x2000006A
TAG_MEMORY_BIT_DEPTH | 0x200000A0
TAG_PRINTING_BIT_DEPTH | 0x200000A1
TAG_MEDIA_INSTALLED_SEQUENCE | 0x200000A2
TAG_OTHER_MEDIA_AVAILABLE_SEQUENCE | 0x200000A4
TAG_SUPPORTED_IMAGE_DISPLAY_FORMATS_SEQUENCE | 0x200000A8
TAG_REFERENCED_FILM_BOX_SEQUENCE | 0x20000500
TAG_REFERENCED_STORED_PRINT_SEQUENCE | 0x20000510
TAG_IMAGE_DISPLAY_FORMAT | 0x20100010
TAG_ANNOTATION_DISPLAY_FORMAT_ID | 0x20100030
TAG_FILM_ORIENTATION | 0x20100040
TAG_FILM_SIZE_ID | 0x20100050
TAG_PRINTER_RESOLUTION_ID | 0x20100052
TAG_DEFAULT_PRINTER_RESOLUTION_ID | 0x20100054
TAG_MAGNIFICATION_TYPE | 0x20100060
TAG_SMOOTHING_TYPE | 0x20100080
TAG_DEFAULT_MAGNIFICATION_TYPE | 0x201000A6
TAG_OTHER_MAGNIFICATION_TYPES_AVAILABLE | 0x201000A7
TAG_DEFAULT_SMOOTHING_TYPE | 0x201000A8
TAG_OTHER_SMOOTHING_TYPES_AVAILABLE | 0x201000A9
TAG_BORDER_DENSITY | 0x20100100
TAG_EMPTY_IMAGE_DENSITY | 0x20100110
TAG_MIN_DENSITY | 0x20100120
TAG_MAX_DENSITY | 0x20100130
TAG_TRIM | 0x20100140
TAG_CONFIGURATION_INFORMATION | 0x20100150
TAG_CONFIGURATION_INFORMATION_DESCRIPTION | 0x20100152
TAG_MAXIMUM_COLLATED_FILMS | 0x20100154
TAG_ILLUMINATION | 0x2010015E
TAG_REFLECTED_AMBIENT_LIGHT | 0x20100160
TAG_PRINTER_PIXEL_SPACING | 0x20100376
TAG_REFERENCED_FILM_SESSION_SEQUENCE | 0x20100500
TAG_REFERENCED_IMAGE_BOX_SEQUENCE | 0x20100510
TAG_REFERENCED_BASIC_ANNOTATION_BOX_SEQUENCE | 0x20100520
TAG_IMAGE_POSITION | 0x20200010
TAG_POLARITY | 0x20200020
TAG_REQUESTED_IMAGE_SIZE | 0x20200030
TAG_REQUESTED_DECIMATE_CROP_BEHAVIOR | 0x20200040
TAG_REQUESTED_RESOLUTION_ID | 0x20200050
TAG_REQUESTED_IMAGE_SIZE_FLAG | 0x202000A0
TAG_DECIMATE_CROP_RESULT | 0x202000A2
TAG_BASIC_GRAYSCALE_IMAGE_SEQUENCE | 0x20200110
TAG_BASIC_COLOR_IMAGE_SEQUENCE | 0x20200111
TAG_REFERENCED_IMAGE_OVERLAY_BOX_SEQUENCE_RETIRED | 0x20200130
TAG_REFERENCED_VOI_LUT_BOX_SEQUENCE_RETIRED | 0x20200140
TAG_ANNOTATION_POSITION | 0x20300010
TAG_TEXT_STRING | 0x20300020
TAG_REFERENCED_OVERLAY_PLANE_SEQUENCE | 0x20400010
TAG_REFERENCED_OVERLAY_PLANE_GROUPS | 0x20400011
TAG_OVERLAY_PIXEL_DATA_SEQUENCE | 0x20400020
TAG_OVERLAY_MAGNIFICATION_TYPE | 0x20400060
TAG_OVERLAY_SMOOTHING_TYPE | 0x20400070
TAG_OVERLAY_OR_IMAGE_MAGNIFICATION | 0x20400072
TAG_MAGNIFY_TO_NUMBER_OF_COLUMNS | 0x20400074
TAG_OVERLAY_FOREGROUND_DENSITY | 0x20400080
TAG_OVERLAY_BACKGROUND_DENSITY | 0x20400082
TAG_OVERLAY_MODE_RETIRED | 0x20400090
TAG_THRESHOLD_DENSITY_RETIRED | 0x20400100
TAG_REFERENCED_IMAGE_BOX_SEQUENCE_RETIRED | 0x20400500
TAG_PRESENTATION_LUT_SEQUENCE | 0x20500010
TAG_PRESENTATION_LUT_SHAPE | 0x20500020
TAG_REFERENCED_PRESENTATION_LUT_SEQUENCE | 0x20500500
TAG_PRINT_JOB_ID | 0x21000010
TAG_EXECUTION_STATUS | 0x21000020
TAG_EXECUTION_STATUS_INFO | 0x21000030
TAG_CREATION_DATE | 0x21000040
TAG_CREATION_TIME | 0x21000050
TAG_ORIGINATOR | 0x21000070
TAG_DESTINATION_AE | 0x21000140
TAG_OWNER_ID | 0x21000160
TAG_NUMBER_OF_FILMS | 0x21000170
TAG_REFERENCED_PRINT_JOB_SEQUENCE_2100 | 0x21000500
TAG_PRINTER_STATUS | 0x21100010
TAG_PRINTER_STATUS_INFO | 0x21100020
TAG_PRINTER_NAME | 0x21100030
TAG_PRINT_QUEUE_ID | 0x21100099
TAG_QUEUE_STATUS | 0x21200010
TAG_PRINT_JOB_DESCRIPTION_SEQUENCE | 0x21200050
TAG_REFERENCED_PRINT_JOB_SEQUENCE_2120 | 0x21200070
TAG_PRINT_MANAGEMENT_CAPABILITIES_SEQUENCE | 0x21300010
TAG_PRINTER_CHARACTERISTICS_SEQUENCE | 0x21300015
TAG_FILM_BOX_CONTENT_SEQUENCE | 0x21300030
TAG_IMAGE_BOX_CONTENT_SEQUENCE | 0x21300040
TAG_ANNOTATION_CONTENT_SEQUENCE | 0x21300050
TAG_IMAGE_OVERLAY_BOX_CONTENT_SEQUENCE | 0x21300060
TAG_PRESENTATION_LUT_CONTENT_SEQUENCE | 0x21300080
TAG_PROPOSED_STUDY_SEQUENCE | 0x213000A0
TAG_ORIGINAL_IMAGE_SEQUENCE | 0x213000C0
TAG_RT_IMAGE_LABEL | 0x30020002
TAG_RT_IMAGE_NAME | 0x30020003
TAG_RT_IMAGE_DESCRIPTION | 0x30020004
TAG_REPORTED_VALUES_ORIGIN | 0x3002000A
TAG_RT_IMAGE_PLANE | 0x3002000C
TAG_X_RAY_IMAGE_RECEPTOR_ANGLE | 0x3002000E
TAG_RT_IMAGE_ORIENTATION | 0x30020010
TAG_IMAGE_PLANE_PIXEL_SPACING | 0x30020011
TAG_RT_IMAGE_POSITION | 0x30020012
TAG_RADIATION_MACHINE_NAME | 0x30020020
TAG_RADIATION_MACHINE_SAD | 0x30020022
TAG_RADIATION_MACHINE_SSD | 0x30020024
TAG_RT_IMAGE_SID | 0x30020026
TAG_SOURCE_TO_REFERENCE_OBJECT_DISTANCE | 0x30020028
TAG_FRACTION_NUMBER | 0x30020029
TAG_EXPOSURE_SEQUENCE | 0x30020030
TAG_METERSET_EXPOSURE | 0x30020032
TAG_DIAPHRAGM_POSITION | 0x30020034
TAG_DVH_TYPE | 0x30040001
TAG_DOSE_UNITS | 0x30040002
TAG_DOSE_TYPE | 0x30040004
TAG_DOSE_COMMENT | 0x30040006
TAG_NORMALIZATION_POINT | 0x30040008
TAG_DOSE_SUMMATION_TYPE | 0x3004000A
TAG_GRID_FRAME_OFFSET_VECTOR | 0x3004000C
TAG_DOSE_GRID_SCALING | 0x3004000E
TAG_RT_DOSE_ROI_SEQUENCE | 0x30040010
TAG_DOSE_VALUE | 0x30040012
TAG_DVH_NORMALIZATION_POINT | 0x30040040
TAG_DVH_NORMALIZATION_DOSE_VALUE | 0x30040042
TAG_DVH_SEQUENCE | 0x30040050
TAG_DVH_DOSE_SCALING | 0x30040052
TAG_DVH_VOLUME_UNITS | 0x30040054
TAG_DVH_NUMBER_OF_BINS | 0x30040056
TAG_DVH_DATA | 0x30040058
TAG_DVH_REFERENCED_ROI_SEQUENCE | 0x30040060
TAG_DVH_ROI_CONTRIBUTION_TYPE | 0x30040062
TAG_DVH_MINIMUM_DOSE | 0x30040070
TAG_DVH_MAXIMUM_DOSE | 0x30040072
TAG_DVH_MEAN_DOSE | 0x30040074
TAG_STRUCTURE_SET_LABEL | 0x30060002
TAG_STRUCTURE_SET_NAME | 0x30060004
TAG_STRUCTURE_SET_DESCRIPTION | 0x30060006
TAG_STRUCTURE_SET_DATE | 0x30060008
TAG_STRUCTURE_SET_TIME | 0x30060009
TAG_REFERENCED_FRAME_OF_REFERENCE_SEQUENCE | 0x30060010
TAG_RT_REFERENCED_STUDY_SEQUENCE | 0x30060012
TAG_RT_REFERENCED_SERIES_SEQUENCE | 0x30060014
TAG_CONTOUR_IMAGE_SEQUENCE | 0x30060016
TAG_STRUCTURE_SET_ROI_SEQUENCE | 0x30060020
TAG_ROI_NUMBER | 0x30060022
TAG_REFERENCED_FRAME_OF_REFERENCE_UID | 0x30060024
TAG_ROI_NAME | 0x30060026
TAG_ROI_DESCRIPTION | 0x30060028
TAG_ROI_DISPLAY_COLOR | 0x3006002A
TAG_ROI_VOLUME | 0x3006002C
TAG_RT_RELATED_ROI_SEQUENCE | 0x30060030
TAG_RT_ROI_RELATIONSHIP | 0x30060033
TAG_ROI_GENERATION_ALGORITHM | 0x30060036
TAG_ROI_GENERATION_DESCRIPTION | 0x30060038
TAG_ROI_CONTOUR_SEQUENCE | 0x30060039
TAG_CONTOUR_SEQUENCE | 0x30060040
TAG_CONTOUR_GEOMETRIC_TYPE | 0x30060042
TAG_CONTOUR_SLAB_THICKNESS | 0x30060044
TAG_CONTOUR_OFFSET_VECTOR | 0x30060045
TAG_NUMBER_OF_CONTOUR_POINTS | 0x30060046
TAG_CONTOUR_DATA | 0x30060050
TAG_RT_ROI_OBSERVATIONS_SEQUENCE | 0x30060080
TAG_OBSERVATION_NUMBER | 0x30060082
TAG_REFERENCED_ROI_NUMBER | 0x30060084
TAG_ROI_OBSERVATION_LABEL | 0x30060085
TAG_RT_ROI_IDENTIFICATION_CODE_SEQUENCE | 0x30060086
TAG_ROI_OBSERVATION_DESCRIPTION | 0x30060088
TAG_RELATED_RT_ROI_OBSERVATIONS_SEQUENCE | 0x300600A0
TAG_RT_ROI_INTERPRETED_TYPE | 0x300600A4
TAG_ROI_INTERPRETER | 0x300600A6
TAG_ROI_PHYSICAL_PROPERTIES_SEQUENCE | 0x300600B0
TAG_ROI_PHYSICAL_PROPERTY | 0x300600B2
TAG_ROI_PHYSICAL_PROPERTY_VALUE | 0x300600B4
TAG_FRAME_OF_REFERENCE_RELATIONSHIP_SEQUENCE | 0x300600C0
TAG_RELATED_FRAME_OF_REFERENCE_UID | 0x300600C2
TAG_FRAME_OF_REFERENCE_TRANSFORMATION_TYPE | 0x300600C4
TAG_FRAME_OF_REFERENCE_TRANSFORMATION_MATRIX | 0x300600C6
TAG_FRAME_OF_REFERENCE_TRANSFORMATION_COMMENT | 0x300600C8
TAG_MEASURED_DOSE_REFERENCE_SEQUENCE | 0x30080010
TAG_MEASURED_DOSE_DESCRIPTION | 0x30080012
TAG_MEASURED_DOSE_TYPE | 0x30080014
TAG_MEASURED_DOSE_VALUE | 0x30080016
TAG_TREATMENT_SESSION_BEAM_SEQUENCE | 0x30080020
TAG_CURRENT_FRACTION_NUMBER | 0x30080022
TAG_TREATMENT_CONTROL_POINT_DATE | 0x30080024
TAG_TREATMENT_CONTROL_POINT_TIME | 0x30080025
TAG_TREATMENT_TERMINATION_STATUS | 0x3008002A
TAG_TREATMENT_TERMINATION_CODE | 0x3008002B
TAG_TREATMENT_VERIFICATION_STATUS | 0x3008002C
TAG_REFERENCED_TREATMENT_RECORD_SEQUENCE | 0x30080030
TAG_SPECIFIED_PRIMARY_METERSET | 0x30080032
TAG_SPECIFIED_SECONDARY_METERSET | 0x30080033
TAG_DELIVERED_PRIMARY_METERSET | 0x30080036
TAG_DELIVERED_SECONDARY_METERSET | 0x30080037
TAG_SPECIFIED_TREATMENT_TIME | 0x3008003A
TAG_DELIVERED_TREATMENT_TIME | 0x3008003B
TAG_CONTROL_POINT_DELIVERY_SEQUENCE | 0x30080040
TAG_SPECIFIED_METERSET | 0x30080042
TAG_DELIVERED_METERSET | 0x30080044
TAG_DOSE_RATE_DELIVERED | 0x30080048
TAG_TREATMENT_SUMMARY_CALCULATED_DOSE_REFERENCE_SEQUENCE | 0x30080050
TAG_CUMULATIVE_DOSE_TO_DOSE_REFERENCE | 0x30080052
TAG_FIRST_TREATMENT_DATE | 0x30080054
TAG_MOST_RECENT_TREATMENT_DATE | 0x30080056
TAG_NUMBER_OF_FRACTIONS_DELIVERED | 0x3008005A
TAG_OVERRIDE_SEQUENCE | 0x30080060
TAG_OVERRIDE_PARAMETER_POINTER | 0x30080062
TAG_MEASURED_DOSE_REFERENCE_NUMBER | 0x30080064
TAG_OVERRIDE_REASON | 0x30080066
TAG_CALCULATED_DOSE_REFERENCE_SEQUENCE | 0x30080070
TAG_CALCULATED_DOSE_REFERENCE_NUMBER | 0x30080072
TAG_CALCULATED_DOSE_REFERENCE_DESCRIPTION | 0x30080074
TAG_CALCULATED_DOSE_REFERENCE_DOSE_VALUE | 0x30080076
TAG_START_METERSET | 0x30080078
TAG_END_METERSET | 0x3008007A
TAG_REFERENCED_MEASURED_DOSE_REFERENCE_SEQUENCE | 0x30080080
TAG_REFERENCED_MEASURED_DOSE_REFERENCE_NUMBER | 0x30080082
TAG_REFERENCED_CALCULATED_DOSE_REFERENCE_SEQUENCE | 0x30080090
TAG_REFERENCED_CALCULATED_DOSE_REFERENCE_NUMBER | 0x30080092
TAG_BEAM_LIMITING_DEVICE_LEAF_PAIRS_SEQUENCE | 0x300800A0
TAG_RECORDED_WEDGE_SEQUENCE | 0x300800B0
TAG_RECORDED_COMPENSATOR_SEQUENCE | 0x300800C0
TAG_RECORDED_BLOCK_SEQUENCE | 0x300800D0
TAG_TREATMENT_SUMMARY_MEASURED_DOSE_REFERENCE_SEQUENCE | 0x300800E0
TAG_RECORDED_SOURCE_SEQUENCE | 0x30080100
TAG_SOURCE_SERIAL_NUMBER | 0x30080105
TAG_TREATMENT_SESSION_APPLICATION_SETUP_SEQUENCE | 0x30080110
TAG_APPLICATION_SETUP_CHECK | 0x30080116
TAG_RECORDED_BRACHY_ACCESSORY_DEVICE_SEQUENCE | 0x30080120
TAG_REFERENCED_BRACHY_ACCESSORY_DEVICE_NUMBER | 0x30080122
TAG_RECORDED_CHANNEL_SEQUENCE | 0x30080130
TAG_SPECIFIED_CHANNEL_TOTAL_TIME | 0x30080132
TAG_DELIVERED_CHANNEL_TOTAL_TIME | 0x30080134
TAG_SPECIFIED_NUMBER_OF_PULSES | 0x30080136
TAG_DELIVERED_NUMBER_OF_PULSES | 0x30080138
TAG_SPECIFIED_PULSE_REPETITION_INTERVAL | 0x3008013A
TAG_DELIVERED_PULSE_REPETITION_INTERVAL | 0x3008013C
TAG_RECORDED_SOURCE_APPLICATOR_SEQUENCE | 0x30080140
TAG_REFERENCED_SOURCE_APPLICATOR_NUMBER | 0x30080142
TAG_RECORDED_CHANNEL_SHIELD_SEQUENCE | 0x30080150
TAG_REFERENCED_CHANNEL_SHIELD_NUMBER | 0x30080152
TAG_BRACHY_CONTROL_POINT_DELIVERED_SEQUENCE | 0x30080160
TAG_SAFE_POSITION_EXIT_DATE | 0x30080162
TAG_SAFE_POSITION_EXIT_TIME | 0x30080164
TAG_SAFE_POSITION_RETURN_DATE | 0x30080166
TAG_SAFE_POSITION_RETURN_TIME | 0x30080168
TAG_CURRENT_TREATMENT_STATUS | 0x30080200
TAG_TREATMENT_STATUS_COMMENT | 0x30080202
TAG_FRACTION_GROUP_SUMMARY_SEQUENCE | 0x30080220
TAG_REFERENCED_FRACTION_NUMBER | 0x30080223
TAG_FRACTION_GROUP_TYPE | 0x30080224
TAG_BEAM_STOPPER_POSITION | 0x30080230
TAG_FRACTION_STATUS_SUMMARY_SEQUENCE | 0x30080240
TAG_TREATMENT_DATE | 0x30080250
TAG_TREATMENT_TIME | 0x30080251
TAG_RT_PLAN_LABEL | 0x300A0002
TAG_RT_PLAN_NAME | 0x300A0003
TAG_RT_PLAN_DESCRIPTION | 0x300A0004
TAG_RT_PLAN_DATE | 0x300A0006
TAG_RT_PLAN_TIME | 0x300A0007
TAG_TREATMENT_PROTOCOLS | 0x300A0009
TAG_TREATMENT_INTENT | 0x300A000A
TAG_TREATMENT_SITES | 0x300A000B
TAG_RT_PLAN_GEOMETRY | 0x300A000C
TAG_PRESCRIPTION_DESCRIPTION | 0x300A000E
TAG_DOSE_REFERENCE_SEQUENCE | 0x300A0010
TAG_DOSE_REFERENCE_NUMBER | 0x300A0012
TAG_DOSE_REFERENCE_STRUCTURE_TYPE | 0x300A0014
TAG_NOMINAL_BEAM_ENERGY_UNIT | 0x300A0015
TAG_DOSE_REFERENCE_DESCRIPTION | 0x300A0016
TAG_DOSE_REFERENCE_POINT_COORDINATES | 0x300A0018
TAG_NOMINAL_PRIOR_DOSE | 0x300A001A
TAG_DOSE_REFERENCE_TYPE | 0x300A0020
TAG_CONSTRAINT_WEIGHT | 0x300A0021
TAG_DELIVERY_WARNING_DOSE | 0x300A0022
TAG_DELIVERY_MAXIMUM_DOSE | 0x300A0023
TAG_TARGET_MINIMUM_DOSE | 0x300A0025
TAG_TARGET_PRESCRIPTION_DOSE | 0x300A0026
TAG_TARGET_MAXIMUM_DOSE | 0x300A0027
TAG_TARGET_UNDERDOSE_VOLUME_FRACTION | 0x300A0028
TAG_ORGAN_AT_RISK_FULL_VOLUME_DOSE | 0x300A002A
TAG_ORGAN_AT_RISK_LIMIT_DOSE | 0x300A002B
TAG_ORGAN_AT_RISK_MAXIMUM_DOSE | 0x300A002C
TAG_ORGAN_AT_RISK_OVERDOSE_VOLUME_FRACTION | 0x300A002D
TAG_TOLERANCE_TABLE_SEQUENCE | 0x300A0040
TAG_TOLERANCE_TABLE_NUMBER | 0x300A0042
TAG_TOLERANCE_TABLE_LABEL | 0x300A0043
TAG_GANTRY_ANGLE_TOLERANCE | 0x300A0044
TAG_BEAM_LIMITING_DEVICE_ANGLE_TOLERANCE | 0x300A0046
TAG_BEAM_LIMITING_DEVICE_TOLERANCE_SEQUENCE | 0x300A0048
TAG_BEAM_LIMITING_DEVICE_POSITION_TOLERANCE | 0x300A004A
TAG_PATIENT_SUPPORT_ANGLE_TOLERANCE | 0x300A004C
TAG_TABLE_TOP_ECCENTRIC_ANGLE_TOLERANCE | 0x300A004E
TAG_TABLE_TOP_VERTICAL_POSITION_TOLERANCE | 0x300A0051
TAG_TABLE_TOP_LONGITUDINAL_POSITION_TOLERANCE | 0x300A0052
TAG_TABLE_TOP_LATERAL_POSITION_TOLERANCE | 0x300A0053
TAG_RT_PLAN_RELATIONSHIP | 0x300A0055
TAG_FRACTION_GROUP_SEQUENCE | 0x300A0070
TAG_FRACTION_GROUP_NUMBER | 0x300A0071
TAG_NUMBER_OF_FRACTIONS_PLANNED | 0x300A0078
TAG_NUMBER_OF_FRACTIONS_PER_DAY | 0x300A0079
TAG_REPEAT_FRACTION_CYCLE_LENGTH | 0x300A007A
TAG_FRACTION_PATTERN | 0x300A007B
TAG_NUMBER_OF_BEAMS | 0x300A0080
TAG_BEAM_DOSE_SPECIFICATION_POINT | 0x300A0082
TAG_BEAM_DOSE | 0x300A0084
TAG_BEAM_METERSET | 0x300A0086
TAG_NUMBER_OF_BRACHY_APPLICATION_SETUPS | 0x300A00A0
TAG_BRACHY_APPLICATION_SETUP_DOSE_SPECIFICATION_POINT | 0x300A00A2
TAG_BRACHY_APPLICATION_SETUP_DOSE | 0x300A00A4
TAG_BEAM_SEQUENCE | 0x300A00B0
TAG_TREATMENT_MACHINE_NAME | 0x300A00B2
TAG_PRIMARY_DOSIMETER_UNIT | 0x300A00B3
TAG_SOURCE_AXIS_DISTANCE | 0x300A00B4
TAG_BEAM_LIMITING_DEVICE_SEQUENCE | 0x300A00B6
TAG_RT_BEAM_LIMITING_DEVICE_TYPE | 0x300A00B8
TAG_SOURCE_TO_BEAM_LIMITING_DEVICE_DISTANCE | 0x300A00BA
TAG_NUMBER_OF_LEAF_JAW_PAIRS | 0x300A00BC
TAG_LEAF_POSITION_BOUNDARIES | 0x300A00BE
TAG_BEAM_NUMBER | 0x300A00C0
TAG_BEAM_NAME | 0x300A00C2
TAG_BEAM_DESCRIPTION | 0x300A00C3
TAG_BEAM_TYPE | 0x300A00C4
TAG_RADIATION_TYPE | 0x300A00C6
TAG_HIGHDOSE_TECHNIQUE_TYPE | 0x300A00C7
TAG_REFERENCE_IMAGE_NUMBER | 0x300A00C8
TAG_PLANNED_VERIFICATION_IMAGE_SEQUENCE | 0x300A00CA
TAG_IMAGING_DEVICE_SPECIFIC_ACQUISITION_PARAMETERS | 0x300A00CC
TAG_TREATMENT_DELIVERY_TYPE | 0x300A00CE
TAG_NUMBER_OF_WEDGES | 0x300A00D0
TAG_WEDGE_SEQUENCE | 0x300A00D1
TAG_WEDGE_NUMBER | 0x300A00D2
TAG_WEDGE_TYPE | 0x300A00D3
TAG_WEDGE_ID | 0x300A00D4
TAG_WEDGE_ANGLE | 0x300A00D5
TAG_WEDGE_FACTOR | 0x300A00D6
TAG_WEDGE_ORIENTATION | 0x300A00D8
TAG_SOURCE_TO_WEDGE_TRAY_DISTANCE | 0x300A00DA
TAG_NUMBER_OF_COMPENSATORS | 0x300A00E0
TAG_MATERIAL_ID | 0x300A00E1
TAG_TOTAL_COMPENSATOR_TRAY_FACTOR | 0x300A00E2
TAG_COMPENSATOR_SEQUENCE | 0x300A00E3
TAG_COMPENSATOR_NUMBER | 0x300A00E4
TAG_COMPENSATOR_ID | 0x300A00E5
TAG_SOURCE_TO_COMPENSATOR_TRAY_DISTANCE | 0x300A00E6
TAG_COMPENSATOR_ROWS | 0x300A00E7
TAG_COMPENSATOR_COLUMNS | 0x300A00E8
TAG_COMPENSATOR_PIXEL_SPACING | 0x300A00E9
TAG_COMPENSATOR_POSITION | 0x300A00EA
TAG_COMPENSATOR_TRANSMISSION_DATA | 0x300A00EB
TAG_COMPENSATOR_THICKNESS_DATA | 0x300A00EC
TAG_NUMBER_OF_BOLI | 0x300A00ED
TAG_COMPENSATOR_TYPE | 0x300A00EE
TAG_NUMBER_OF_BLOCKS | 0x300A00F0
TAG_TOTAL_BLOCK_TRAY_FACTOR | 0x300A00F2
TAG_BLOCK_SEQUENCE | 0x300A00F4
TAG_BLOCK_TRAY_ID | 0x300A00F5
TAG_SOURCE_TO_BLOCK_TRAY_DISTANCE | 0x300A00F6
TAG_BLOCK_TYPE | 0x300A00F8
TAG_BLOCK_DIVERGENCE | 0x300A00FA
TAG_BLOCK_MOUNTING_POSITION | 0x300A00FB
TAG_BLOCK_NUMBER | 0x300A00FC
TAG_BLOCK_NAME | 0x300A00FE
TAG_BLOCK_THICKNESS | 0x300A0100
TAG_BLOCK_TRANSMISSION | 0x300A0102
TAG_BLOCK_NUMBER_OF_POINTS | 0x300A0104
TAG_BLOCK_DATA | 0x300A0106
TAG_APPLICATOR_SEQUENCE | 0x300A0107
TAG_APPLICATOR_ID | 0x300A0108
TAG_APPLICATOR_TYPE | 0x300A0109
TAG_APPLICATOR_DESCRIPTION | 0x300A010A
TAG_CUMULATIVE_DOSE_REFERENCE_COEFFICIENT | 0x300A010C
TAG_FINAL_CUMULATIVE_METERSET_WEIGHT | 0x300A010E
TAG_NUMBER_OF_CONTROL_POINTS | 0x300A0110
TAG_CONTROL_POINT_SEQUENCE | 0x300A0111
TAG_CONTROL_POINT_INDEX | 0x300A0112
TAG_NOMINAL_BEAM_ENERGY | 0x300A0114
TAG_DOSE_RATE_SET | 0x300A0115
TAG_WEDGE_POSITION_SEQUENCE | 0x300A0116
TAG_WEDGE_POSITION | 0x300A0118
TAG_BEAM_LIMITING_DEVICE_POSITION_SEQUENCE | 0x300A011A
TAG_LEAF_JAW_POSITIONS | 0x300A011C
TAG_GANTRY_ANGLE | 0x300A011E
TAG_GANTRY_ROTATION_DIRECTION | 0x300A011F
TAG_BEAM_LIMITING_DEVICE_ANGLE | 0x300A0120
TAG_BEAM_LIMITING_DEVICE_ROTATION_DIRECTION | 0x300A0121
TAG_PATIENT_SUPPORT_ANGLE | 0x300A0122
TAG_PATIENT_SUPPORT_ROTATION_DIRECTION | 0x300A0123
TAG_TABLE_TOP_ECCENTRIC_AXIS_DISTANCE | 0x300A0124
TAG_TABLE_TOP_ECCENTRIC_ANGLE | 0x300A0125
TAG_TABLE_TOP_ECCENTRIC_ROTATION_DIRECTION | 0x300A0126
TAG_TABLE_TOP_VERTICAL_POSITION | 0x300A0128
TAG_TABLE_TOP_LONGITUDINAL_POSITION | 0x300A0129
TAG_TABLE_TOP_LATERAL_POSITION | 0x300A012A
TAG_ISOCENTER_POSITION | 0x300A012C
TAG_SURFACE_ENTRY_POINT | 0x300A012E
TAG_SOURCE_TO_SURFACE_DISTANCE | 0x300A0130
TAG_CUMULATIVE_METERSET_WEIGHT | 0x300A0134
TAG_PATIENT_SETUP_SEQUENCE | 0x300A0180
TAG_PATIENT_SETUP_NUMBER | 0x300A0182
TAG_PATIENT_ADDITIONAL_POSITION | 0x300A0184
TAG_FIXATION_DEVICE_SEQUENCE | 0x300A0190
TAG_FIXATION_DEVICE_TYPE | 0x300A0192
TAG_FIXATION_DEVICE_LABEL | 0x300A0194
TAG_FIXATION_DEVICE_DESCRIPTION | 0x300A0196
TAG_FIXATION_DEVICE_POSITION | 0x300A0198
TAG_SHIELDING_DEVICE_SEQUENCE | 0x300A01A0
TAG_SHIELDING_DEVICE_TYPE | 0x300A01A2
TAG_SHIELDING_DEVICE_LABEL | 0x300A01A4
TAG_SHIELDING_DEVICE_DESCRIPTION | 0x300A01A6
TAG_SHIELDING_DEVICE_POSITION | 0x300A01A8
TAG_SETUP_TECHNIQUE | 0x300A01B0
TAG_SETUP_TECHNIQUE_DESCRIPTION | 0x300A01B2
TAG_SETUP_DEVICE_SEQUENCE | 0x300A01B4
TAG_SETUP_DEVICE_TYPE | 0x300A01B6
TAG_SETUP_DEVICE_LABEL | 0x300A01B8
TAG_SETUP_DEVICE_DESCRIPTION | 0x300A01BA
TAG_SETUP_DEVICE_PARAMETER | 0x300A01BC
TAG_SETUP_REFERENCE_DESCRIPTION | 0x300A01D0
TAG_TABLE_TOP_VERTICAL_SETUP_DISPLACEMENT | 0x300A01D2
TAG_TABLE_TOP_LONGITUDINAL_SETUP_DISPLACEMENT | 0x300A01D4
TAG_TABLE_TOP_LATERAL_SETUP_DISPLACEMENT | 0x300A01D6
TAG_BRACHY_TREATMENT_TECHNIQUE | 0x300A0200
TAG_BRACHY_TREATMENT_TYPE | 0x300A0202
TAG_TREATMENT_MACHINE_SEQUENCE | 0x300A0206
TAG_SOURCE_SEQUENCE | 0x300A0210
TAG_SOURCE_NUMBER | 0x300A0212
TAG_SOURCE_TYPE | 0x300A0214
TAG_SOURCE_MANUFACTURER | 0x300A0216
TAG_ACTIVE_SOURCE_DIAMETER | 0x300A0218
TAG_ACTIVE_SOURCE_LENGTH | 0x300A021A
TAG_SOURCE_ENCAPSULATION_NOMINAL_THICKNESS | 0x300A0222
TAG_SOURCE_ENCAPSULATION_NOMINAL_TRANSMISSION | 0x300A0224
TAG_SOURCE_ISOTOPE_NAME | 0x300A0226
TAG_SOURCE_ISOTOPE_HALF_LIFE | 0x300A0228
TAG_REFERENCE_AIR_KERMA_RATE | 0x300A022A
TAG_AIR_KERMA_RATE_REFERENCE_DATE | 0x300A022C
TAG_AIR_KERMA_RATE_REFERENCE_TIME | 0x300A022E
TAG_APPLICATION_SETUP_SEQUENCE | 0x300A0230
TAG_APPLICATION_SETUP_TYPE | 0x300A0232
TAG_APPLICATION_SETUP_NUMBER | 0x300A0234
TAG_APPLICATION_SETUP_NAME | 0x300A0236
TAG_APPLICATION_SETUP_MANUFACTURER | 0x300A0238
TAG_TEMPLATE_NUMBER | 0x300A0240
TAG_TEMPLATE_TYPE | 0x300A0242
TAG_TEMPLATE_NAME | 0x300A0244
TAG_TOTAL_REFERENCE_AIR_KERMA | 0x300A0250
TAG_BRACHY_ACCESSORY_DEVICE_SEQUENCE | 0x300A0260
TAG_BRACHY_ACCESSORY_DEVICE_NUMBER | 0x300A0262
TAG_BRACHY_ACCESSORY_DEVICE_ID | 0x300A0263
TAG_BRACHY_ACCESSORY_DEVICE_TYPE | 0x300A0264
TAG_BRACHY_ACCESSORY_DEVICE_NAME | 0x300A0266
TAG_BRACHY_ACCESSORY_DEVICE_NOMINAL_THICKNESS | 0x300A026A
TAG_BRACHY_ACCESSORY_DEVICE_NOMINAL_TRANSMISSION | 0x300A026C
TAG_CHANNEL_SEQUENCE | 0x300A0280
TAG_CHANNEL_NUMBER | 0x300A0282
TAG_CHANNEL_LENGTH | 0x300A0284
TAG_CHANNEL_TOTAL_TIME | 0x300A0286
TAG_SOURCE_MOVEMENT_TYPE | 0x300A0288
TAG_NUMBER_OF_PULSES | 0x300A028A
TAG_PULSE_REPETITION_INTERVAL | 0x300A028C
TAG_SOURCE_APPLICATOR_NUMBER | 0x300A0290
TAG_SOURCE_APPLICATOR_ID | 0x300A0291
TAG_SOURCE_APPLICATOR_TYPE | 0x300A0292
TAG_SOURCE_APPLICATOR_NAME | 0x300A0294
TAG_SOURCE_APPLICATOR_LENGTH | 0x300A0296
TAG_SOURCE_APPLICATOR_MANUFACTURER | 0x300A0298
TAG_SOURCE_APPLICATOR_WALL_NOMINAL_THICKNESS | 0x300A029C
TAG_SOURCE_APPLICATOR_WALL_NOMINAL_TRANSMISSION | 0x300A029E
TAG_SOURCE_APPLICATOR_STEP_SIZE | 0x300A02A0
TAG_TRANSFER_TUBE_NUMBER | 0x300A02A2
TAG_TRANSFER_TUBE_LENGTH | 0x300A02A4
TAG_CHANNEL_SHIELD_SEQUENCE | 0x300A02B0
TAG_CHANNEL_SHIELD_NUMBER | 0x300A02B2
TAG_CHANNEL_SHIELD_ID | 0x300A02B3
TAG_CHANNEL_SHIELD_NAME | 0x300A02B4
TAG_CHANNEL_SHIELD_NOMINAL_THICKNESS | 0x300A02B8
TAG_CHANNEL_SHIELD_NOMINAL_TRANSMISSION | 0x300A02BA
TAG_FINAL_CUMULATIVE_TIME_WEIGHT | 0x300A02C8
TAG_BRACHY_CONTROL_POINT_SEQUENCE | 0x300A02D0
TAG_CONTROL_POINT_RELATIVE_POSITION | 0x300A02D2
TAG_CONTROL_POINT_3D_POSITION | 0x300A02D4
TAG_CUMULATIVE_TIME_WEIGHT | 0x300A02D6
TAG_COMPENSATOR_DIVERGENCE | 0x300A02E0
TAG_COMPENSATOR_MOUNTING_POSITION | 0x300A02E1
TAG_SOURCE_TO_COMPENSATOR_DISTANCE | 0x300A02E2
TAG_REFERENCED_RT_PLAN_SEQUENCE | 0x300C0002
TAG_REFERENCED_BEAM_SEQUENCE | 0x300C0004
TAG_REFERENCED_BEAM_NUMBER | 0x300C0006
TAG_REFERENCED_REFERENCE_IMAGE_NUMBER | 0x300C0007
TAG_START_CUMULATIVE_METERSET_WEIGHT | 0x300C0008
TAG_END_CUMULATIVE_METERSET_WEIGHT | 0x300C0009
TAG_REFERENCED_BRACHY_APPLICATION_SETUP_SEQUENCE | 0x300C000A
TAG_REFERENCED_BRACHY_APPLICATION_SETUP_NUMBER | 0x300C000C
TAG_REFERENCED_SOURCE_NUMBER | 0x300C000E
TAG_REFERENCED_FRACTION_GROUP_SEQUENCE | 0x300C0020
TAG_REFERENCED_FRACTION_GROUP_NUMBER | 0x300C0022
TAG_REFERENCED_VERIFICATION_IMAGE_SEQUENCE | 0x300C0040
TAG_REFERENCED_REFERENCE_IMAGE_SEQUENCE | 0x300C0042
TAG_REFERENCED_DOSE_REFERENCE_SEQUENCE | 0x300C0050
TAG_REFERENCED_DOSE_REFERENCE_NUMBER | 0x300C0051
TAG_BRACHY_REFERENCED_DOSE_REFERENCE_SEQUENCE | 0x300C0055
TAG_REFERENCED_STRUCTURE_SET_SEQUENCE | 0x300C0060
TAG_REFERENCED_PATIENT_SETUP_NUMBER | 0x300C006A
TAG_REFERENCED_DOSE_SEQUENCE | 0x300C0080
TAG_REFERENCED_TOLERANCE_TABLE_NUMBER | 0x300C00A0
TAG_REFERENCED_BOLUS_SEQUENCE | 0x300C00B0
TAG_REFERENCED_WEDGE_NUMBER | 0x300C00C0
TAG_REFERENCED_COMPENSATOR_NUMBER | 0x300C00D0
TAG_REFERENCED_BLOCK_NUMBER | 0x300C00E0
TAG_REFERENCED_CONTROL_POINT_INDEX | 0x300C00F0
TAG_APPROVAL_STATUS | 0x300E0002
TAG_REVIEW_DATE | 0x300E0004
TAG_REVIEW_TIME | 0x300E0005
TAG_REVIEWER_NAME | 0x300E0008
TAG_RESULTS_ID | 0x40080040
TAG_RESULTS_ID_ISSUER | 0x40080042
TAG_REFERENCED_INTERPRETATION_SEQUENCE | 0x40080050
TAG_INTERPRETATION_RECORDED_DATE | 0x40080100
TAG_INTERPRETATION_RECORDED_TIME | 0x40080101
TAG_INTERPRETATION_RECORDER | 0x40080102
TAG_REFERENCE_TO_RECORDED_SOUND | 0x40080103
TAG_INTERPRETATION_TRANSCRIPTION_DATE | 0x40080108
TAG_INTERPRETATION_TRANSCRIPTION_TIME | 0x40080109
TAG_INTERPRETATION_TRANSCRIBER | 0x4008010A
TAG_INTERPRETATION_TEXT | 0x4008010B
TAG_INTERPRETATION_AUTHOR | 0x4008010C
TAG_INTERPRETATION_APPROVER_SEQUENCE | 0x40080111
TAG_INTERPRETATION_APPROVAL_DATE | 0x40080112
TAG_INTERPRETATION_APPROVAL_TIME | 0x40080113
TAG_PHYSICIAN_APPROVING_INTERPRETATION | 0x40080114
TAG_INTERPRETATION_DIAGNOSIS_DESCRIPTION | 0x40080115
TAG_INTERPRETATION_DIAGNOSIS_CODE_SEQUENCE | 0x40080117
TAG_RESULTS_DISTRIBUTION_LIST_SEQUENCE | 0x40080118
TAG_DISTRIBUTION_NAME | 0x40080119
TAG_DISTRIBUTION_ADDRESS | 0x4008011A
TAG_INTERPRETATION_ID | 0x40080200
TAG_INTERPRETATION_ID_ISSUER | 0x40080202
TAG_INTERPRETATION_TYPE_ID | 0x40080210
TAG_INTERPRETATION_STATUS_ID | 0x40080212
TAG_IMPRESSIONS | 0x40080300
TAG_RESULTS_COMMENTS | 0x40084000
TAG_MAC_PARAMETERS_SEQUENCE | 0x4FFE0001
TAG_CURVE_DIMENSIONS | 0x50000005
TAG_NUMBER_OF_POINTS | 0x50000010
TAG_TYPE_OF_DATA | 0x50000020
TAG_CURVE_DESCRIPTION | 0x50000022
TAG_AXIS_UNITS | 0x50000030
TAG_AXIS_LABELS | 0x50000040
TAG_DATA_VALUE_REPRESENTATION | 0x50000103
TAG_MINIMUM_COORDINATE_VALUE | 0x50000104
TAG_MAXIMUM_COORDINATE_VALUE | 0x50000105
TAG_CURVE_RANGE | 0x50000106
TAG_CURVE_DATA_DESCRIPTOR | 0x50000110
TAG_COORDINATE_START_VALUE | 0x50000112
TAG_COORDINATE_STEP_VALUE | 0x50000114
TAG_AUDIO_TYPE | 0x50002000
TAG_AUDIO_SAMPLE_FORMAT | 0x50002002
TAG_NUMBER_OF_CHANNELS | 0x50002004
TAG_NUMBER_OF_SAMPLES | 0x50002006
TAG_SAMPLE_RATE | 0x50002008
TAG_TOTAL_TIME | 0x5000200A
TAG_AUDIO_SAMPLE_DATA | 0x5000200C
TAG_AUDIO_COMMENTS | 0x5000200E
TAG_CURVE_LABEL | 0x50002500
TAG_REFERENCED_OVERLAY_SEQUENCE_50XX | 0x50002600
TAG_REFERENCED_OVERLAY_GROUP | 0x50002610
TAG_CURVE_DATA | 0x50003000
TAG_OVERLAY_ROWS | 0x60000010
TAG_OVERLAY_COLUMNS | 0x60000011
TAG_OVERLAY_PLANES | 0x60000012
TAG_NUMBER_OF_FRAMES_IN_OVERLAY | 0x60000015
TAG_OVERLAY_DESCRIPTION | 0x60000022
TAG_OVERLAY_TYPE | 0x60000040
TAG_OVERLAY_SUBTYPE | 0x60000045
TAG_OVERLAY_ORIGIN | 0x60000050
TAG_IMAGE_FRAME_ORIGIN | 0x60000051
TAG_OVERLAY_PLANE_ORIGIN | 0x60000052
TAG_OVERLAY_BITS_ALLOCATED | 0x60000100
TAG_OVERLAY_BIT_POSITION | 0x60000102
TAG_OVERLAY_DESCRIPTOR_GRAY_RETIRED | 0x60001100
TAG_OVERLAY_DESCRIPTOR_RED_RETIRED | 0x60001101
TAG_OVERLAY_DESCRIPTOR_GREEN_RETIRED | 0x60001102
TAG_OVERLAY_DESCRIPTOR_BLUE_RETIRED | 0x60001103
TAG_OVERLAYS_GRAY_RETIRED | 0x60001200
TAG_OVERLAYS_RED_RETIRED | 0x60001201
TAG_OVERLAYS_GREEN_RETIRED | 0x60001202
TAG_OVERLAYS_BLUE_RETIRED | 0x60001203
TAG_ROI_AREA | 0x60001301
TAG_ROI_MEAN | 0x60001302
TAG_ROI_STANDARD_DEVIATION | 0x60001303
TAG_OVERLAY_LABEL | 0x60001500
TAG_OVERLAY_DATA | 0x60003000
TAG_PIXEL_DATA | 0x7FE00010
TAG_LEAD_BITMAP | 0x7FE00010
TAG_DIGITAL_SIGNATURES_SEQUENCE | 0xFFFAFFFA
TAG_DATA_SET_TRAILING_PADDING | 0xFFFCFFFC
TAG_ITEM | 0xFFFEE000
TAG_ITEM_DELIMITATION_ITEM | 0xFFFEE00D
TAG_SEQUENCE_DELIMITATION_ITEM | 0xFFFEE0DD


Data Element Tag Constants for the Command Sets

The following is a list of the default Data Element Tags for the Command Sets that are supported by LEADTOOLS. For more information on the data elements that make up the command sets supported by LEADTOOLS, refer to Command Set Default Tables.

Code constant | Code value
TAG_COMMAND_LENGTH_TO_END | 0x00000001UL
TAG_AFFECTED_SOP_CLASS_UID | 0x00000002UL
TAG_REQUESTED_SOP_CLASS_UID | 0x00000003UL
TAG_COMMAND_RECOGNITION_CODE | 0x00000010UL
TAG_COMMAND_FIELD | 0x00000100UL
TAG_MESSAGE_ID | 0x00000110UL
TAG_MESSAGE_ID_BEING_RESPONDED_TO | 0x00000120UL
TAG_INITIATOR | 0x00000200UL
TAG_RECEIVER | 0x00000300UL
TAG_FIND_LOCATION | 0x00000400UL
TAG_MOVE_DESTINATION | 0x00000600UL
TAG_PRIORITY | 0x00000700UL
TAG_DATA_SET_TYPE | 0x00000800UL
TAG_NUMBER_OF_MATCHES | 0x00000850UL
TAG_RESPONSE_SEQUENCE_NUMBER | 0x00000860UL
TAG_STATUS | 0x00000900UL
TAG_OFFENDING_ELEMENT | 0x00000901UL
TAG_ERROR_COMMENT | 0x00000902UL
TAG_ERROR_ID | 0x00000903UL
TAG_AFFECTED_SOP_INSTANCE_UID | 0x00001000UL
TAG_REQUESTED_SOP_INSTANCE_UID | 0x00001001UL
TAG_EVENT_TYPE_ID | 0x00001002UL
TAG_ATTRIBUTE_IDENTIFIER_LIST | 0x00001005UL
TAG_ACTION_TYPE_ID | 0x00001008UL
TAG_NUMBER_OF_REMAINING_SUBOPERATIONS | 0x00001020UL
TAG_NUMBER_OF_COMPLETED_SUBOPERATIONS | 0x00001021UL
TAG_NUMBER_OF_FAILED_SUBOPERATIONS | 0x00001022UL
TAG_NUMBER_OF_WARNING_SUBOPERATIONS | 0x00001023UL
TAG_MOVE_ORIGINATOR_APPLICATION_ENTITY_TITLE | 0x00001030UL
TAG_MOVE_ORIGINATOR_MESSAGE_ID | 0x00001031UL
TAG_DIALOG_RECEIVER | 0x00004000UL
TAG_TERMINAL_TYPE | 0x00004010UL
TAG_MESSAGE_SET_ID | 0x00005010UL
TAG_END_MESSAGE_SET | 0x00005020UL
TAG_DISPLAY_FORMAT | 0x00005110UL
TAG_PAGE_POSITION_ID | 0x00005120UL
TAG_TEXT_FORMAT_ID | 0x00005130UL
TAG_NORMAL_REVERSE | 0x00005140UL
TAG_ADD_GRAY_SCALE | 0x00005150UL
TAG_BORDERS | 0x00005160UL
TAG_COPIES | 0x00005170UL
TAG_OLD_MAGNIFICATION_TYPE | 0x00005180UL
TAG_ERASE | 0x00005190UL
TAG_PRINT | 0x000051A0UL
TAG_OVERLAYS | 0x000051B0UL


Data Element Tag Table

The following is a table of default information about the Data Element Tags that are standard for the DICOM file format. For a list of constants that correspond to the code values balow, refer to the Data Element Tag Constants.

Code value | Mask | Name | VR | Min | Max | Div
0x00000001 | 0xFFFFFFFF | Command Length to End | VR_UL | 1 | 1 | 1
0x00000002 | 0xFFFFFFFF | Affected SOP Class UID | VR_UI | 1 | 1 | 1
0x00000003 | 0xFFFFFFFF | Requested SOP Class UID | VR_UI | 1 | 1 | 1
0x00000010 | 0xFFFFFFFF | Command Recognition Code | VR_LO | 1 | 1 | 1
0x00000100 | 0xFFFFFFFF | Command Field | VR_US | 1 | 1 | 1
0x00000110 | 0xFFFFFFFF | Message ID | VR_US | 1 | 1 | 1
0x00000120 | 0xFFFFFFFF | Message ID Being Responded To | VR_US | 1 | 1 | 1
0x00000200 | 0xFFFFFFFF | Initiator | VR_AE | 1 | 1 | 1
0x00000300 | 0xFFFFFFFF | Receiver | VR_AE | 1 | 1 | 1
0x00000400 | 0xFFFFFFFF | Find Location | VR_AE | 1 | 1 | 1
0x00000600 | 0xFFFFFFFF | Move Destination | VR_AE | 1 | 1 | 1
0x00000700 | 0xFFFFFFFF | Priority | VR_US | 1 | 1 | 1
0x00000800 | 0xFFFFFFFF | Data Set Type | VR_US | 1 | 1 | 1
0x00000850 | 0xFFFFFFFF | Number of Matches | VR_US | 1 | 1 | 1
0x00000860 | 0xFFFFFFFF | Response Sequence Number | VR_US | 1 | 1 | 1
0x00000900 | 0xFFFFFFFF | Status | VR_US | 1 | 1 | 1
0x00000901 | 0xFFFFFFFF | Offending Element | VR_AT | 1 | -1 | 1
0x00000902 | 0xFFFFFFFF | Error Comment | VR_LO | 1 | 1 | 1
0x00000903 | 0xFFFFFFFF | Error ID | VR_US | 1 | 1 | 1
0x00001000 | 0xFFFFFFFF | Affected SOP Instance UID | VR_UI | 1 | 1 | 1
0x00001001 | 0xFFFFFFFF | Requested SOP Instance UID | VR_UI | 1 | 1 | 1
0x00001002 | 0xFFFFFFFF | Event Type ID | VR_US | 1 | 1 | 1
0x00001005 | 0xFFFFFFFF | Attribute Identifier List | VR_AT | 1 | -1 | 1
0x00001008 | 0xFFFFFFFF | Action Type ID | VR_US | 1 | 1 | 1
0x00001020 | 0xFFFFFFFF | Number of Remaining Suboperations | VR_US | 1 | 1 | 1
0x00001021 | 0xFFFFFFFF | Number of Completed Suboperations | VR_US | 1 | 1 | 1
0x00001022 | 0xFFFFFFFF | Number of Failed Suboperations | VR_US | 1 | 1 | 1
0x00001023 | 0xFFFFFFFF | Number of Warning Suboperations | VR_US | 1 | 1 | 1
0x00001030 | 0xFFFFFFFF | Move Originator Application Entity Title | VR_AE | 1 | 1 | 1
0x00001031 | 0xFFFFFFFF | Move Originator Message ID | VR_US | 1 | 1 | 1
0x00004000 | 0xFFFFFFFF | Dialog Receiver | VR_LO | 1 | 1 | 1
0x00004010 | 0xFFFFFFFF | Terminal Type | VR_LO | 1 | 1 | 1
0x00005010 | 0xFFFFFFFF | Message Set ID | VR_SH | 1 | 1 | 1
0x00005020 | 0xFFFFFFFF | End Message Set | VR_SH | 1 | 1 | 1
0x00005110 | 0xFFFFFFFF | Display Format | VR_LO | 1 | 1 | 1
0x00005120 | 0xFFFFFFFF | Page Position ID | VR_LO | 1 | 1 | 1
0x00005130 | 0xFFFFFFFF | Text Format ID | VR_LO | 1 | 1 | 1
0x00005140 | 0xFFFFFFFF | Normal Reverse | VR_LO | 1 | 1 | 1
0x00005150 | 0xFFFFFFFF | Add Gray Scale | VR_LO | 1 | 1 | 1
0x00005160 | 0xFFFFFFFF | Borders | VR_LO | 1 | 1 | 1
0x00005170 | 0xFFFFFFFF | Copies | VR_IS | 1 | 1 | 1
0x00005180 | 0xFFFFFFFF | Old Magnification Type | VR_LO | 1 | 1 | 1
0x00005190 | 0xFFFFFFFF | Erase | VR_LO | 1 | 1 | 1
0x000051A0 | 0xFFFFFFFF | Print | VR_LO | 1 | 1 | 1
0x000051B0 | 0xFFFFFFFF | Overlays | VR_US | 1 | -1 | 1
0x00020001 | 0xFFFFFFFF | File Meta Information Version | VR_OB | 1 | 1 | 1
0x00020002 | 0xFFFFFFFF | Media Storage SOP Class UID | VR_UI | 1 | 1 | 1
0x00020003 | 0xFFFFFFFF | Media Storage SOP Instance UID | VR_UI | 1 | 1 | 1
0x00020010 | 0xFFFFFFFF | Transfer Syntax UID | VR_UI | 1 | 1 | 1
0x00020012 | 0xFFFFFFFF | Implementation Class UID | VR_UI | 1 | 1 | 1
0x00020013 | 0xFFFFFFFF | Implementation Version Name | VR_SH | 1 | 1 | 1
0x00020016 | 0xFFFFFFFF | Source Application Entity Title | VR_AE | 1 | 1 | 1
0x00020100 | 0xFFFFFFFF | Private Information Creator UID | VR_UI | 1 | 1 | 1
0x00020102 | 0xFFFFFFFF | Private Information | VR_OB | 1 | 1 | 1
0x00041130 | 0xFFFFFFFF | File-set ID | VR_CS | 1 | 1 | 1
0x00041141 | 0xFFFFFFFF | File-set Descriptor File ID | VR_CS | 1 | 8 | 1
0x00041142 | 0xFFFFFFFF | Specific Character Set of File-set Descriptor File | VR_CS | 1 | 1 | 1
0x00041200 | 0xFFFFFFFF | Offset of the First Directory Record of the Root Directory Entity | VR_UL | 1 | 1 | 1
0x00041202 | 0xFFFFFFFF | Offset of the Last Directory Record of the Root Directory Entity | VR_UL | 1 | 1 | 1
0x00041212 | 0xFFFFFFFF | File-set Consistency Flag | VR_US | 1 | 1 | 1
0x00041220 | 0xFFFFFFFF | Directory Record Sequence | VR_SQ | 1 | 1 | 1
0x00041400 | 0xFFFFFFFF | Offset of the Next Directory Record | VR_UL | 1 | 1 | 1
0x00041410 | 0xFFFFFFFF | Record In-use Flag | VR_US | 1 | 1 | 1
0x00041420 | 0xFFFFFFFF | Offset of Referenced Lower-Level Directory Entity | VR_UL | 1 | 1 | 1
0x00041430 | 0xFFFFFFFF | Directory Record Type | VR_CS | 1 | 1 | 1
0x00041432 | 0xFFFFFFFF | Private Record UID | VR_UI | 1 | 1 | 1
0x00041500 | 0xFFFFFFFF | Referenced File ID | VR_CS | 1 | 8 | 1
0x00041504 | 0xFFFFFFFF | MRDR Directory Record Offset | VR_UL | 1 | 1 | 1
0x00041510 | 0xFFFFFFFF | Referenced SOP Class UID in File | VR_UI | 1 | 1 | 1
0x00041511 | 0xFFFFFFFF | Referenced SOP Instance UID in File | VR_UI | 1 | 1 | 1
0x00041512 | 0xFFFFFFFF | Referenced Transfer Syntax UID in File | VR_UI | 1 | 1 | 1
0x00041600 | 0xFFFFFFFF | Number of References | VR_UL | 1 | 1 | 1
0x00080001 | 0xFFFFFFFF | Length to End (Retired) | VR_UL | 1 | 1 | 1
0x00080005 | 0xFFFFFFFF | Specific Character Set | VR_CS | 1 | -1 | 1
0x00080008 | 0xFFFFFFFF | Image Type | VR_CS | 1 | -1 | 1
0x00080010 | 0xFFFFFFFF | Recognition Code (Retired) | VR_LO | 1 | 1 | 1
0x00080012 | 0xFFFFFFFF | Instance Creation Date | VR_DA | 1 | 1 | 1
0x00080013 | 0xFFFFFFFF | Instance Creation Time | VR_TM | 1 | 1 | 1
0x00080014 | 0xFFFFFFFF | Instance Creator UID | VR_UI | 1 | 1 | 1
0x00080016 | 0xFFFFFFFF | SOP Class UID | VR_UI | 1 | 1 | 1
0x00080018 | 0xFFFFFFFF | SOP Instance UID | VR_UI | 1 | 1 | 1
0x00080020 | 0xFFFFFFFF | Study Date | VR_DA | 1 | 1 | 1
0x00080021 | 0xFFFFFFFF | Series Date | VR_DA | 1 | 1 | 1
0x00080022 | 0xFFFFFFFF | Acquisition Date | VR_DA | 1 | 1 | 1
0x00080023 | 0xFFFFFFFF | Image Date | VR_DA | 1 | 1 | 1
0x00080024 | 0xFFFFFFFF | Overlay Date | VR_DA | 1 | 1 | 1
0x00080025 | 0xFFFFFFFF | Curve Date | VR_DA | 1 | 1 | 1
0x00080030 | 0xFFFFFFFF | Study Time | VR_TM | 1 | 1 | 1
0x00080031 | 0xFFFFFFFF | Series Time | VR_TM | 1 | 1 | 1
0x00080032 | 0xFFFFFFFF | Acquisition Time | VR_TM | 1 | 1 | 1
0x00080033 | 0xFFFFFFFF | Image Time | VR_TM | 1 | 1 | 1
0x00080034 | 0xFFFFFFFF | Overlay Time | VR_TM | 1 | 1 | 1
0x00080035 | 0xFFFFFFFF | Curve Time | VR_TM | 1 | 1 | 1
0x00080040 | 0xFFFFFFFF | Data Set Type (Retired) | VR_US | 1 | 1 | 1
0x00080041 | 0xFFFFFFFF | Data Set Subtype (Retired) | VR_LT | 1 | 1 | 1
0x00080042 | 0xFFFFFFFF | Nuclear Medicine Series Type (Retired) | VR_CS | 1 | 1 | 1
0x00080050 | 0xFFFFFFFF | Accession Number | VR_SH | 1 | 1 | 1
0x00080052 | 0xFFFFFFFF | Query/Retrieve Level | VR_CS | 1 | 1 | 1
0x00080054 | 0xFFFFFFFF | Retrieve AE Title | VR_AE | 1 | -1 | 1
0x00080058 | 0xFFFFFFFF | Failed SOP Instance UID List | VR_UI | 1 | -1 | 1
0x00080060 | 0xFFFFFFFF | Modality | VR_CS | 1 | 1 | 1
0x00080061 | 0xFFFFFFFF | Modalities in Study | VR_CS | 1 | -1 | 1
0x00080062 | 0xFFFFFFFF | Modality Subtype | VR_SQ | 1 | 1 | 1
0x00080064 | 0xFFFFFFFF | Conversion Type | VR_CS | 1 | 1 | 1
0x00080068 | 0xFFFFFFFF | Presentation Intent Type | VR_CS | 1 | 1 | 1
0x00080070 | 0xFFFFFFFF | Manufacturer | VR_LO | 1 | 1 | 1
0x00080080 | 0xFFFFFFFF | Institution Name | VR_LO | 1 | 1 | 1
0x00080081 | 0xFFFFFFFF | Institution Address | VR_ST | 1 | 1 | 1
0x00080082 | 0xFFFFFFFF | Institution Code Sequence | VR_SQ | 1 | 1 | 1
0x00080090 | 0xFFFFFFFF | Referring Physician's Name | VR_PN | 1 | 1 | 1
0x00080092 | 0xFFFFFFFF | Referring Physician's Address | VR_ST | 1 | 1 | 1
0x00080094 | 0xFFFFFFFF | Referring Physician's Telephone Numbers | VR_SH | 1 | -1 | 1
0x00080100 | 0xFFFFFFFF | Code Value | VR_SH | 1 | 1 | 1
0x00080102 | 0xFFFFFFFF | Coding Scheme Designator | VR_SH | 1 | 1 | 1
0x00080103 | 0xFFFFFFFF | Coding Scheme Version | VR_SH | 1 | 1 | 1
0x00080104 | 0xFFFFFFFF | Code Meaning | VR_LO | 1 | 1 | 1
0x00080105 | 0xFFFFFFFF | Mapping Resource | VR_CS | 1 | 1 | 1
0x00080106 | 0xFFFFFFFF | Context Group Version | VR_DT | 1 | 1 | 1
0x00080107 | 0xFFFFFFFF | Context Group Local Version | VR_DT | 1 | 1 | 1
0x0008010B | 0xFFFFFFFF | Code Set Extension Flag | VR_CS | 1 | 1 | 1
0x0008010C | 0xFFFFFFFF | Private Coding Scheme Creator UID | VR_UI | 1 | 1 | 1
0x0008010D | 0xFFFFFFFF | Code Set Extension Creator UID | VR_UI | 1 | 1 | 1
0x0008010F | 0xFFFFFFFF | Context Identifier | VR_CS | 1 | 1 | 1
0x00081000 | 0xFFFFFFFF | Network ID (Retired) | VR_LT | 1 | 1 | 1
0x00081010 | 0xFFFFFFFF | Station Name | VR_SH | 1 | 1 | 1
0x00081030 | 0xFFFFFFFF | Study Description | VR_LO | 1 | 1 | 1
0x00081032 | 0xFFFFFFFF | Procedure Code Sequence | VR_SQ | 1 | 1 | 1
0x0008103E | 0xFFFFFFFF | Series Description | VR_LO | 1 | 1 | 1
0x00081040 | 0xFFFFFFFF | Institutional Department Name | VR_LO | 1 | 1 | 1
0x00081048 | 0xFFFFFFFF | Physician(s) of Record | VR_PN | 1 | -1 | 1
0x00081050 | 0xFFFFFFFF | Performing Physician's Name | VR_PN | 1 | -1 | 1
0x00081060 | 0xFFFFFFFF | Name of Physician(s) Reading Study | VR_PN | 1 | -1 | 1
0x00081070 | 0xFFFFFFFF | Operators' Name | VR_PN | 1 | -1 | 1
0x00081080 | 0xFFFFFFFF | Admitting Diagnoses Description | VR_LO | 1 | -1 | 1
0x00081084 | 0xFFFFFFFF | Admitting Diagnosis Code Sequence | VR_SQ | 1 | 1 | 1
0x00081090 | 0xFFFFFFFF | Manufacturer's Model Name | VR_LO | 1 | 1 | 1
0x00081100 | 0xFFFFFFFF | Referenced Results Sequence | VR_SQ | 1 | 1 | 1
0x00081110 | 0xFFFFFFFF | Referenced Study Sequence | VR_SQ | 1 | 1 | 1
0x00081111 | 0xFFFFFFFF | Referenced Study Component Sequence | VR_SQ | 1 | 1 | 1
0x00081115 | 0xFFFFFFFF | Referenced Series Sequence | VR_SQ | 1 | 1 | 1
0x00081120 | 0xFFFFFFFF | Referenced Patient Sequence | VR_SQ | 1 | 1 | 1
0x00081125 | 0xFFFFFFFF | Referenced Visit Sequence | VR_SQ | 1 | 1 | 1
0x00081130 | 0xFFFFFFFF | Referenced Overlay Sequence 0008 | VR_SQ | 1 | 1 | 1
0x00081140 | 0xFFFFFFFF | Referenced Image Sequence | VR_SQ | 1 | 1 | 1
0x00081145 | 0xFFFFFFFF | Referenced Curve Sequence | VR_SQ | 1 | 1 | 1
0x00081148 | 0xFFFFFFFF | Referenced Previous Waveform | VR_SQ | 1 | 1 | 1
0x0008114A | 0xFFFFFFFF | Referenced Simultaneous Waveforms | VR_SQ | 1 | 1 | 1
0x0008114C | 0xFFFFFFFF | Referenced Subsequent Waveform | VR_SQ | 1 | 1 | 1
0x00081150 | 0xFFFFFFFF | Referenced SOP Class UID | VR_UI | 1 | 1 | 1
0x00081155 | 0xFFFFFFFF | Referenced SOP Instance UID | VR_UI | 1 | 1 | 1
0x0008115A | 0xFFFFFFFF | SOP Classes Supported | VR_UI | 1 | -1 | 1
0x00081160 | 0xFFFFFFFF | Referenced Frame Number | VR_IS | 1 | 1 | 1
0x00081195 | 0xFFFFFFFF | Transaction UID | VR_UI | 1 | 1 | 1
0x00081197 | 0xFFFFFFFF | Failure Reason | VR_US | 1 | 1 | 1
0x00081198 | 0xFFFFFFFF | Failed SOP Sequence | VR_SQ | 1 | 1 | 1
0x00081199 | 0xFFFFFFFF | Referenced SOP Sequence | VR_SQ | 1 | 1 | 1
0x00082110 | 0xFFFFFFFF | Lossy Image Compression (Retired) | VR_CS | 1 | 1 | 1
0x00082111 | 0xFFFFFFFF | Derivation Description | VR_ST | 1 | 1 | 1
0x00082112 | 0xFFFFFFFF | Source Image Sequence | VR_SQ | 1 | 1 | 1
0x00082120 | 0xFFFFFFFF | Stage Name | VR_SH | 1 | 1 | 1
0x00082122 | 0xFFFFFFFF | Stage Number | VR_IS | 1 | 1 | 1
0x00082124 | 0xFFFFFFFF | Number of Stages | VR_IS | 1 | 1 | 1
0x00082128 | 0xFFFFFFFF | View Number | VR_IS | 1 | 1 | 1
0x00082129 | 0xFFFFFFFF | Number of Event Timers | VR_IS | 1 | 1 | 1
0x0008212A | 0xFFFFFFFF | Number of Views in Stage | VR_IS | 1 | 1 | 1
0x00082130 | 0xFFFFFFFF | Event Elapsed Time(s) | VR_DS | 1 | -1 | 1
0x00082132 | 0xFFFFFFFF | Event Timer Name(s) | VR_LO | 1 | -1 | 1
0x00082142 | 0xFFFFFFFF | Start Trim | VR_IS | 1 | 1 | 1
0x00082143 | 0xFFFFFFFF | Stop Trim | VR_IS | 1 | 1 | 1
0x00082144 | 0xFFFFFFFF | Recommended Display Frame Rate | VR_IS | 1 | 1 | 1
0x00082200 | 0xFFFFFFFF | Transducer Position (Retired) | VR_CS | 1 | 1 | 1
0x00082204 | 0xFFFFFFFF | Transducer Orientation (Retired) | VR_CS | 1 | 1 | 1
0x00082208 | 0xFFFFFFFF | Anatomic Structure (Retired) | VR_CS | 1 | 1 | 1
0x00082218 | 0xFFFFFFFF | Anatomic Region Sequence | VR_SQ | 1 | 1 | 1
0x00082220 | 0xFFFFFFFF | Anatomic Region Modifier Sequence | VR_SQ | 1 | 1 | 1
0x00082228 | 0xFFFFFFFF | Primary Anatomic Structure Sequence | VR_SQ | 1 | 1 | 1
0x00082229 | 0xFFFFFFFF | Anatomic Structure, Space or Region Sequence | VR_SQ | 1 | 1 | 1
0x00082230 | 0xFFFFFFFF | Primary Anatomic Structure Modifier Sequence | VR_SQ | 1 | 1 | 1
0x00082240 | 0xFFFFFFFF | Transducer Position Sequence | VR_SQ | 1 | 1 | 1
0x00082242 | 0xFFFFFFFF | Transducer Position Modifier Sequence | VR_SQ | 1 | 1 | 1
0x00082244 | 0xFFFFFFFF | Transducer Orientation Sequence | VR_SQ | 1 | 1 | 1
0x00082246 | 0xFFFFFFFF | Transducer Orientation Modifier Sequence | VR_SQ | 1 | 1 | 1
0x00082251 | 0xFFFFFFFF | Anatomic Structure Space Or Region Code Sequence | VR_SQ | 1 | 1 | 1
0x00082253 | 0xFFFFFFFF | Anatomic Portal Of Entrance Code Sequence | VR_SQ | 1 | 1 | 1
0x00082255 | 0xFFFFFFFF | Anatomic Approach Direction Code Sequence | VR_SQ | 1 | 1 | 1
0x00082256 | 0xFFFFFFFF | Anatomic Perspective Description | VR_ST | 1 | 1 | 1
0x00082257 | 0xFFFFFFFF | Anatomic Perspective Code Sequence | VR_SQ | 1 | 1 | 1
0x00082258 | 0xFFFFFFFF | Anatomic Location Of Examining Instrument Description | VR_ST | 1 | 1 | 1
0x00082259 | 0xFFFFFFFF | Anatomic Location Of Examining Instrument Code Sequence | VR_SQ | 1 | 1 | 1
0x0008225A | 0xFFFFFFFF | Anatomic Structure Space Or Region Modifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0008225C | 0xFFFFFFFF | OnAxis Background Anatomic Structure Code Sequence | VR_SQ | 1 | 1 | 1
0x00084000 | 0xFFFFFFFF | Comments (Retired) | VR_LT | 1 | -1 | 1
0x00100010 | 0xFFFFFFFF | Patient's Name | VR_PN | 1 | 1 | 1
0x00100020 | 0xFFFFFFFF | Patient ID | VR_LO | 1 | 1 | 1
0x00100021 | 0xFFFFFFFF | Issuer of Patient ID | VR_LO | 1 | 1 | 1
0x00100030 | 0xFFFFFFFF | Patient's Birth Date | VR_DA | 1 | 1 | 1
0x00100032 | 0xFFFFFFFF | Patient's Birth Time | VR_TM | 1 | 1 | 1
0x00100040 | 0xFFFFFFFF | Patient's Sex | VR_CS | 1 | 1 | 1
0x00100050 | 0xFFFFFFFF | Patient's Insurance Plan Code Sequence | VR_SQ | 1 | 1 | 1
0x00101000 | 0xFFFFFFFF | Other Patient IDs | VR_LO | 1 | -1 | 1
0x00101001 | 0xFFFFFFFF | Other Patient Names | VR_PN | 1 | -1 | 1
0x00101005 | 0xFFFFFFFF | Patient's Birth Name | VR_PN | 1 | 1 | 1
0x00101010 | 0xFFFFFFFF | Patient's Age | VR_AS | 1 | 1 | 1
0x00101020 | 0xFFFFFFFF | Patient's Size | VR_DS | 1 | 1 | 1
0x00101030 | 0xFFFFFFFF | Patient's Weight | VR_DS | 1 | 1 | 1
0x00101040 | 0xFFFFFFFF | Patient's Address | VR_LO | 1 | 1 | 1
0x00101050 | 0xFFFFFFFF | Insurance Plan Identification (Retired) | VR_LT | 1 | -1 | 1
0x00101060 | 0xFFFFFFFF | Patient's Mother's Birth Name | VR_PN | 1 | 1 | 1
0x00101080 | 0xFFFFFFFF | Military Rank | VR_LO | 1 | 1 | 1
0x00101081 | 0xFFFFFFFF | Branch of Service | VR_LO | 1 | 1 | 1
0x00101090 | 0xFFFFFFFF | Medical Record Locator | VR_LO | 1 | 1 | 1
0x00102000 | 0xFFFFFFFF | Medical Alerts | VR_LO | 1 | -1 | 1
0x00102110 | 0xFFFFFFFF | Contrast Allergies | VR_LO | 1 | -1 | 1
0x00102150 | 0xFFFFFFFF | Country of Residence | VR_LO | 1 | 1 | 1
0x00102152 | 0xFFFFFFFF | Region of Residence | VR_LO | 1 | 1 | 1
0x00102154 | 0xFFFFFFFF | Patient's Telephone Numbers | VR_SH | 1 | -1 | 1
0x00102160 | 0xFFFFFFFF | Ethnic Group | VR_SH | 1 | 1 | 1
0x00102180 | 0xFFFFFFFF | Occupation | VR_SH | 1 | 1 | 1
0x001021A0 | 0xFFFFFFFF | Smoking Status | VR_CS | 1 | 1 | 1
0x001021B0 | 0xFFFFFFFF | Additional Patient History | VR_LT | 1 | 1 | 1
0x001021C0 | 0xFFFFFFFF | Pregnancy Status | VR_US | 1 | 1 | 1
0x001021D0 | 0xFFFFFFFF | Last Menstrual Date | VR_DA | 1 | 1 | 1
0x001021F0 | 0xFFFFFFFF | Patient's Religious Preference | VR_LO | 1 | 1 | 1
0x00104000 | 0xFFFFFFFF | Patient Comments | VR_LT | 1 | 1 | 1
0x00180010 | 0xFFFFFFFF | Contrast/Bolus Agent | VR_LO | 1 | 1 | 1
0x00180012 | 0xFFFFFFFF | Contrast/Bolus Agent Sequence | VR_SQ | 1 | 1 | 1
0x00180014 | 0xFFFFFFFF | Contrast/Bolus Administration Route Sequence | VR_SQ | 1 | 1 | 1
0x00180015 | 0xFFFFFFFF | Body Part Examined | VR_CS | 1 | 1 | 1
0x00180020 | 0xFFFFFFFF | Scanning Sequence | VR_CS | 1 | -1 | 1
0x00180021 | 0xFFFFFFFF | Sequence Variant | VR_CS | 1 | -1 | 1
0x00180022 | 0xFFFFFFFF | Scan Options | VR_CS | 1 | -1 | 1
0x00180023 | 0xFFFFFFFF | MR Acquisition Type | VR_CS | 1 | 1 | 1
0x00180024 | 0xFFFFFFFF | Sequence Name | VR_SH | 1 | 1 | 1
0x00180025 | 0xFFFFFFFF | Angio Flag | VR_CS | 1 | 1 | 1
0x00180026 | 0xFFFFFFFF | Intervention Drug Information Sequence | VR_SQ | 1 | 1 | 1
0x00180027 | 0xFFFFFFFF | Intervention Drug Stop Time | VR_TM | 1 | 1 | 1
0x00180028 | 0xFFFFFFFF | Intervention Drug Dose | VR_DS | 1 | 1 | 1
0x00180029 | 0xFFFFFFFF | Intervention Drug Code Sequence | VR_SQ | 1 | 1 | 1
0x0018002A | 0xFFFFFFFF | Additional Drug Sequence | VR_SQ | 1 | 1 | 1
0x00180030 | 0xFFFFFFFF | Radionuclide (Retired) | VR_LO | 1 | -1 | 1
0x00180031 | 0xFFFFFFFF | Radiopharmaceutical | VR_LO | 1 | 1 | 1
0x00180032 | 0xFFFFFFFF | Energy Window Centerline (Retired) | VR_DS | 1 | 1 | 1
0x00180033 | 0xFFFFFFFF | Energy Window Total Width (Retired) | VR_DS | 1 | -1 | 1
0x00180034 | 0xFFFFFFFF | Intervention Drug Name | VR_LO | 1 | 1 | 1
0x00180035 | 0xFFFFFFFF | Intervention Drug Start Time | VR_TM | 1 | 1 | 1
0x00180036 | 0xFFFFFFFF | Interventional Therapy Sequence | VR_SQ | 1 | 1 | 1
0x00180037 | 0xFFFFFFFF | Therapy Type | VR_CS | 1 | 1 | 1
0x00180038 | 0xFFFFFFFF | Interventional Status | VR_CS | 1 | 1 | 1
0x00180039 | 0xFFFFFFFF | Therapy Description | VR_CS | 1 | 1 | 1
0x00180040 | 0xFFFFFFFF | Cine Rate | VR_IS | 1 | 1 | 1
0x00180050 | 0xFFFFFFFF | Slice Thickness | VR_DS | 1 | 1 | 1
0x00180060 | 0xFFFFFFFF | KVP | VR_DS | 1 | 1 | 1
0x00180070 | 0xFFFFFFFF | Counts Accumulated | VR_IS | 1 | 1 | 1
0x00180071 | 0xFFFFFFFF | Acquisition Termination Condition | VR_CS | 1 | 1 | 1
0x00180072 | 0xFFFFFFFF | Effective Series Duration | VR_DS | 1 | 1 | 1
0x00180073 | 0xFFFFFFFF | Acquisition Start Condition | VR_CS | 1 | 1 | 1
0x00180074 | 0xFFFFFFFF | Acquisition Start Condition Data | VR_IS | 1 | 1 | 1
0x00180075 | 0xFFFFFFFF | Acquisition Termination Condition Data | VR_IS | 1 | 1 | 1
0x00180080 | 0xFFFFFFFF | Repetition Time | VR_DS | 1 | 1 | 1
0x00180081 | 0xFFFFFFFF | Echo Time | VR_DS | 1 | 1 | 1
0x00180082 | 0xFFFFFFFF | Inversion Time | VR_DS | 1 | 1 | 1
0x00180083 | 0xFFFFFFFF | Number of Averages | VR_DS | 1 | 1 | 1
0x00180084 | 0xFFFFFFFF | Imaging Frequency | VR_DS | 1 | 1 | 1
0x00180085 | 0xFFFFFFFF | Imaged Nucleus | VR_SH | 1 | 1 | 1
0x00180086 | 0xFFFFFFFF | Echo Number(s) | VR_IS | 1 | -1 | 1
0x00180087 | 0xFFFFFFFF | Magnetic Field Strength | VR_DS | 1 | 1 | 1
0x00180088 | 0xFFFFFFFF | Spacing Between Slices | VR_DS | 1 | 1 | 1
0x00180089 | 0xFFFFFFFF | Number of Phase Encoding Steps | VR_IS | 1 | 1 | 1
0x00180090 | 0xFFFFFFFF | Data Collection Diameter | VR_DS | 1 | 1 | 1
0x00180091 | 0xFFFFFFFF | Echo Train Length | VR_IS | 1 | 1 | 1
0x00180093 | 0xFFFFFFFF | Percent Sampling | VR_DS | 1 | 1 | 1
0x00180094 | 0xFFFFFFFF | Percent Phase Field of View | VR_DS | 1 | 1 | 1
0x00180095 | 0xFFFFFFFF | Pixel Bandwidth | VR_DS | 1 | 1 | 1
0x00181000 | 0xFFFFFFFF | Device Serial Number | VR_LO | 1 | 1 | 1
0x00181004 | 0xFFFFFFFF | Plate ID | VR_LO | 1 | 1 | 1
0x00181010 | 0xFFFFFFFF | Secondary Capture Device ID | VR_LO | 1 | 1 | 1
0x00181011 | 0xFFFFFFFF | Hardcopy Creation Device ID | VR_LO | 1 | 1 | 1
0x00181012 | 0xFFFFFFFF | Date of Secondary Capture | VR_DA | 1 | 1 | 1
0x00181014 | 0xFFFFFFFF | Time of Secondary Capture | VR_TM | 1 | 1 | 1
0x00181016 | 0xFFFFFFFF | Secondary Capture Device Manufacturer | VR_LO | 1 | 1 | 1
0x00181017 | 0xFFFFFFFF | Hardcopy Device Manufacturer | VR_LO | 1 | 1 | 1
0x00181018 | 0xFFFFFFFF | Secondary Capture Device Manufacturer's Model Name | VR_LO | 1 | 1 | 1
0x00181019 | 0xFFFFFFFF | Secondary Capture Device Software Version(s) | VR_LO | 1 | -1 | 1
0x0018101A | 0xFFFFFFFF | Hardcopy Device Software Version | VR_LO | 1 | -1 | 1
0x0018101B | 0xFFFFFFFF | Hardcopy Device Manfuacturer's Model Name | VR_LO | 1 | 1 | 1
0x00181020 | 0xFFFFFFFF | Software Version(s) | VR_LO | 1 | -1 | 1
0x00181022 | 0xFFFFFFFF | Video Image Format Acquired | VR_SH | 1 | 1 | 1
0x00181023 | 0xFFFFFFFF | Digital Image Format Acquired | VR_LO | 1 | 1 | 1
0x00181030 | 0xFFFFFFFF | Protocol Name | VR_LO | 1 | 1 | 1
0x00181040 | 0xFFFFFFFF | Contrast/Bolus Route | VR_LO | 1 | 1 | 1
0x00181041 | 0xFFFFFFFF | Contrast/Bolus Volume | VR_DS | 1 | 1 | 1
0x00181042 | 0xFFFFFFFF | Contrast/Bolus Start Time | VR_TM | 1 | 1 | 1
0x00181043 | 0xFFFFFFFF | Contrast/Bolus Stop Time | VR_TM | 1 | 1 | 1
0x00181044 | 0xFFFFFFFF | Contrast/Bolus Total Dose | VR_DS | 1 | 1 | 1
0x00181045 | 0xFFFFFFFF | Syringe Counts | VR_IS | 1 | 1 | 1
0x00181046 | 0xFFFFFFFF | Contrast Flow Rate(s) | VR_DS | 1 | -1 | 1
0x00181047 | 0xFFFFFFFF | Contrast Flow Duration(s) | VR_DS | 1 | -1 | 1
0x00181048 | 0xFFFFFFFF | Contrast/Bolus Ingredient | VR_CS | 1 | 1 | 1
0x00181049 | 0xFFFFFFFF | Contrast/Bolus Ingredient Concentration | VR_DS | 1 | 1 | 1
0x00181050 | 0xFFFFFFFF | Spatial Resolution | VR_DS | 1 | 1 | 1
0x00181060 | 0xFFFFFFFF | Trigger Time | VR_DS | 1 | 1 | 1
0x00181061 | 0xFFFFFFFF | Trigger Source or Type | VR_LO | 1 | 1 | 1
0x00181062 | 0xFFFFFFFF | Nominal Interval | VR_IS | 1 | 1 | 1
0x00181063 | 0xFFFFFFFF | Frame Time | VR_DS | 1 | 1 | 1
0x00181064 | 0xFFFFFFFF | Framing Type | VR_LO | 1 | 1 | 1
0x00181065 | 0xFFFFFFFF | Frame Time Vector | VR_DS | 1 | -1 | 1
0x00181066 | 0xFFFFFFFF | Frame Delay | VR_DS | 1 | 1 | 1
0x00181067 | 0xFFFFFFFF | Image Trigger Delay | VR_DS | 1 | 1 | 1
0x00181068 | 0xFFFFFFFF | Group Time Offset | VR_DS | 1 | 1 | 1
0x00181069 | 0xFFFFFFFF | Trigger Time Offset | VR_DS | 1 | 1 | 1
0x0018106A | 0xFFFFFFFF | Synchronization Trigger | VR_CS | 1 | 2 | 1
0x0018106B | 0xFFFFFFFF | Synchronization Frame of Reference | VR_UI | 1 | 1 | 1
0x0018106E | 0xFFFFFFFF | Trigger Sample Position | VR_UL | 1 | 1 | 1
0x00181070 | 0xFFFFFFFF | Radiopharmaceutical Route | VR_LO | 1 | 1 | 1
0x00181071 | 0xFFFFFFFF | Radiopharmaceutical Volume | VR_DS | 1 | 1 | 1
0x00181072 | 0xFFFFFFFF | Radiopharmaceutical Start Time | VR_TM | 1 | 1 | 1
0x00181073 | 0xFFFFFFFF | Radiopharmaceutical Stop Time | VR_TM | 1 | 1 | 1
0x00181074 | 0xFFFFFFFF | Radionuclide Total Dose | VR_DS | 1 | 1 | 1
0x00181075 | 0xFFFFFFFF | Radionuclide Half Life | VR_DS | 1 | 1 | 1
0x00181076 | 0xFFFFFFFF | Radionuclide Positron Fraction | VR_DS | 1 | 1 | 1
0x00181077 | 0xFFFFFFFF | Radiopharmaceutical Specific Activity | VR_DS | 1 | 1 | 1
0x00181080 | 0xFFFFFFFF | Beat Rejection Flag | VR_CS | 1 | 1 | 1
0x00181081 | 0xFFFFFFFF | Low R-R Value | VR_IS | 1 | 1 | 1
0x00181082 | 0xFFFFFFFF | High R-R Value | VR_IS | 1 | 1 | 1
0x00181083 | 0xFFFFFFFF | Intervals Acquired | VR_IS | 1 | 1 | 1
0x00181084 | 0xFFFFFFFF | Intervals Rejected | VR_IS | 1 | 1 | 1
0x00181085 | 0xFFFFFFFF | PVC Rejection | VR_LO | 1 | 1 | 1
0x00181086 | 0xFFFFFFFF | Skip Beats | VR_IS | 1 | 1 | 1
0x00181088 | 0xFFFFFFFF | Heart Rate | VR_IS | 1 | 1 | 1
0x00181090 | 0xFFFFFFFF | Cardiac Number of Images | VR_IS | 1 | 1 | 1
0x00181094 | 0xFFFFFFFF | Trigger Window | VR_IS | 1 | 1 | 1
0x00181100 | 0xFFFFFFFF | Reconstruction Diameter | VR_DS | 1 | 1 | 1
0x00181110 | 0xFFFFFFFF | Distance Source to Detector | VR_DS | 1 | 1 | 1
0x00181111 | 0xFFFFFFFF | Distance Source to Patient | VR_DS | 1 | 1 | 1
0x00181114 | 0xFFFFFFFF | Estimated Radiographic Magnification Factor | VR_DS | 1 | 1 | 1
0x00181120 | 0xFFFFFFFF | Gantry/Detector Tilt | VR_DS | 1 | 1 | 1
0x00181121 | 0xFFFFFFFF | Gantry/Detector Slew | VR_DS | 1 | 1 | 1
0x00181130 | 0xFFFFFFFF | Table Height | VR_DS | 1 | 1 | 1
0x00181131 | 0xFFFFFFFF | Table Traverse | VR_DS | 1 | 1 | 1
0x00181134 | 0xFFFFFFFF | Table Motion | VR_CS | 1 | 1 | 1
0x00181135 | 0xFFFFFFFF | Table Vertical Increment | VR_DS | 1 | -1 | 1
0x00181136 | 0xFFFFFFFF | Table Lateral Increment | VR_DS | 1 | -1 | 1
0x00181137 | 0xFFFFFFFF | Table Longitudinal Increment | VR_DS | 1 | -1 | 1
0x00181138 | 0xFFFFFFFF | Table Angle | VR_DS | 1 | 1 | 1
0x0018113A | 0xFFFFFFFF | Table Type | VR_CS | 1 | 1 | 1
0x00181140 | 0xFFFFFFFF | Rotation Direction | VR_CS | 1 | 1 | 1
0x00181141 | 0xFFFFFFFF | Angular Position | VR_DS | 1 | 1 | 1
0x00181142 | 0xFFFFFFFF | Radial Position | VR_DS | 1 | -1 | 1
0x00181143 | 0xFFFFFFFF | Scan Arc | VR_DS | 1 | 1 | 1
0x00181144 | 0xFFFFFFFF | Angular Step | VR_DS | 1 | 1 | 1
0x00181145 | 0xFFFFFFFF | Center of Rotation Offset | VR_DS | 1 | 1 | 1
0x00181146 | 0xFFFFFFFF | Rotation Offset (Retired) | VR_DS | 1 | -1 | 1
0x00181147 | 0xFFFFFFFF | Field of View Shape | VR_CS | 1 | 1 | 1
0x00181149 | 0xFFFFFFFF | Field of View Dimension(s) | VR_IS | 1 | 2 | 1
0x00181150 | 0xFFFFFFFF | Exposure Time | VR_IS | 1 | 1 | 1
0x00181151 | 0xFFFFFFFF | X-ray Tube Current | VR_IS | 1 | 1 | 1
0x00181152 | 0xFFFFFFFF | Exposure | VR_IS | 1 | 1 | 1
0x00181153 | 0xFFFFFFFF | Exposure in uAs | VR_IS | 1 | 1 | 1
0x00181154 | 0xFFFFFFFF | Average Pulse Width | VR_DS | 1 | 1 | 1
0x00181155 | 0xFFFFFFFF | Radiation Setting | VR_CS | 1 | 1 | 1
0x00181156 | 0xFFFFFFFF | Rectification Type | VR_CS | 1 | 1 | 1
0x0018115A | 0xFFFFFFFF | Radiation Mode | VR_CS | 1 | 1 | 1
0x0018115E | 0xFFFFFFFF | Image Area Dose Product | VR_DS | 1 | 1 | 1
0x00181160 | 0xFFFFFFFF | Filter Type | VR_SH | 1 | 1 | 1
0x00181161 | 0xFFFFFFFF | Type of Filters | VR_LO | 1 | -1 | 1
0x00181162 | 0xFFFFFFFF | Intensifier Size | VR_DS | 1 | 1 | 1
0x00181164 | 0xFFFFFFFF | Imager Pixel Spacing | VR_DS | 2 | 2 | 2
0x00181166 | 0xFFFFFFFF | Grid | VR_CS | 1 | 1 | 1
0x00181170 | 0xFFFFFFFF | Generator Power | VR_IS | 1 | 1 | 1
0x00181180 | 0xFFFFFFFF | Collimator/grid Name | VR_SH | 1 | 1 | 1
0x00181181 | 0xFFFFFFFF | Collimator Type | VR_CS | 1 | 1 | 1
0x00181182 | 0xFFFFFFFF | Focal Distance | VR_IS | 1 | 2 | 1
0x00181183 | 0xFFFFFFFF | X Focus Center | VR_DS | 1 | 2 | 1
0x00181184 | 0xFFFFFFFF | Y Focus Center | VR_DS | 1 | 2 | 1
0x00181190 | 0xFFFFFFFF | Focal Spot(s) | VR_DS | 1 | -1 | 1
0x00181191 | 0xFFFFFFFF | Anode Target Material | VR_CS | 1 | 1 | 1
0x001811A0 | 0xFFFFFFFF | Body Part Thickness | VR_DS | 1 | 1 | 1
0x001811A2 | 0xFFFFFFFF | Compression Force | VR_DS | 1 | 1 | 1
0x00181200 | 0xFFFFFFFF | Date of Last Calibration | VR_DA | 1 | -1 | 1
0x00181201 | 0xFFFFFFFF | Time of Last Calibration | VR_TM | 1 | -1 | 1
0x00181210 | 0xFFFFFFFF | Convolution Kernel | VR_SH | 1 | -1 | 1
0x00181240 | 0xFFFFFFFF | Upper/Lower Pixel Values (Retired) | VR_IS | 1 | -1 | 1
0x00181242 | 0xFFFFFFFF | Actual Frame Duration | VR_IS | 1 | 1 | 1
0x00181243 | 0xFFFFFFFF | Count Rate | VR_IS | 1 | 1 | 1
0x00181244 | 0xFFFFFFFF | Preferred Playback Sequencing | VR_US | 1 | 1 | 1
0x00181250 | 0xFFFFFFFF | Receiving Coil | VR_SH | 1 | 1 | 1
0x00181251 | 0xFFFFFFFF | Transmitting Coil | VR_SH | 1 | 1 | 1
0x00181260 | 0xFFFFFFFF | Plate Type | VR_SH | 1 | 1 | 1
0x00181261 | 0xFFFFFFFF | Phosphor Type | VR_LO | 1 | 1 | 1
0x00181300 | 0xFFFFFFFF | Scan Velocity | VR_DS | 1 | 1 | 1
0x00181301 | 0xFFFFFFFF | Whole Body Technique | VR_CS | 1 | -1 | 1
0x00181302 | 0xFFFFFFFF | Scan Length | VR_IS | 1 | 1 | 1
0x00181310 | 0xFFFFFFFF | Acquisition Matrix | VR_US | 4 | 4 | 4
0x00181312 | 0xFFFFFFFF | Phase Encoding Direction | VR_CS | 1 | 1 | 1
0x00181314 | 0xFFFFFFFF | Flip Angle | VR_DS | 1 | 1 | 1
0x00181315 | 0xFFFFFFFF | Variable Flip Angle Flag | VR_CS | 1 | 1 | 1
0x00181316 | 0xFFFFFFFF | SAR | VR_DS | 1 | 1 | 1
0x00181318 | 0xFFFFFFFF | dB/dt | VR_DS | 1 | 1 | 1
0x00181400 | 0xFFFFFFFF | Acquisition Device Processing Description | VR_LO | 1 | 1 | 1
0x00181401 | 0xFFFFFFFF | Acquisition Device Processing Code | VR_LO | 1 | 1 | 1
0x00181402 | 0xFFFFFFFF | Cassette Orientation | VR_CS | 1 | 1 | 1
0x00181403 | 0xFFFFFFFF | Cassette Size | VR_CS | 1 | 1 | 1
0x00181404 | 0xFFFFFFFF | Exposures on Plate | VR_US | 1 | 1 | 1
0x00181405 | 0xFFFFFFFF | Relative X-ray Exposure | VR_IS | 1 | 1 | 1
0x00181450 | 0xFFFFFFFF | Column Angulation | VR_CS | 1 | 1 | 1
0x00181460 | 0xFFFFFFFF | Tomo Layer Height | VR_DS | 1 | 1 | 1
0x00181470 | 0xFFFFFFFF | Tomo Angle | VR_DS | 1 | 1 | 1
0x00181480 | 0xFFFFFFFF | Tomo Time | VR_DS | 1 | 1 | 1
0x00181490 | 0xFFFFFFFF | Tomo Type | VR_CS | 1 | 1 | 1
0x00181491 | 0xFFFFFFFF | Tomo Class | VR_CS | 1 | 1 | 1
0x00181495 | 0xFFFFFFFF | Number of Tomosynthesis Source Images | VR_IS | 1 | 1 | 1
0x00181500 | 0xFFFFFFFF | Positioner Motion | VR_CS | 1 | 1 | 1
0x00181508 | 0xFFFFFFFF | Positioner Type | VR_CS | 1 | 1 | 1
0x00181510 | 0xFFFFFFFF | Positioner Primary Angle | VR_DS | 1 | 1 | 1
0x00181511 | 0xFFFFFFFF | Positioner Secondary Angle | VR_DS | 1 | 1 | 1
0x00181520 | 0xFFFFFFFF | Positioner Primary Angle Increment | VR_DS | 1 | -1 | 1
0x00181521 | 0xFFFFFFFF | Positioner Secondary Angle Increment | VR_DS | 1 | -1 | 1
0x00181530 | 0xFFFFFFFF | Detector Primary Angle | VR_DS | 1 | 1 | 1
0x00181531 | 0xFFFFFFFF | Detector Secondary Angle | VR_DS | 1 | 1 | 1
0x00181600 | 0xFFFFFFFF | Shutter Shape | VR_CS | 1 | 3 | 1
0x00181602 | 0xFFFFFFFF | Shutter Left Vertical Edge | VR_IS | 1 | 1 | 1
0x00181604 | 0xFFFFFFFF | Shutter Right Vertical Edge | VR_IS | 1 | 1 | 1
0x00181606 | 0xFFFFFFFF | Shutter Upper Horizontal Edge | VR_IS | 1 | 1 | 1
0x00181608 | 0xFFFFFFFF | Shutter Lower Horizontal Edge | VR_IS | 1 | 1 | 1
0x00181610 | 0xFFFFFFFF | Center of Circular Shutter | VR_IS | 2 | 2 | 2
0x00181612 | 0xFFFFFFFF | Radius of Circular Shutter | VR_IS | 1 | 1 | 1
0x00181620 | 0xFFFFFFFF | Vertices of the Polygonal Shutter | VR_IS | 2 | -1 | 2
0x00181700 | 0xFFFFFFFF | Collimator Shape | VR_CS | 1 | 3 | 1
0x00181702 | 0xFFFFFFFF | Collimator Left Vertical Edge | VR_IS | 1 | 1 | 1
0x00181704 | 0xFFFFFFFF | Collimator Right Vertical Edge | VR_IS | 1 | 1 | 1
0x00181706 | 0xFFFFFFFF | Collimator Upper Horizontal Edge | VR_IS | 1 | 1 | 1
0x00181708 | 0xFFFFFFFF | Collimator Lower Horizontal Edge | VR_IS | 1 | 1 | 1
0x00181710 | 0xFFFFFFFF | Center of Circular Collimator | VR_IS | 2 | 2 | 2
0x00181712 | 0xFFFFFFFF | Radius of Circular Collimator | VR_IS | 1 | 1 | 1
0x00181720 | 0xFFFFFFFF | Vertices of the Polygonal Collimator | VR_IS | 2 | -1 | 2
0x00181800 | 0xFFFFFFFF | Acquisition Time Synchronized | VR_CS | 1 | 1 | 1
0x00181801 | 0xFFFFFFFF | Time Source | VR_SH | 1 | 1 | 1
0x00181802 | 0xFFFFFFFF | Time Distribution Protocol | VR_CS | 1 | 1 | 1
0x00184000 | 0xFFFFFFFF | Comments (Retired) | VR_LT | 1 | -1 | 1
0x00185000 | 0xFFFFFFFF | Output Power | VR_SH | 1 | -1 | 1
0x00185010 | 0xFFFFFFFF | Transducer Data | VR_LO | 3 | 3 | 3
0x00185012 | 0xFFFFFFFF | Focus Depth | VR_DS | 1 | 1 | 1
0x00185020 | 0xFFFFFFFF | Processing Function | VR_LO | 1 | 1 | 1
0x00185021 | 0xFFFFFFFF | Postprocessing Function | VR_LO | 1 | 1 | 1
0x00185022 | 0xFFFFFFFF | Mechanical Index | VR_DS | 1 | 1 | 1
0x00185024 | 0xFFFFFFFF | Thermal Index | VR_DS | 1 | 1 | 1
0x00185026 | 0xFFFFFFFF | Cranial Thermal Index | VR_DS | 1 | 1 | 1
0x00185027 | 0xFFFFFFFF | Soft Tissue Thermal Index | VR_DS | 1 | 1 | 1
0x00185028 | 0xFFFFFFFF | Soft Tissue-focus Thermal Index | VR_DS | 1 | 1 | 1
0x00185029 | 0xFFFFFFFF | Soft Tissue-surface Thermal Index | VR_DS | 1 | 1 | 1
0x00185030 | 0xFFFFFFFF | Dynamic Range (Retired) | VR_DS | 1 | 1 | 1
0x00185040 | 0xFFFFFFFF | Total Gain (Retired) | VR_DS | 1 | 1 | 1
0x00185050 | 0xFFFFFFFF | Depth of Scan Field | VR_IS | 1 | 1 | 1
0x00185100 | 0xFFFFFFFF | Patient Position | VR_CS | 1 | 1 | 1
0x00185101 | 0xFFFFFFFF | View Position | VR_CS | 1 | 1 | 1
0x00185104 | 0xFFFFFFFF | Projection Eponymous Name Code Sequence | VR_SQ | 1 | 1 | 1
0x00185210 | 0xFFFFFFFF | Image Transformation Matrix | VR_DS | 6 | 6 | 6
0x00185212 | 0xFFFFFFFF | Image Translation Vector | VR_DS | 3 | 3 | 3
0x00186000 | 0xFFFFFFFF | Sensitivity | VR_DS | 1 | 1 | 1
0x00186011 | 0xFFFFFFFF | Sequence of Ultrasound Regions | VR_SQ | 1 | 1 | 1
0x00186012 | 0xFFFFFFFF | Region Spatial Format | VR_US | 1 | 1 | 1
0x00186014 | 0xFFFFFFFF | Region Data Type | VR_US | 1 | 1 | 1
0x00186016 | 0xFFFFFFFF | Region Flags | VR_UL | 1 | 1 | 1
0x00186018 | 0xFFFFFFFF | Region Location Min X 0 | VR_UL | 1 | 1 | 1
0x0018601A | 0xFFFFFFFF | Region Location Min Y 0 | VR_UL | 1 | 1 | 1
0x0018601C | 0xFFFFFFFF | Region Location Max X 1 | VR_UL | 1 | 1 | 1
0x0018601E | 0xFFFFFFFF | Region Location Max Y 1 | VR_UL | 1 | 1 | 1
0x00186020 | 0xFFFFFFFF | Reference Pixel X 0 | VR_SL | 1 | 1 | 1
0x00186022 | 0xFFFFFFFF | Reference Pixel Y 0 | VR_SL | 1 | 1 | 1
0x00186024 | 0xFFFFFFFF | Physical Units X Direction | VR_US | 1 | 1 | 1
0x00186026 | 0xFFFFFFFF | Physical Units Y Direction | VR_US | 1 | 1 | 1
0x00186028 | 0xFFFFFFFF | Reference Pixel Physical Value X | VR_FD | 1 | 1 | 1
0x0018602A | 0xFFFFFFFF | Reference Pixel Physical Value Y | VR_FD | 1 | 1 | 1
0x0018602C | 0xFFFFFFFF | Physical Delta X | VR_FD | 1 | 1 | 1
0x0018602E | 0xFFFFFFFF | Physical Delta Y | VR_FD | 1 | 1 | 1
0x00186030 | 0xFFFFFFFF | Transducer Frequency | VR_UL | 1 | 1 | 1
0x00186031 | 0xFFFFFFFF | Transducer Type | VR_CS | 1 | 1 | 1
0x00186032 | 0xFFFFFFFF | Pulse Repetition Frequency | VR_UL | 1 | 1 | 1
0x00186034 | 0xFFFFFFFF | Doppler Correction Angle | VR_FD | 1 | 1 | 1
0x00186036 | 0xFFFFFFFF | Steering Angle | VR_FD | 1 | 1 | 1
0x00186038 | 0xFFFFFFFF | Doppler Sample Volume X Position | VR_UL | 1 | 1 | 1
0x0018603A | 0xFFFFFFFF | Doppler Sample Volume Y Position | VR_UL | 1 | 1 | 1
0x0018603C | 0xFFFFFFFF | TM-Line Position X 0 | VR_UL | 1 | 1 | 1
0x0018603E | 0xFFFFFFFF | TM-Line Position Y 0 | VR_UL | 1 | 1 | 1
0x00186040 | 0xFFFFFFFF | TM-Line Position X 1 | VR_UL | 1 | 1 | 1
0x00186042 | 0xFFFFFFFF | TM-Line Position Y 1 | VR_UL | 1 | 1 | 1
0x00186044 | 0xFFFFFFFF | Pixel Component Organization | VR_US | 1 | 1 | 1
0x00186046 | 0xFFFFFFFF | Pixel Component Mask | VR_UL | 1 | 1 | 1
0x00186048 | 0xFFFFFFFF | Pixel Component Range Start | VR_UL | 1 | 1 | 1
0x0018604A | 0xFFFFFFFF | Pixel Component Range Stop | VR_UL | 1 | 1 | 1
0x0018604C | 0xFFFFFFFF | Pixel Component Physical Units | VR_US | 1 | 1 | 1
0x0018604E | 0xFFFFFFFF | Pixel Component Data Type | VR_US | 1 | 1 | 1
0x00186050 | 0xFFFFFFFF | Number of Table Break Points | VR_UL | 1 | 1 | 1
0x00186052 | 0xFFFFFFFF | Table of X Break Points | VR_UL | 1 | -1 | 1
0x00186054 | 0xFFFFFFFF | Table of Y Break Points | VR_FD | 1 | -1 | 1
0x00186056 | 0xFFFFFFFF | Number of Table Entries | VR_UL | 1 | 1 | 1
0x00186058 | 0xFFFFFFFF | Table of Pixel Values | VR_UL | 1 | -1 | 1
0x0018605A | 0xFFFFFFFF | Table of Parameter Values | VR_FL | 1 | -1 | 1
0x00187000 | 0xFFFFFFFF | Detector Conditions Nominal Flag | VR_CS | 1 | 1 | 1
0x00187001 | 0xFFFFFFFF | Detector Temperature | VR_DS | 1 | 1 | 1
0x00187004 | 0xFFFFFFFF | Detector Type | VR_CS | 1 | 1 | 1
0x00187005 | 0xFFFFFFFF | Detector Configuration | VR_CS | 1 | 1 | 1
0x00187006 | 0xFFFFFFFF | Detector Description | VR_LT | 1 | 1 | 1
0x00187008 | 0xFFFFFFFF | Detector Mode | VR_LT | 1 | 1 | 1
0x0018700A | 0xFFFFFFFF | Detector ID | VR_SH | 1 | 1 | 1
0x0018700C | 0xFFFFFFFF | Date of Last Detector Calibration | VR_DA | 1 | 1 | 1
0x0018700E | 0xFFFFFFFF | Time of Last Detector Calibration | VR_TM | 1 | 1 | 1
0x00187010 | 0xFFFFFFFF | Exposures on Detector Since Last Calibration | VR_IS | 1 | 1 | 1
0x00187011 | 0xFFFFFFFF | Exposures on Detector Since Manufactured | VR_IS | 1 | 1 | 1
0x00187012 | 0xFFFFFFFF | Detector Time Since Last Exposure | VR_DS | 1 | 1 | 1
0x00187014 | 0xFFFFFFFF | Detector Active Time | VR_DS | 1 | 1 | 1
0x00187016 | 0xFFFFFFFF | Detector Activation Offset From Exposure | VR_DS | 1 | 1 | 1
0x0018701A | 0xFFFFFFFF | Detector Binning | VR_DS | 2 | 2 | 2
0x00187020 | 0xFFFFFFFF | Detector Element Physical Size | VR_DS | 2 | 2 | 2
0x00187022 | 0xFFFFFFFF | Detector Element Spacing | VR_DS | 2 | 2 | 2
0x00187024 | 0xFFFFFFFF | Detector Active Shape | VR_CS | 1 | 1 | 1
0x00187026 | 0xFFFFFFFF | Detector Active Dimensions | VR_DS | 1 | 2 | 1
0x00187028 | 0xFFFFFFFF | Detector Active Origin | VR_DS | 2 | 2 | 2
0x00187030 | 0xFFFFFFFF | Field of View Origin | VR_DS | 2 | 2 | 2
0x00187032 | 0xFFFFFFFF | Field of View Rotation | VR_DS | 1 | 1 | 1
0x00187034 | 0xFFFFFFFF | Field of View Horizontal Flip | VR_CS | 1 | 1 | 1
0x00187040 | 0xFFFFFFFF | Grid Absorbing Material | VR_LT | 1 | 1 | 1
0x00187041 | 0xFFFFFFFF | Grid Spacing Material | VR_LT | 1 | 1 | 1
0x00187042 | 0xFFFFFFFF | Grid Thickness | VR_DS | 1 | 1 | 1
0x00187044 | 0xFFFFFFFF | Grid Pitch | VR_DS | 1 | 1 | 1
0x00187046 | 0xFFFFFFFF | Grid Aspect Ratio | VR_IS | 2 | 2 | 2
0x00187048 | 0xFFFFFFFF | Grid Period | VR_DS | 1 | 1 | 1
0x0018704C | 0xFFFFFFFF | Grid Focal Distance | VR_DS | 1 | 1 | 1
0x00187050 | 0xFFFFFFFF | Filter Material | VR_LT | 1 | -1 | 1
0x00187052 | 0xFFFFFFFF | Filter Thickness Minimum | VR_DS | 1 | -1 | 1
0x00187054 | 0xFFFFFFFF | Filter Thickness Maximum | VR_DS | 1 | -1 | 1
0x00187060 | 0xFFFFFFFF | Exposure Control Mode | VR_CS | 1 | 1 | 1
0x00187062 | 0xFFFFFFFF | Exposure Control Mode Description | VR_LT | 1 | 1 | 1
0x00187064 | 0xFFFFFFFF | Exposure Status | VR_CS | 1 | 1 | 1
0x00187065 | 0xFFFFFFFF | Phototimer Setting | VR_DS | 1 | 1 | 1
0x0020000D | 0xFFFFFFFF | Study Instance UID | VR_UI | 1 | 1 | 1
0x0020000E | 0xFFFFFFFF | Series Instance UID | VR_UI | 1 | 1 | 1
0x00200010 | 0xFFFFFFFF | Study ID | VR_SH | 1 | 1 | 1
0x00200011 | 0xFFFFFFFF | Series Number | VR_IS | 1 | 1 | 1
0x00200012 | 0xFFFFFFFF | Acquisition Number | VR_IS | 1 | 1 | 1
0x00200013 | 0xFFFFFFFF | Instance Number | VR_IS | 1 | 1 | 1
0x00200014 | 0xFFFFFFFF | Isotope Number (Retired) | VR_IS | 1 | 1 | 1
0x00200015 | 0xFFFFFFFF | Phase Number (Retired) | VR_IS | 1 | 1 | 1
0x00200016 | 0xFFFFFFFF | Interval Number (Retired) | VR_IS | 1 | 1 | 1
0x00200017 | 0xFFFFFFFF | Time Slot Number (Retired) | VR_IS | 1 | 1 | 1
0x00200018 | 0xFFFFFFFF | Angle Number (Retired) | VR_IS | 1 | 1 | 1
0x00200019 | 0xFFFFFFFF | Item Number | VR_IS | 1 | 1 | 1
0x00200020 | 0xFFFFFFFF | Patient Orientation | VR_CS | 2 | 2 | 2
0x00200022 | 0xFFFFFFFF | Overlay Number | VR_IS | 1 | 1 | 1
0x00200024 | 0xFFFFFFFF | Curve Number | VR_IS | 1 | 1 | 1
0x00200026 | 0xFFFFFFFF | Lookup Table Number | VR_IS | 1 | 1 | 1
0x00200030 | 0xFFFFFFFF | Image Position (Retired) | VR_DS | 3 | 3 | 3
0x00200032 | 0xFFFFFFFF | Image Position (Patient) | VR_DS | 3 | 3 | 3
0x00200035 | 0xFFFFFFFF | Image Orientation (Retired) | VR_DS | 6 | 6 | 6
0x00200037 | 0xFFFFFFFF | Image Orientation (Patient) | VR_DS | 6 | 6 | 6
0x00200050 | 0xFFFFFFFF | Location (Retired) | VR_DS | 1 | 1 | 1
0x00200052 | 0xFFFFFFFF | Frame of Reference UID | VR_UI | 1 | 1 | 1
0x00200060 | 0xFFFFFFFF | Laterality | VR_CS | 1 | 1 | 1
0x00200062 | 0xFFFFFFFF | Image Laterality | VR_CS | 1 | 1 | 1
0x00200070 | 0xFFFFFFFF | Image Geometry Type (Retired) | VR_LT | 1 | 1 | 1
0x00200080 | 0xFFFFFFFF | Masking Image (Retired) | VR_LO | 1 | -1 | 1
0x00200100 | 0xFFFFFFFF | Temporal Position Identifier | VR_IS | 1 | 1 | 1
0x00200105 | 0xFFFFFFFF | Number of Temporal Positions | VR_IS | 1 | 1 | 1
0x00200110 | 0xFFFFFFFF | Temporal Resolution | VR_DS | 1 | 1 | 1
0x00201000 | 0xFFFFFFFF | Series in Study | VR_IS | 1 | 1 | 1
0x00201001 | 0xFFFFFFFF | Acquisitions in Series (Retired) | VR_IS | 1 | 1 | 1
0x00201002 | 0xFFFFFFFF | Images in Acquisition | VR_IS | 1 | 1 | 1
0x00201003 | 0xFFFFFFFF | Images in Series | VR_IS | 1 | 1 | 1
0x00201004 | 0xFFFFFFFF | Acquisitions in Study | VR_IS | 1 | 1 | 1
0x00201005 | 0xFFFFFFFF | Images in Study | VR_IS | 1 | 1 | 1
0x00201020 | 0xFFFFFFFF | Reference (Retired) | VR_LO | 1 | -1 | 1
0x00201040 | 0xFFFFFFFF | Position Reference Indicator | VR_LO | 1 | 1 | 1
0x00201041 | 0xFFFFFFFF | Slice Location | VR_DS | 1 | 1 | 1
0x00201070 | 0xFFFFFFFF | Other Study Numbers | VR_IS | 1 | -1 | 1
0x00201200 | 0xFFFFFFFF | Number of Patient Related Studies | VR_IS | 1 | 1 | 1
0x00201202 | 0xFFFFFFFF | Number of Patient Related Series | VR_IS | 1 | 1 | 1
0x00201204 | 0xFFFFFFFF | Number of Patient Related Instances | VR_IS | 1 | 1 | 1
0x00201206 | 0xFFFFFFFF | Number of Study Related Series | VR_IS | 1 | 1 | 1
0x00201208 | 0xFFFFFFFF | Number of Study Related Instances | VR_IS | 1 | 1 | 1
0x00201209 | 0xFFFFFFFF | Number of Series Related Instances | VR_IS | 1 | 1 | 1
0x00203100 | 0xFFFFFF00 | Source Image IDs (Retired) | VR_LO | 1 | -1 | 1
0x00203401 | 0xFFFFFFFF | Modifying Device ID (Retired) | VR_LO | 1 | 1 | 1
0x00203402 | 0xFFFFFFFF | Modified Image ID (Retired) | VR_LO | 1 | 1 | 1
0x00203403 | 0xFFFFFFFF | Modified Image Date (Retired) | VR_DA | 1 | 1 | 1
0x00203404 | 0xFFFFFFFF | Modifying Device Manufacturer (Retired) | VR_LO | 1 | 1 | 1
0x00203405 | 0xFFFFFFFF | Modified Image Time (Retired) | VR_TM | 1 | 1 | 1
0x00203406 | 0xFFFFFFFF | Modified Image Description (Retired) | VR_LT | 1 | 1 | 1
0x00204000 | 0xFFFFFFFF | Image Comments | VR_LT | 1 | 1 | 1
0x00205000 | 0xFFFFFFFF | Original Image Identification (Retired) | VR_AT | 1 | -1 | 1
0x00205002 | 0xFFFFFFFF | Original Image Identification Nomenclature (Retired) | VR_LO | 1 | -1 | 1
0x00280002 | 0xFFFFFFFF | Samples per Pixel | VR_US | 1 | 1 | 1
0x00280004 | 0xFFFFFFFF | Photometric Interpretation | VR_CS | 1 | 1 | 1
0x00280005 | 0xFFFFFFFF | Image Dimensions (Retired) | VR_US | 1 | 1 | 1
0x00280006 | 0xFFFFFFFF | Planar Configuration | VR_US | 1 | 1 | 1
0x00280008 | 0xFFFFFFFF | Number of Frames | VR_IS | 1 | 1 | 1
0x00280009 | 0xFFFFFFFF | Frame Increment Pointer | VR_AT | 1 | -1 | 1
0x00280010 | 0xFFFFFFFF | Rows | VR_US | 1 | 1 | 1
0x00280011 | 0xFFFFFFFF | Columns | VR_US | 1 | 1 | 1
0x00280012 | 0xFFFFFFFF | Planes | VR_US | 1 | 1 | 1
0x00280014 | 0xFFFFFFFF | Ultrasound Color Data Present | VR_US | 1 | 1 | 1
0x00280030 | 0xFFFFFFFF | Pixel Spacing | VR_DS | 2 | 2 | 2
0x00280031 | 0xFFFFFFFF | Zoom Factor | VR_DS | 2 | 2 | 2
0x00280032 | 0xFFFFFFFF | Zoom Center | VR_DS | 2 | 2 | 2
0x00280034 | 0xFFFFFFFF | Pixel Aspect Ratio | VR_IS | 2 | 2 | 2
0x00280040 | 0xFFFFFFFF | Image Format (Retired) | VR_LO | 1 | 1 | 1
0x00280050 | 0xFFFFFFFF | Manipulated Image (Retired) | VR_LT | 1 | -1 | 1
0x00280051 | 0xFFFFFFFF | Corrected Image | VR_CS | 1 | -1 | 1
0x0028005F | 0xFFFFFFFF | Compression Recognition Code | VR_LO | 1 | 1 | 1
0x00280060 | 0xFFFFFFFF | Compression Code (Retired) | VR_LO | 1 | 1 | 1
0x00280061 | 0xFFFFFFFF | Compression Originator | VR_SH | 1 | 1 | 1
0x00280062 | 0xFFFFFFFF | Compression Label | VR_SH | 1 | 1 | 1
0x00280063 | 0xFFFFFFFF | Compression Description | VR_SH | 1 | 1 | 1
0x00280065 | 0xFFFFFFFF | Compression Sequence | VR_LO | 1 | -1 | 1
0x00280066 | 0xFFFFFFFF | Compression Step Pointers | VR_AT | 1 | -1 | 1
0x00280068 | 0xFFFFFFFF | Repeat Interval | VR_US | 1 | 1 | 1
0x00280069 | 0xFFFFFFFF | Bits Grouped | VR_US | 1 | 1 | 1
0x00280070 | 0xFFFFFFFF | Perimeter Table | VR_US | 1 | -1 | 1
0x00280071 | 0xFFFFFFFF | Perimeter Value | VR_US | 1 | 1 | 1
0x00280080 | 0xFFFFFFFF | Predictor Rows | VR_US | 1 | 1 | 1
0x00280081 | 0xFFFFFFFF | Predictor Columns | VR_US | 1 | 1 | 1
0x00280082 | 0xFFFFFFFF | Predictor Constants | VR_US | 1 | -1 | 1
0x00280090 | 0xFFFFFFFF | Blocked Pixels | VR_LO | 1 | 1 | 1
0x00280091 | 0xFFFFFFFF | Block Rows | VR_US | 1 | 1 | 1
0x00280092 | 0xFFFFFFFF | Block Columns | VR_US | 1 | 1 | 1
0x00280093 | 0xFFFFFFFF | Row Overlap | VR_US | 1 | 1 | 1
0x00280094 | 0xFFFFFFFF | Column Overlap | VR_US | 1 | 1 | 1
0x00280100 | 0xFFFFFFFF | Bits Allocated | VR_US | 1 | 1 | 1
0x00280101 | 0xFFFFFFFF | Bits Stored | VR_US | 1 | 1 | 1
0x00280102 | 0xFFFFFFFF | High Bit | VR_US | 1 | 1 | 1
0x00280103 | 0xFFFFFFFF | Pixel Representation | VR_US | 1 | 1 | 1
0x00280104 | 0xFFFFFFFF | Smallest Valid Pixel Value (Retired) | VR_US | 1 | 1 | 1
0x00280105 | 0xFFFFFFFF | Largest Valid Pixel Value (Retired) | VR_US | 1 | 1 | 1
0x00280106 | 0xFFFFFFFF | Smallest Image Pixel Value | VR_US | 1 | 1 | 1
0x00280107 | 0xFFFFFFFF | Largest Image Pixel Value | VR_US | 1 | 1 | 1
0x00280108 | 0xFFFFFFFF | Smallest Pixel Value in Series | VR_US | 1 | 1 | 1
0x00280109 | 0xFFFFFFFF | Largest Pixel Value in Series | VR_US | 1 | 1 | 1
0x00280110 | 0xFFFFFFFF | Smallest Image Pixel Value in Plane | VR_US | 1 | 1 | 1
0x00280111 | 0xFFFFFFFF | Largest Image Pixel Value in Plane | VR_US | 1 | 1 | 1
0x00280120 | 0xFFFFFFFF | Pixel Padding Value | VR_US | 1 | 1 | 1
0x00280200 | 0xFFFFFFFF | Image Location (Retired) | VR_US | 1 | 1 | 1
0x00280300 | 0xFFFFFFFF | Quality Control Image | VR_CS | 1 | 1 | 1
0x00280301 | 0xFFFFFFFF | Burned In Annotation | VR_CS | 1 | 1 | 1
0x00280400 | 0xFFFFFF0F | Rows For Nth Order Coefficients | VR_US | 1 | 1 | 1
0x00280401 | 0xFFFFFF0F | Columns For Nth Order Coefficients | VR_US | 1 | 1 | 1
0x00280402 | 0xFFFFFF0F | CoefficientCoding | VR_LO | 1 | -1 | 1
0x00280403 | 0xFFFFFF0F | Coefficient Coding Pointers | VR_AT | 1 | -1 | 1
0x00280404 | 0xFFFFFFFF | Details of Coefficients | VR_AT | 1 | -1 | 1
0x00280700 | 0xFFFFFFFF | DCT Label | VR_LO | 1 | 1 | 1
0x00280701 | 0xFFFFFFFF | Data Block Description | VR_LO | 1 | -1 | 1
0x00280702 | 0xFFFFFFFF | Data Block | VR_AT | 1 | -1 | 1
0x00280710 | 0xFFFFFFFF | Normalization Factor Format | VR_US | 1 | 1 | 1
0x00280720 | 0xFFFFFFFF | Zonal Map Number Format | VR_US | 1 | 1 | 1
0x00280721 | 0xFFFFFFFF | Zonal Map Location | VR_AT | 1 | -1 | 1
0x00280722 | 0xFFFFFFFF | Zonal Map Format | VR_US | 1 | 1 | 1
0x00280730 | 0xFFFFFFFF | Adaptive Map Format | VR_US | 1 | 1 | 1
0x00280740 | 0xFFFFFFFF | Code Number Format | VR_US | 1 | 1 | 1
0x00280800 | 0xFFFFFF0F | Code Label | VR_LO | 1 | -1 | 1
0x00280802 | 0xFFFFFF0F | Number of Tables | VR_US | 1 | 1 | 1
0x00280803 | 0xFFFFFF0F | Code Table Location | VR_AT | 1 | -1 | 1
0x00280804 | 0xFFFFFF0F | Bits For Code Word | VR_US | 1 | 1 | 1
0x00280808 | 0xFFFFFF0F | Image Data Location | VR_AT | 1 | -1 | 1
0x00281040 | 0xFFFFFFFF | Pixel Intensity Relationship | VR_CS | 1 | 1 | 1
0x00281041 | 0xFFFFFFFF | Pixel Intensity Relationship Sign | VR_SS | 1 | 1 | 1
0x00281050 | 0xFFFFFFFF | Window Center | VR_DS | 1 | -1 | 1
0x00281051 | 0xFFFFFFFF | Window Width | VR_DS | 1 | -1 | 1
0x00281052 | 0xFFFFFFFF | Rescale Intercept | VR_DS | 1 | 1 | 1
0x00281053 | 0xFFFFFFFF | Rescale Slope | VR_DS | 1 | 1 | 1
0x00281054 | 0xFFFFFFFF | Rescale Type | VR_LO | 1 | 1 | 1
0x00281055 | 0xFFFFFFFF | Window Center & Width Explanation | VR_LO | 1 | -1 | 1
0x00281080 | 0xFFFFFFFF | Gray Scale (Retired) | VR_LO | 1 | 1 | 1
0x00281090 | 0xFFFFFFFF | Recommended Viewing Mode | VR_CS | 1 | 1 | 1
0x00281100 | 0xFFFFFFFF | Gray Lookup Table Descriptor (Retired) | VR_US | 3 | 3 | 3
0x00281101 | 0xFFFFFFFF | Red Palette Color Lookup Table Descriptor | VR_US | 3 | 3 | 3
0x00281102 | 0xFFFFFFFF | Green Palette Color Lookup Table Descriptor | VR_US | 3 | 3 | 3
0x00281103 | 0xFFFFFFFF | Blue Palette Color Lookup Table Descriptor | VR_US | 3 | 3 | 3
0x00281111 | 0xFFFFFFFF | Large Red Palette Color Lookup Table Descriptor | VR_US | 4 | 4 | 4
0x00281112 | 0xFFFFFFFF | Large Green Palette Color Lookup Table Descriptor | VR_US | 4 | 4 | 4
0x00281113 | 0xFFFFFFFF | Large Blue Palette Color Lookup Table Descriptor | VR_US | 4 | 4 | 4
0x00281199 | 0xFFFFFFFF | Palette Color Lookup Table UID | VR_UI | 1 | 1 | 1
0x00281200 | 0xFFFFFFFF | Gray Lookup Table Data (Retired) | VR_US | 1 | -1 | 1
0x00281201 | 0xFFFFFFFF | Red Palette Color Lookup Table Data | VR_OW | 1 | -1 | 1
0x00281202 | 0xFFFFFFFF | Green Palette Color Lookup Table Data | VR_OW | 1 | -1 | 1
0x00281203 | 0xFFFFFFFF | Blue Palette Color Lookup Table Data | VR_OW | 1 | -1 | 1
0x00281211 | 0xFFFFFFFF | Large Red Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281212 | 0xFFFFFFFF | Large Green Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281213 | 0xFFFFFFFF | Large Blue Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281214 | 0xFFFFFFFF | Large Palette Color Lookup Table UID | VR_UI | 1 | 1 | 1
0x00281221 | 0xFFFFFFFF | Segmented Red Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281222 | 0xFFFFFFFF | Segmented Green Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281223 | 0xFFFFFFFF | Segmented Blue Palette Color Lookup Table Data | VR_OW | 1 | 1 | 1
0x00281300 | 0xFFFFFFFF | Implant Present | VR_CS | 1 | 1 | 1
0x00282110 | 0xFFFFFFFF | Lossy Image Compression | VR_CS | 1 | 1 | 1
0x00282112 | 0xFFFFFFFF | Lossy Image Compression Ratio | VR_DS | 1 | -1 | 1
0x00283000 | 0xFFFFFFFF | Modality LUT Sequence | VR_SQ | 1 | 1 | 1
0x00283002 | 0xFFFFFFFF | LUT Descriptor | VR_US | 3 | 3 | 3
0x00283003 | 0xFFFFFFFF | LUT Explanation | VR_LO | 1 | 1 | 1
0x00283004 | 0xFFFFFFFF | Modality LUT Type | VR_LO | 1 | 1 | 1
0x00283006 | 0xFFFFFFFF | LUT Data | VR_US | 1 | -1 | 1
0x00283010 | 0xFFFFFFFF | VOI LUT Sequence | VR_SQ | 1 | 1 | 1
0x00284000 | 0xFFFFFFFF | Comments (Retired) | VR_LT | 1 | -1 | 1
0x00285000 | 0xFFFFFFFF | Bi-Plane Acquisition Sequence | VR_SQ | 1 | 1 | 1
0x00286010 | 0xFFFFFFFF | Representative Frame Number | VR_US | 1 | 1 | 1
0x00286020 | 0xFFFFFFFF | Frame Numbers of Interest (FOI) | VR_US | 1 | -1 | 1
0x00286022 | 0xFFFFFFFF | Frame(s) of Interest Description | VR_LO | 1 | -1 | 1
0x00286030 | 0xFFFFFFFF | Mask Pointer(s) | VR_US | 1 | -1 | 1
0x00286040 | 0xFFFFFFFF | R Wave Pointer | VR_US | 1 | -1 | 1
0x00286100 | 0xFFFFFFFF | Mask Subtraction Sequence | VR_SQ | 1 | 1 | 1
0x00286101 | 0xFFFFFFFF | Mask Operation | VR_CS | 1 | 1 | 1
0x00286102 | 0xFFFFFFFF | Applicable Frame Range | VR_US | 2 | -1 | 2
0x00286110 | 0xFFFFFFFF | Mask Frame Numbers | VR_US | 1 | -1 | 1
0x00286112 | 0xFFFFFFFF | Contrast Frame Averaging | VR_US | 1 | 1 | 1
0x00286114 | 0xFFFFFFFF | Mask Sub-pixel Shift | VR_FL | 2 | 2 | 2
0x00286120 | 0xFFFFFFFF | TID Offset | VR_SS | 1 | 1 | 1
0x00286190 | 0xFFFFFFFF | Mask Operation Explanation | VR_ST | 1 | 1 | 1
0x0032000A | 0xFFFFFFFF | Study Status ID | VR_CS | 1 | 1 | 1
0x0032000C | 0xFFFFFFFF | Study Priority ID | VR_CS | 1 | 1 | 1
0x00320012 | 0xFFFFFFFF | Study ID Issuer | VR_LO | 1 | 1 | 1
0x00320032 | 0xFFFFFFFF | Study Verified Date | VR_DA | 1 | 1 | 1
0x00320033 | 0xFFFFFFFF | Study Verified Time | VR_TM | 1 | 1 | 1
0x00320034 | 0xFFFFFFFF | Study Read Date | VR_DA | 1 | 1 | 1
0x00320035 | 0xFFFFFFFF | Study Read Time | VR_TM | 1 | 1 | 1
0x00321000 | 0xFFFFFFFF | Scheduled Study Start Date | VR_DA | 1 | 1 | 1
0x00321001 | 0xFFFFFFFF | Scheduled Study Start Time | VR_TM | 1 | 1 | 1
0x00321010 | 0xFFFFFFFF | Scheduled Study Stop Date | VR_DA | 1 | 1 | 1
0x00321011 | 0xFFFFFFFF | Scheduled Study Stop Time | VR_TM | 1 | 1 | 1
0x00321020 | 0xFFFFFFFF | Scheduled Study Location | VR_LO | 1 | 1 | 1
0x00321021 | 0xFFFFFFFF | Scheduled Study Location AE Title(s) | VR_AE | 1 | -1 | 1
0x00321030 | 0xFFFFFFFF | Reason for Study | VR_LO | 1 | 1 | 1
0x00321032 | 0xFFFFFFFF | Requesting Physician | VR_PN | 1 | 1 | 1
0x00321033 | 0xFFFFFFFF | Requesting Service | VR_LO | 1 | 1 | 1
0x00321040 | 0xFFFFFFFF | Study Arrival Date | VR_DA | 1 | 1 | 1
0x00321041 | 0xFFFFFFFF | Study Arrival Time | VR_TM | 1 | 1 | 1
0x00321050 | 0xFFFFFFFF | Study Completion Date | VR_DA | 1 | 1 | 1
0x00321051 | 0xFFFFFFFF | Study Completion Time | VR_TM | 1 | 1 | 1
0x00321055 | 0xFFFFFFFF | Study Component Status ID | VR_CS | 1 | 1 | 1
0x00321060 | 0xFFFFFFFF | Requested Procedure Description | VR_LO | 1 | 1 | 1
0x00321064 | 0xFFFFFFFF | Requested Procedure Code Sequence | VR_SQ | 1 | 1 | 1
0x00321070 | 0xFFFFFFFF | Requested Contrast Agent | VR_LO | 1 | 1 | 1
0x00324000 | 0xFFFFFFFF | Study Comments | VR_LT | 1 | 1 | 1
0x00380004 | 0xFFFFFFFF | Referenced Patient Alias Sequence | VR_SQ | 1 | 1 | 1
0x00380008 | 0xFFFFFFFF | Visit Status ID | VR_CS | 1 | 1 | 1
0x00380010 | 0xFFFFFFFF | Admission ID | VR_LO | 1 | 1 | 1
0x00380011 | 0xFFFFFFFF | Issuer of Admission ID | VR_LO | 1 | 1 | 1
0x00380016 | 0xFFFFFFFF | Route of Admissions | VR_LO | 1 | 1 | 1
0x0038001A | 0xFFFFFFFF | Scheduled Admission Date | VR_DA | 1 | 1 | 1
0x0038001B | 0xFFFFFFFF | Scheduled Admission Time | VR_TM | 1 | 1 | 1
0x0038001C | 0xFFFFFFFF | Scheduled Discharge Date | VR_DA | 1 | 1 | 1
0x0038001D | 0xFFFFFFFF | Scheduled Discharge Time | VR_TM | 1 | 1 | 1
0x0038001E | 0xFFFFFFFF | Scheduled Patient Institution Residence | VR_LO | 1 | 1 | 1
0x00380020 | 0xFFFFFFFF | Admitting Date | VR_DA | 1 | 1 | 1
0x00380021 | 0xFFFFFFFF | Admitting Time | VR_TM | 1 | 1 | 1
0x00380030 | 0xFFFFFFFF | Discharge Date | VR_DA | 1 | 1 | 1
0x00380032 | 0xFFFFFFFF | Discharge Time | VR_TM | 1 | 1 | 1
0x00380040 | 0xFFFFFFFF | Discharge Diagnosis Description | VR_LO | 1 | 1 | 1
0x00380044 | 0xFFFFFFFF | Discharge Diagnosis Code Sequence | VR_SQ | 1 | 1 | 1
0x00380050 | 0xFFFFFFFF | Special Needs | VR_LO | 1 | 1 | 1
0x00380300 | 0xFFFFFFFF | Current Patient Location | VR_LO | 1 | 1 | 1
0x00380400 | 0xFFFFFFFF | Patient's Institution Residence | VR_LO | 1 | 1 | 1
0x00380500 | 0xFFFFFFFF | Patient State | VR_LO | 1 | 1 | 1
0x00384000 | 0xFFFFFFFF | Visit Comments | VR_LT | 1 | 1 | 1
0x003A0002 | 0xFFFFFFFF | Waveform Sequence | VR_SQ | 1 | 1 | 1
0x003A0005 | 0xFFFFFFFF | Waveform Number of Channels | VR_US | 1 | 1 | 1
0x003A0010 | 0xFFFFFFFF | Waveform Number of Samples | VR_UL | 1 | 1 | 1
0x003A001A | 0xFFFFFFFF | Sampling Frequency | VR_DS | 1 | 2 | 1
0x003A0020 | 0xFFFFFFFF | Group Label | VR_SH | 1 | 1 | 1
0x003A0103 | 0xFFFFFFFF | Waveform Sample Value Representation | VR_CS | 1 | 1 | 1
0x003A0122 | 0xFFFFFFFF | Waveform Padding Value | VR_OB | 1 | 1 | 1
0x003A0200 | 0xFFFFFFFF | Channel Definition | VR_SQ | 1 | 1 | 1
0x003A0202 | 0xFFFFFFFF | Waveform Channel Number | VR_IS | 1 | 1 | 1
0x003A0203 | 0xFFFFFFFF | Channel Label | VR_SH | 1 | 1 | 1
0x003A0205 | 0xFFFFFFFF | Channel Status | VR_CS | 1 | -1 | 1
0x003A0208 | 0xFFFFFFFF | Channel Source | VR_SQ | 1 | 1 | 1
0x003A0209 | 0xFFFFFFFF | Channel Source Modifiers | VR_SQ | 1 | 1 | 1
0x003A020A | 0xFFFFFFFF | Differential Channel Source | VR_SQ | 1 | 1 | 1
0x003A020B | 0xFFFFFFFF | Differential Channel Source Modifiers | VR_SQ | 1 | 1 | 1
0x003A0210 | 0xFFFFFFFF | Channel Sensitivity | VR_DS | 1 | 1 | 1
0x003A0211 | 0xFFFFFFFF | Channel Sensitivity Units | VR_SQ | 1 | 1 | 1
0x003A0212 | 0xFFFFFFFF | Channel Sensitivity Correction Factor | VR_DS | 1 | 1 | 1
0x003A0213 | 0xFFFFFFFF | Channel Baseline | VR_DS | 1 | 1 | 1
0x003A0214 | 0xFFFFFFFF | Channel Time Skew | VR_DS | 1 | 1 | 1
0x003A0215 | 0xFFFFFFFF | Channel Sample Skew | VR_DS | 1 | 1 | 1
0x003A0216 | 0xFFFFFFFF | Channel Minimum Value | VR_OB | 1 | 1 | 1
0x003A0217 | 0xFFFFFFFF | Channel Maximum Value | VR_OB | 1 | 1 | 1
0x003A0218 | 0xFFFFFFFF | Channel Offset | VR_DS | 1 | 1 | 1
0x003A021A | 0xFFFFFFFF | Bits Per Sample | VR_US | 1 | 1 | 1
0x003A0220 | 0xFFFFFFFF | Filter Low Frequency | VR_DS | 1 | 1 | 1
0x003A0221 | 0xFFFFFFFF | Filter High Frequency | VR_DS | 1 | 1 | 1
0x003A0222 | 0xFFFFFFFF | Notch Filter Frequency | VR_DS | 1 | 1 | 1
0x003A0223 | 0xFFFFFFFF | Notch Filter Bandwidth | VR_DS | 1 | 1 | 1
0x003A1000 | 0xFFFFFFFF | Waveform Data | VR_OB | 1 | 1 | 1
0x00400001 | 0xFFFFFFFF | Scheduled Station AE Title | VR_AE | 1 | -1 | 1
0x00400002 | 0xFFFFFFFF | Scheduled Procedure Step Start Date | VR_DA | 1 | 1 | 1
0x00400003 | 0xFFFFFFFF | Scheduled Procedure Step Start Time | VR_TM | 1 | 1 | 1
0x00400004 | 0xFFFFFFFF | Scheduled Procedure Step End Date | VR_DA | 1 | 1 | 1
0x00400005 | 0xFFFFFFFF | Scheduled Procedure Step End Time | VR_TM | 1 | 1 | 1
0x00400006 | 0xFFFFFFFF | Scheduled Performing Physician's Name | VR_PN | 1 | 1 | 1
0x00400007 | 0xFFFFFFFF | Scheduled Procedure Step Description | VR_LO | 1 | 1 | 1
0x00400008 | 0xFFFFFFFF | Scheduled Action Item Code Sequence | VR_SQ | 1 | 1 | 1
0x00400009 | 0xFFFFFFFF | Scheduled Procedure Step ID | VR_SH | 1 | 1 | 1
0x00400010 | 0xFFFFFFFF | Scheduled Station Name | VR_SH | 1 | -1 | 1
0x00400011 | 0xFFFFFFFF | Scheduled Procedure Step Location | VR_SH | 1 | 1 | 1
0x00400012 | 0xFFFFFFFF | Pre-Medication | VR_LO | 1 | 1 | 1
0x00400020 | 0xFFFFFFFF | Scheduled Procedure Step Status | VR_CS | 1 | 1 | 1
0x00400100 | 0xFFFFFFFF | Scheduled Procedure Step Sequence | VR_SQ | 1 | 1 | 1
0x00400220 | 0xFFFFFFFF | Referenced Standalone SOP Instance Sequence | VR_SQ | 1 | 1 | 1
0x00400241 | 0xFFFFFFFF | Performed Station AE Title | VR_AE | 1 | 1 | 1
0x00400242 | 0xFFFFFFFF | Performed Station Name | VR_SH | 1 | 1 | 1
0x00400243 | 0xFFFFFFFF | Performed Location | VR_SH | 1 | 1 | 1
0x00400244 | 0xFFFFFFFF | Performed Procedure Step Start Date | VR_DA | 1 | 1 | 1
0x00400245 | 0xFFFFFFFF | Performed Procedure Step Start Time | VR_TM | 1 | 1 | 1
0x00400250 | 0xFFFFFFFF | Performed Procedure Step End Date | VR_DA | 1 | 1 | 1
0x00400251 | 0xFFFFFFFF | Performed Procedure Step End Time | VR_TM | 1 | 1 | 1
0x00400252 | 0xFFFFFFFF | Performed Procedure Step Status | VR_CS | 1 | 1 | 1
0x00400253 | 0xFFFFFFFF | Performed Procedure Step ID | VR_CS | 1 | 1 | 1
0x00400254 | 0xFFFFFFFF | Performed Procedure Step Description | VR_LO | 1 | 1 | 1
0x00400255 | 0xFFFFFFFF | Performed Procedure Type Description | VR_LO | 1 | 1 | 1
0x00400260 | 0xFFFFFFFF | Performed Action Item Sequence | VR_SQ | 1 | 1 | 1
0x00400270 | 0xFFFFFFFF | Scheduled Step Attributes Sequence | VR_SQ | 1 | 1 | 1
0x00400275 | 0xFFFFFFFF | Request Attributes Sequence | VR_SQ | 1 | 1 | 1
0x00400280 | 0xFFFFFFFF | Comments on the Performed Procedure Steps | VR_ST | 1 | 1 | 1
0x00400293 | 0xFFFFFFFF | Quantity Sequence | VR_SQ | 1 | 1 | 1
0x00400294 | 0xFFFFFFFF | Quantity | VR_DS | 1 | 1 | 1
0x00400295 | 0xFFFFFFFF | Measuring Units Sequence | VR_SQ | 1 | 1 | 1
0x00400296 | 0xFFFFFFFF | Billing Item Sequence | VR_SQ | 1 | 1 | 1
0x00400300 | 0xFFFFFFFF | Total Time of Fluoroscopy | VR_US | 1 | 1 | 1
0x00400301 | 0xFFFFFFFF | Total Number of Exposures | VR_US | 1 | 1 | 1
0x00400302 | 0xFFFFFFFF | Entrance Dose | VR_US | 1 | 1 | 1
0x00400303 | 0xFFFFFFFF | Exposed Area | VR_US | 1 | 2 | 1
0x00400306 | 0xFFFFFFFF | Distance Source to Entrance | VR_DS | 1 | 1 | 1
0x00400307 | 0xFFFFFFFF | Distance Source to Support | VR_DS | 1 | 1 | 1
0x00400310 | 0xFFFFFFFF | Comments on Radiation Dose | VR_ST | 1 | 1 | 1
0x00400312 | 0xFFFFFFFF | X-Ray Output | VR_DS | 1 | 1 | 1
0x00400314 | 0xFFFFFFFF | Half Value Layer | VR_DS | 1 | 1 | 1
0x00400316 | 0xFFFFFFFF | Organ Dose | VR_DS | 1 | 1 | 1
0x00400318 | 0xFFFFFFFF | Organ Exposed | VR_CS | 1 | 1 | 1
0x00400320 | 0xFFFFFFFF | Billing Procedure Step Sequence | VR_SQ | 1 | 1 | 1
0x00400321 | 0xFFFFFFFF | Film Consumption Sequence | VR_SQ | 1 | 1 | 1
0x00400324 | 0xFFFFFFFF | Billing Supplies and Devices Sequence | VR_SQ | 1 | 1 | 1
0x00400330 | 0xFFFFFFFF | Referenced Procedure Step Sequence | VR_SQ | 1 | 1 | 1
0x00400340 | 0xFFFFFFFF | Performed Series Sequence | VR_SQ | 1 | 1 | 1
0x00400400 | 0xFFFFFFFF | Comments on the Scheduled Procedure Step | VR_LT | 1 | 1 | 1
0x0040050A | 0xFFFFFFFF | Specimen Accession Number | VR_LO | 1 | 1 | 1
0x00400550 | 0xFFFFFFFF | Specimen Sequence | VR_SQ | 1 | 1 | 1
0x00400551 | 0xFFFFFFFF | Specimen Identifier | VR_LO | 1 | 1 | 1
0x00400552 | 0xFFFFFFFF | Specimen Description Sequence | VR_SQ | 1 | 1 | 1
0x00400553 | 0xFFFFFFFF | Specimen Description | VR_ST | 1 | 1 | 1
0x00400555 | 0xFFFFFFFF | Acquisition Context Sequence | VR_SQ | 1 | 1 | 1
0x00400556 | 0xFFFFFFFF | Acquisition Context Description | VR_ST | 1 | 1 | 1
0x0040059A | 0xFFFFFFFF | Specimen Type Code Sequence | VR_SQ | 1 | 1 | 1
0x004006FA | 0xFFFFFFFF | Slide Identifier | VR_LO | 1 | 1 | 1
0x0040071A | 0xFFFFFFFF | Image Center Point Coordinates Sequence | VR_SQ | 1 | 1 | 1
0x0040072A | 0xFFFFFFFF | X Offset In Slide Coordinate System | VR_DS | 1 | 1 | 1
0x0040073A | 0xFFFFFFFF | Y Offset In Slide Coordinate System | VR_DS | 1 | 1 | 1
0x0040074A | 0xFFFFFFFF | Z Offset In Slide Coordinate System | VR_DS | 1 | 1 | 1
0x004008D8 | 0xFFFFFFFF | Pixel Spacing Sequence | VR_SQ | 1 | 1 | 1
0x004008DA | 0xFFFFFFFF | Coordinate System Axis Code Sequence | VR_SQ | 1 | 1 | 1
0x004008EA | 0xFFFFFFFF | Measurement Units Code Sequence | VR_SQ | 1 | 1 | 1
0x004009F8 | 0xFFFFFFFF | Vital Stain Code Sequence | VR_SQ | 1 | 1 | 1
0x00401001 | 0xFFFFFFFF | Requested Procedure ID | VR_SH | 1 | 1 | 1
0x00401002 | 0xFFFFFFFF | Reason for the Requested Procedure | VR_LO | 1 | 1 | 1
0x00401003 | 0xFFFFFFFF | Requested Procedure Priority | VR_SH | 1 | 1 | 1
0x00401004 | 0xFFFFFFFF | Patient Transport Arrangements | VR_LO | 1 | 1 | 1
0x00401005 | 0xFFFFFFFF | Requested Procedure Location | VR_LO | 1 | 1 | 1
0x00401006 | 0xFFFFFFFF | Placer Order Number / Procedure (Retired) | VR_SH | 1 | 1 | 1
0x00401007 | 0xFFFFFFFF | Filler Order Number / Procedure (Retired) | VR_SH | 1 | 1 | 1
0x00401008 | 0xFFFFFFFF | Confidentiality Code | VR_LO | 1 | 1 | 1
0x00401009 | 0xFFFFFFFF | Reporting Priority | VR_SH | 1 | 1 | 1
0x00401010 | 0xFFFFFFFF | Names of Intended Recipients of Results | VR_PN | 1 | -1 | 1
0x00401400 | 0xFFFFFFFF | Requested Procedure Comments | VR_LT | 1 | 1 | 1
0x00402001 | 0xFFFFFFFF | Reason for the Imaging Service Request | VR_LO | 1 | 1 | 1
0x00402004 | 0xFFFFFFFF | Issue Date of Imaging Service Request | VR_DA | 1 | 1 | 1
0x00402005 | 0xFFFFFFFF | Issue Time of Imaging Service Request | VR_TM | 1 | 1 | 1
0x00402006 | 0xFFFFFFFF | Placer Order Number / Imaging Service Request (Retired) | VR_SH | 1 | 1 | 1
0x00402007 | 0xFFFFFFFF | Filler Order Number / Imaging Service Request (Retired) | VR_SH | 1 | 1 | 1
0x00402008 | 0xFFFFFFFF | Order Entered By | VR_PN | 1 | 1 | 1
0x00402009 | 0xFFFFFFFF | Order Enterer's Location | VR_SH | 1 | 1 | 1
0x00402010 | 0xFFFFFFFF | Order Callback Phone Number | VR_SH | 1 | 1 | 1
0x00402016 | 0xFFFFFFFF | Placer Order Number / Imaging Service Request | VR_LO | 1 | 1 | 1
0x00402017 | 0xFFFFFFFF | Filler Order Number / Imaging Service Request | VR_LO | 1 | 1 | 1
0x00402400 | 0xFFFFFFFF | Imaging Service Request Comments | VR_LT | 1 | 1 | 1
0x00403001 | 0xFFFFFFFF | Confidentiality Constraint on Patient Data Description | VR_LO | 1 | 1 | 1
0x0040A007 | 0xFFFFFFFF | Findings Flag | VR_CS | 1 | 1 | 1
0x0040A020 | 0xFFFFFFFF | Findings Sequence | VR_SQ | 1 | 1 | 1
0x0040A021 | 0xFFFFFFFF | Findings Group UID | VR_UI | 1 | 1 | 1
0x0040A022 | 0xFFFFFFFF | Referenced Findings Group UID | VR_UI | 1 | 1 | 1
0x0040A023 | 0xFFFFFFFF | Findings Group Recording Date | VR_DA | 1 | 1 | 1
0x0040A024 | 0xFFFFFFFF | Findings Group Recording Time | VR_TM | 1 | 1 | 1
0x0040A026 | 0xFFFFFFFF | Findings Source Category Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A027 | 0xFFFFFFFF | Documenting Organization | VR_LO | 1 | 1 | 1
0x0040A028 | 0xFFFFFFFF | Documenting Organization Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A032 | 0xFFFFFFFF | History Reliability Qualifier Description | VR_LO | 1 | 1 | 1
0x0040A043 | 0xFFFFFFFF | Concept Name Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A047 | 0xFFFFFFFF | Measurement Precision Description | VR_LO | 1 | 1 | 1
0x0040A057 | 0xFFFFFFFF | Urgency or Priority Alerts | VR_CS | 1 | -1 | 1
0x0040A060 | 0xFFFFFFFF | Sequencing Indicator | VR_LO | 1 | 1 | 1
0x0040A066 | 0xFFFFFFFF | Document Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A067 | 0xFFFFFFFF | Document Author | VR_PN | 1 | 1 | 1
0x0040A068 | 0xFFFFFFFF | Document Author Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A070 | 0xFFFFFFFF | Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A073 | 0xFFFFFFFF | Object String Identifier | VR_LO | 1 | -1 | 1
0x0040A074 | 0xFFFFFFFF | Object Binary Identifier | VR_OB | 1 | 1 | 1
0x0040A075 | 0xFFFFFFFF | Documenting Observer | VR_PN | 1 | 1 | 1
0x0040A076 | 0xFFFFFFFF | Documenting Observer Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A078 | 0xFFFFFFFF | Observation Subject Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A080 | 0xFFFFFFFF | Person Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A085 | 0xFFFFFFFF | Procedure Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A088 | 0xFFFFFFFF | Object Directory String Identifier | VR_LO | 1 | 1 | 1
0x0040A089 | 0xFFFFFFFF | Object Directory Binary Identifier | VR_OB | 1 | 1 | 1
0x0040A090 | 0xFFFFFFFF | History Reliability Qualifier | VR_CS | 1 | 1 | 1
0x0040A0A0 | 0xFFFFFFFF | Referenced Type of Data | VR_CS | 1 | 1 | 1
0x0040A0B0 | 0xFFFFFFFF | Referenced Waveform Channels | VR_US | 2 | -1 | 2
0x0040A110 | 0xFFFFFFFF | Date of Document or Verbal Transaction | VR_DA | 1 | 1 | 1
0x0040A112 | 0xFFFFFFFF | Time of Document Creation or Verbal Transaction | VR_TM | 1 | 1 | 1
0x0040A121 | 0xFFFFFFFF | Date | VR_DA | 1 | 1 | 1
0x0040A122 | 0xFFFFFFFF | Time | VR_TM | 1 | 1 | 1
0x0040A123 | 0xFFFFFFFF | Person Name | VR_PN | 1 | 1 | 1
0x0040A124 | 0xFFFFFFFF | Referenced Person Sequence | VR_SQ | 1 | 1 | 1
0x0040A125 | 0xFFFFFFFF | Report Status ID | VR_CS | 2 | 2 | 2
0x0040A130 | 0xFFFFFFFF | Temporal Range Type | VR_CS | 1 | 1 | 1
0x0040A132 | 0xFFFFFFFF | Referenced Sample Offsets | VR_UL | 1 | -1 | 1
0x0040A136 | 0xFFFFFFFF | Referenced Frame Numbers | VR_US | 1 | -1 | 1
0x0040A138 | 0xFFFFFFFF | Referenced Time Offsets | VR_DS | 1 | -1 | 1
0x0040A13A | 0xFFFFFFFF | Referenced Datetime | VR_DT | 1 | -1 | 1
0x0040A160 | 0xFFFFFFFF | Text Value | VR_UT | 1 | 1 | 1
0x0040A167 | 0xFFFFFFFF | Observation Category Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A168 | 0xFFFFFFFF | Concept Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A16A | 0xFFFFFFFF | Bibliographic Citation | VR_ST | 1 | 1 | 1
0x0040A170 | 0xFFFFFFFF | Observation Class | VR_CS | 1 | 1 | 1
0x0040A171 | 0xFFFFFFFF | Observation UID | VR_UI | 1 | 1 | 1
0x0040A172 | 0xFFFFFFFF | Referenced Observation UID | VR_UI | 1 | 1 | 1
0x0040A173 | 0xFFFFFFFF | Referenced Observation Class | VR_CS | 1 | 1 | 1
0x0040A174 | 0xFFFFFFFF | Referenced Object Observation Class | VR_CS | 1 | 1 | 1
0x0040A180 | 0xFFFFFFFF | Annotation Group Number | VR_US | 1 | 1 | 1
0x0040A192 | 0xFFFFFFFF | Observation Date | VR_DA | 1 | 1 | 1
0x0040A193 | 0xFFFFFFFF | Observation Time | VR_TM | 1 | 1 | 1
0x0040A194 | 0xFFFFFFFF | Measurement Automation | VR_CS | 1 | 1 | 1
0x0040A195 | 0xFFFFFFFF | Concept Name Code Sequence Modifier | VR_SQ | 1 | 1 | 1
0x0040A224 | 0xFFFFFFFF | Identification Description | VR_ST | 1 | 1 | 1
0x0040A290 | 0xFFFFFFFF | Coordinates Set Geometric Type | VR_CS | 1 | 1 | 1
0x0040A296 | 0xFFFFFFFF | Algorithm Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A297 | 0xFFFFFFFF | Algorithm Description | VR_ST | 1 | 1 | 1
0x0040A29A | 0xFFFFFFFF | Pixel Coordinates Set | VR_SL | 2 | -1 | 2
0x0040A300 | 0xFFFFFFFF | Measured Value Sequence | VR_SQ | 1 | 1 | 1
0x0040A307 | 0xFFFFFFFF | Current Observer | VR_PN | 1 | 1 | 1
0x0040A30A | 0xFFFFFFFF | Numeric Value | VR_DS | 1 | -1 | 1
0x0040A313 | 0xFFFFFFFF | Referenced Accession Sequence | VR_SQ | 1 | 1 | 1
0x0040A33A | 0xFFFFFFFF | Report Status Comment | VR_ST | 1 | 1 | 1
0x0040A340 | 0xFFFFFFFF | Procedure Context Sequence | VR_SQ | 1 | 1 | 1
0x0040A352 | 0xFFFFFFFF | Verbal Source | VR_PN | 1 | 1 | 1
0x0040A353 | 0xFFFFFFFF | Address | VR_ST | 1 | 1 | 1
0x0040A354 | 0xFFFFFFFF | Telephone Number | VR_LO | 1 | 1 | 1
0x0040A358 | 0xFFFFFFFF | Verbal Source Identifier Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A380 | 0xFFFFFFFF | Report Detail Sequence | VR_SQ | 1 | 1 | 1
0x0040A402 | 0xFFFFFFFF | Observation Subject UID | VR_UI | 1 | 1 | 1
0x0040A403 | 0xFFFFFFFF | Observation Subject Class | VR_CS | 1 | 1 | 1
0x0040A404 | 0xFFFFFFFF | Observation Subject Type Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A600 | 0xFFFFFFFF | Observation Subject Context Flag | VR_CS | 1 | 1 | 1
0x0040A601 | 0xFFFFFFFF | Observer Context Flag | VR_CS | 1 | 1 | 1
0x0040A603 | 0xFFFFFFFF | Procedure Context Flag | VR_CS | 1 | 1 | 1
0x0040A730 | 0xFFFFFFFF | Observations Sequence | VR_SQ | 1 | 1 | 1
0x0040A731 | 0xFFFFFFFF | Relationship Sequence | VR_SQ | 1 | 1 | 1
0x0040A732 | 0xFFFFFFFF | Relationship Type Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A744 | 0xFFFFFFFF | Language Code Sequence | VR_SQ | 1 | 1 | 1
0x0040A992 | 0xFFFFFFFF | Uniform Resource Locator | VR_ST | 1 | 1 | 1
0x0040B020 | 0xFFFFFFFF | Annotation Sequence | VR_SQ | 1 | 1 | 1
0x0040DB73 | 0xFFFFFFFF | Relationship Type Code Sequence Modifier | VR_SQ | 1 | 1 | 1
0x00500004 | 0xFFFFFFFF | Calibration Image | VR_CS | 1 | 1 | 1
0x00500010 | 0xFFFFFFFF | Device Sequence | VR_SQ | 1 | 1 | 1
0x00500014 | 0xFFFFFFFF | Device Length | VR_DS | 1 | 1 | 1
0x00500016 | 0xFFFFFFFF | Device Diameter | VR_DS | 1 | 1 | 1
0x00500017 | 0xFFFFFFFF | Device Diameter Units | VR_CS | 1 | 1 | 1
0x00500018 | 0xFFFFFFFF | Device Volume | VR_DS | 1 | 1 | 1
0x00500019 | 0xFFFFFFFF | Inter-marker Distance | VR_DS | 1 | 1 | 1
0x00500020 | 0xFFFFFFFF | Device Description | VR_LO | 1 | 1 | 1
0x00500030 | 0xFFFFFFFF | CodedInterventionDeviceSequence | VR_SQ | 1 | 1 | 1
0x00540010 | 0xFFFFFFFF | Energy Window Vector | VR_US | 1 | -1 | 1
0x00540011 | 0xFFFFFFFF | Number of Energy Windows | VR_US | 1 | 1 | 1
0x00540012 | 0xFFFFFFFF | Energy Window Information Sequence | VR_SQ | 1 | 1 | 1
0x00540013 | 0xFFFFFFFF | Energy Window Range Sequence | VR_SQ | 1 | 1 | 1
0x00540014 | 0xFFFFFFFF | Energy Window Lower Limit | VR_DS | 1 | 1 | 1
0x00540015 | 0xFFFFFFFF | Energy Window Upper Limit | VR_DS | 1 | 1 | 1
0x00540016 | 0xFFFFFFFF | Radiopharmaceutical Information Sequence | VR_SQ | 1 | 1 | 1
0x00540017 | 0xFFFFFFFF | Residual Syringe Counts | VR_IS | 1 | 1 | 1
0x00540018 | 0xFFFFFFFF | Energy Window Name | VR_SH | 1 | 1 | 1
0x00540020 | 0xFFFFFFFF | Detector Vector | VR_US | 1 | -1 | 1
0x00540021 | 0xFFFFFFFF | Number of Detectors | VR_US | 1 | 1 | 1
0x00540022 | 0xFFFFFFFF | Detector Information Sequence | VR_SQ | 1 | 1 | 1
0x00540030 | 0xFFFFFFFF | Phase Vector | VR_US | 1 | -1 | 1
0x00540031 | 0xFFFFFFFF | Number of Phases | VR_US | 1 | 1 | 1
0x00540032 | 0xFFFFFFFF | Phase Information Sequence | VR_SQ | 1 | 1 | 1
0x00540033 | 0xFFFFFFFF | Number of Frames in Phase | VR_US | 1 | 1 | 1
0x00540036 | 0xFFFFFFFF | Phase Delay | VR_IS | 1 | 1 | 1
0x00540038 | 0xFFFFFFFF | Pause Between Frames | VR_IS | 1 | 1 | 1
0x00540050 | 0xFFFFFFFF | Rotation Vector | VR_US | 1 | -1 | 1
0x00540051 | 0xFFFFFFFF | Number of Rotations | VR_US | 1 | 1 | 1
0x00540052 | 0xFFFFFFFF | Rotation Information Sequence | VR_SQ | 1 | 1 | 1
0x00540053 | 0xFFFFFFFF | Number of Frames in Rotation | VR_US | 1 | 1 | 1
0x00540060 | 0xFFFFFFFF | R-R Interval Vector | VR_US | 1 | -1 | 1
0x00540061 | 0xFFFFFFFF | Number of R-R Intervals | VR_US | 1 | 1 | 1
0x00540062 | 0xFFFFFFFF | Gated Information Sequence | VR_SQ | 1 | 1 | 1
0x00540063 | 0xFFFFFFFF | Data Information Sequence | VR_SQ | 1 | 1 | 1
0x00540070 | 0xFFFFFFFF | Time Slot Vector | VR_US | 1 | -1 | 1
0x00540071 | 0xFFFFFFFF | Number of Time Slots | VR_US | 1 | 1 | 1
0x00540072 | 0xFFFFFFFF | Time Slot Information Sequence | VR_SQ | 1 | 1 | 1
0x00540073 | 0xFFFFFFFF | Time Slot Time | VR_DS | 1 | 1 | 1
0x00540080 | 0xFFFFFFFF | Slice Vector | VR_US | 1 | -1 | 1
0x00540081 | 0xFFFFFFFF | Number of Slices | VR_US | 1 | 1 | 1
0x00540090 | 0xFFFFFFFF | Angular View Vector | VR_US | 1 | -1 | 1
0x00540100 | 0xFFFFFFFF | Time Slice Vector | VR_US | 1 | -1 | 1
0x00540101 | 0xFFFFFFFF | Number of Time Slices | VR_US | 1 | 1 | 1
0x00540200 | 0xFFFFFFFF | Start Angle | VR_DS | 1 | 1 | 1
0x00540202 | 0xFFFFFFFF | Type of Detector Motion | VR_CS | 1 | 1 | 1
0x00540210 | 0xFFFFFFFF | Trigger Vector | VR_IS | 1 | -1 | 1
0x00540211 | 0xFFFFFFFF | Number of Triggers in Phase | VR_US | 1 | 1 | 1
0x00540220 | 0xFFFFFFFF | View Code Sequence | VR_SQ | 1 | 1 | 1
0x00540222 | 0xFFFFFFFF | View Modifier Code Sequence | VR_SQ | 1 | 1 | 1
0x00540300 | 0xFFFFFFFF | Radionuclide Code Sequence | VR_SQ | 1 | 1 | 1
0x00540302 | 0xFFFFFFFF | Administration Route Code Sequence | VR_SQ | 1 | 1 | 1
0x00540304 | 0xFFFFFFFF | Radiopharmaceutical Code Sequence | VR_SQ | 1 | 1 | 1
0x00540306 | 0xFFFFFFFF | Calibration Data Sequence | VR_SQ | 1 | 1 | 1
0x00540308 | 0xFFFFFFFF | Energy Window Number | VR_US | 1 | 1 | 1
0x00540400 | 0xFFFFFFFF | Image ID | VR_SH | 1 | 1 | 1
0x00540410 | 0xFFFFFFFF | Patient Orientation Code Sequence | VR_SQ | 1 | 1 | 1
0x00540412 | 0xFFFFFFFF | Patient Orientation Modifier Code Sequence | VR_SQ | 1 | 1 | 1
0x00540414 | 0xFFFFFFFF | Patient Gantry Relationship Code Sequence | VR_SQ | 1 | 1 | 1
0x00541000 | 0xFFFFFFFF | Series Type | VR_CS | 2 | 2 | 2
0x00541001 | 0xFFFFFFFF | Units | VR_CS | 1 | 1 | 1
0x00541002 | 0xFFFFFFFF | Counts Source | VR_CS | 1 | 1 | 1
0x00541004 | 0xFFFFFFFF | Reprojection Method | VR_CS | 1 | 1 | 1
0x00541100 | 0xFFFFFFFF | Randoms Correction Method | VR_CS | 1 | 1 | 1
0x00541101 | 0xFFFFFFFF | Attenuation Correction Method | VR_LO | 1 | 1 | 1
0x00541102 | 0xFFFFFFFF | Decay Correction | VR_CS | 1 | 1 | 1
0x00541103 | 0xFFFFFFFF | Reconstruction Method | VR_LO | 1 | 1 | 1
0x00541104 | 0xFFFFFFFF | Detector Lines of Response Used | VR_LO | 1 | 1 | 1
0x00541105 | 0xFFFFFFFF | Scatter Correction Method | VR_LO | 1 | 1 | 1
0x00541200 | 0xFFFFFFFF | Axial Acceptance | VR_DS | 1 | 1 | 1
0x00541201 | 0xFFFFFFFF | Axial Mash | VR_IS | 2 | 2 | 2
0x00541202 | 0xFFFFFFFF | Transverse Mash | VR_IS | 1 | 1 | 1
0x00541203 | 0xFFFFFFFF | Detector Element Size | VR_DS | 2 | 2 | 2
0x00541210 | 0xFFFFFFFF | Coincidence Window Width | VR_DS | 1 | 1 | 1
0x00541220 | 0xFFFFFFFF | Secondary Counts Type | VR_CS | 1 | -1 | 1
0x00541300 | 0xFFFFFFFF | Frame Reference Time | VR_DS | 1 | 1 | 1
0x00541310 | 0xFFFFFFFF | Primary (Prompts) Counts Accumulated | VR_IS | 1 | 1 | 1
0x00541311 | 0xFFFFFFFF | Secondary Counts Accumulated | VR_IS | 1 | -1 | 1
0x00541320 | 0xFFFFFFFF | Slice Sensitivity Factor | VR_DS | 1 | 1 | 1
0x00541321 | 0xFFFFFFFF | Decay Factor | VR_DS | 1 | 1 | 1
0x00541322 | 0xFFFFFFFF | Dose Calibration Factor | VR_DS | 1 | 1 | 1
0x00541323 | 0xFFFFFFFF | Scatter Fraction Factor | VR_DS | 1 | 1 | 1
0x00541324 | 0xFFFFFFFF | Dead Time Factor | VR_DS | 1 | 1 | 1
0x00541330 | 0xFFFFFFFF | Image Index | VR_US | 1 | 1 | 1
0x00541400 | 0xFFFFFFFF | Counts Included | VR_CS | 1 | -1 | 1
0x00541401 | 0xFFFFFFFF | Dead Time Correction Flag | VR_CS | 1 | 1 | 1
0x00603000 | 0xFFFFFFFF | Histogram Sequence | VR_SQ | 1 | 1 | 1
0x00603002 | 0xFFFFFFFF | Histogram Number of Bins | VR_US | 1 | 1 | 1
0x00603004 | 0xFFFFFFFF | Histogram First Bin Value | VR_US | 1 | 1 | 1
0x00603006 | 0xFFFFFFFF | Histogram Last Bin Value | VR_US | 1 | 1 | 1
0x00603008 | 0xFFFFFFFF | Histogram Bin Width | VR_US | 1 | 1 | 1
0x00603010 | 0xFFFFFFFF | Histogram Explanation | VR_LO | 1 | 1 | 1
0x00603020 | 0xFFFFFFFF | Histogram Data | VR_UL | 1 | -1 | 1
0x00880130 | 0xFFFFFFFF | Storage Media File-set ID | VR_SH | 1 | 1 | 1
0x00880140 | 0xFFFFFFFF | Storage Media File-set UID | VR_UI | 1 | 1 | 1
0x00880200 | 0xFFFFFFFF | Icon Image Sequence | VR_SQ | 1 | 1 | 1
0x00880904 | 0xFFFFFFFF | Topic Title | VR_LO | 1 | 1 | 1
0x00880906 | 0xFFFFFFFF | Topic Subject | VR_ST | 1 | 1 | 1
0x00880910 | 0xFFFFFFFF | Topic Author | VR_LO | 1 | 1 | 1
0x00880912 | 0xFFFFFFFF | Topic Key Words | VR_LO | 1 | 32 | 1
0x10000001 | 0xFFFFFF0F | Run Length Triplet | VR_US | 3 | 3 | 3
0x10000002 | 0xFFFFFF0F | Huffman Table Size | VR_US | 1 | 1 | 1
0x10000003 | 0xFFFFFF0F | Huffman Table Triplet | VR_US | 3 | 3 | 3
0x10000004 | 0xFFFFFF0F | Shift Table Size | VR_US | 1 | 1 | 1
0x10000005 | 0xFFFFFF0F | Shift Table Triplet | VR_US | 3 | 3 | 3
0x20000010 | 0xFFFFFFFF | Number of Copies | VR_IS | 1 | 1 | 1
0x2000001E | 0xFFFFFFFF | Printer Configuration Sequence | VR_SQ | 1 | 1 | 1
0x20000020 | 0xFFFFFFFF | Print Priority | VR_CS | 1 | 1 | 1
0x20000030 | 0xFFFFFFFF | Medium Type | VR_CS | 1 | 1 | 1
0x20000040 | 0xFFFFFFFF | Film Destination | VR_CS | 1 | 1 | 1
0x20000050 | 0xFFFFFFFF | Film Session Label | VR_LO | 1 | 1 | 1
0x20000060 | 0xFFFFFFFF | Memory Allocation | VR_IS | 1 | 1 | 1
0x20000061 | 0xFFFFFFFF | Maximum Memory Allocation | VR_IS | 1 | 1 | 1
0x20000062 | 0xFFFFFFFF | Color Image Printing Flag | VR_CS | 1 | 1 | 1
0x20000063 | 0xFFFFFFFF | Collation Flag | VR_CS | 1 | 1 | 1
0x20000065 | 0xFFFFFFFF | Annotation Flag | VR_CS | 1 | 1 | 1
0x20000067 | 0xFFFFFFFF | Image Overlay Flag | VR_CS | 1 | 1 | 1
0x20000069 | 0xFFFFFFFF | Presentation LUT Flag | VR_CS | 1 | 1 | 1
0x2000006A | 0xFFFFFFFF | Image Box Presentation LUT Flag | VR_CS | 1 | 1 | 1
0x200000A0 | 0xFFFFFFFF | Memory Bit Depth | VR_US | 1 | 1 | 1
0x200000A1 | 0xFFFFFFFF | Printing Bit Depth | VR_US | 1 | 1 | 1
0x200000A2 | 0xFFFFFFFF | Media Installed Sequence | VR_SQ | 1 | 1 | 1
0x200000A4 | 0xFFFFFFFF | Other Media Available Sequence | VR_SQ | 1 | 1 | 1
0x200000A8 | 0xFFFFFFFF | Supported Image Display Formats Sequence | VR_SQ | 1 | 1 | 1
0x20000500 | 0xFFFFFFFF | Referenced Film Box Sequence | VR_SQ | 1 | 1 | 1
0x20000510 | 0xFFFFFFFF | Referenced Stored Print Sequence | VR_SQ | 1 | 1 | 1
0x20100010 | 0xFFFFFFFF | Image Display Format | VR_ST | 1 | 1 | 1
0x20100030 | 0xFFFFFFFF | Annotation Display Format ID | VR_CS | 1 | 1 | 1
0x20100040 | 0xFFFFFFFF | Film Orientation | VR_CS | 1 | 1 | 1
0x20100050 | 0xFFFFFFFF | Film Size ID | VR_CS | 1 | 1 | 1
0x20100052 | 0xFFFFFFFF | Printer Resolution ID | VR_CS | 1 | 1 | 1
0x20100054 | 0xFFFFFFFF | Default Printer Resolution ID | VR_CS | 1 | 1 | 1
0x20100060 | 0xFFFFFFFF | Magnification Type | VR_CS | 1 | 1 | 1
0x20100080 | 0xFFFFFFFF | Smoothing Type | VR_CS | 1 | 1 | 1
0x201000A6 | 0xFFFFFFFF | Default Magnification Type | VR_CS | 1 | 1 | 1
0x201000A7 | 0xFFFFFFFF | Other Magnification Types Available | VR_CS | 1 | -1 | 1
0x201000A8 | 0xFFFFFFFF | Default Smoothing Type | VR_CS | 1 | 1 | 1
0x201000A9 | 0xFFFFFFFF | Other Smoothing Types Available | VR_CS | 1 | -1 | 1
0x20100100 | 0xFFFFFFFF | Border Density | VR_CS | 1 | 1 | 1
0x20100110 | 0xFFFFFFFF | Empty Image Density | VR_CS | 1 | 1 | 1
0x20100120 | 0xFFFFFFFF | Min Density | VR_US | 1 | 1 | 1
0x20100130 | 0xFFFFFFFF | Max Density | VR_US | 1 | 1 | 1
0x20100140 | 0xFFFFFFFF | Trim | VR_CS | 1 | 1 | 1
0x20100150 | 0xFFFFFFFF | Configuration Information | VR_ST | 1 | 1 | 1
0x20100152 | 0xFFFFFFFF | Configuration Information Description | VR_LT | 1 | 1 | 1
0x20100154 | 0xFFFFFFFF | Maximum Collated Films | VR_IS | 1 | 1 | 1
0x2010015E | 0xFFFFFFFF | Illumination | VR_US | 1 | 1 | 1
0x20100160 | 0xFFFFFFFF | Reflected Ambient Light | VR_US | 1 | 1 | 1
0x20100376 | 0xFFFFFFFF | Printer Pixel Spacing | VR_DS | 2 | 2 | 2
0x20100500 | 0xFFFFFFFF | Referenced Film Session Sequence | VR_SQ | 1 | 1 | 1
0x20100510 | 0xFFFFFFFF | Referenced Image Box Sequence | VR_SQ | 1 | 1 | 1
0x20100520 | 0xFFFFFFFF | Referenced Basic Annotation Box Sequence | VR_SQ | 1 | 1 | 1
0x20200010 | 0xFFFFFFFF | Image Position | VR_US | 1 | 1 | 1
0x20200020 | 0xFFFFFFFF | Polarity | VR_CS | 1 | 1 | 1
0x20200030 | 0xFFFFFFFF | Requested Image Size | VR_DS | 1 | 1 | 1
0x20200040 | 0xFFFFFFFF | Requested Decimate/Crop Behavior | VR_CS | 1 | 1 | 1
0x20200050 | 0xFFFFFFFF | Requested Resolution ID | VR_CS | 1 | 1 | 1
0x202000A0 | 0xFFFFFFFF | Requested Image Size Flag | VR_CS | 1 | 1 | 1
0x202000A2 | 0xFFFFFFFF | Decimate/Crop Result | VR_CS | 1 | 1 | 1
0x20200110 | 0xFFFFFFFF | Basic Grayscale Image Sequence | VR_SQ | 1 | 1 | 1
0x20200111 | 0xFFFFFFFF | Basic Color Image Sequence | VR_SQ | 1 | 1 | 1
0x20200130 | 0xFFFFFFFF | Referenced Image Overlay Box Sequence (Retired) | VR_SQ | 1 | 1 | 1
0x20200140 | 0xFFFFFFFF | Referenced VOI LUT Box Sequence (Retired) | VR_SQ | 1 | 1 | 1
0x20300010 | 0xFFFFFFFF | Annotation Position | VR_US | 1 | 1 | 1
0x20300020 | 0xFFFFFFFF | Text String | VR_LO | 1 | 1 | 1
0x20400010 | 0xFFFFFFFF | Referenced Overlay Plane Sequence | VR_SQ | 1 | 1 | 1
0x20400011 | 0xFFFFFFFF | Referenced Overlay Plane Groups | VR_US | 1 | 99 | 1
0x20400020 | 0xFFFFFFFF | Overlay Pixel Data Sequence | VR_SQ | 1 | 1 | 1
0x20400060 | 0xFFFFFFFF | Overlay Magnification Type | VR_CS | 1 | 1 | 1
0x20400070 | 0xFFFFFFFF | Overlay Smoothing Type | VR_CS | 1 | 1 | 1
0x20400072 | 0xFFFFFFFF | Overlay or Image Magnification | VR_CS | 1 | 1 | 1
0x20400074 | 0xFFFFFFFF | Magnify to Number of Columns | VR_US | 1 | 1 | 1
0x20400080 | 0xFFFFFFFF | Overlay Foreground Density | VR_CS | 1 | 1 | 1
0x20400082 | 0xFFFFFFFF | Overlay Background Density | VR_CS | 1 | 1 | 1
0x20400090 | 0xFFFFFFFF | Overlay Mode (Retired) | VR_CS | 1 | 1 | 1
0x20400100 | 0xFFFFFFFF | Threshold Density (Retired) | VR_CS | 1 | 1 | 1
0x20400500 | 0xFFFFFFFF | Referenced Image Box Sequence (Retired) | VR_SQ | 1 | 1 | 1
0x20500010 | 0xFFFFFFFF | Presentation LUT Sequence | VR_SQ | 1 | 1 | 1
0x20500020 | 0xFFFFFFFF | Presentation LUT Shape | VR_CS | 1 | 1 | 1
0x20500500 | 0xFFFFFFFF | Referenced Presentation LUT Sequence | VR_SQ | 1 | 1 | 1
0x21000010 | 0xFFFFFFFF | Print Job ID | VR_SH | 1 | 1 | 1
0x21000020 | 0xFFFFFFFF | Execution Status | VR_CS | 1 | 1 | 1
0x21000030 | 0xFFFFFFFF | Execution Status Info | VR_CS | 1 | 1 | 1
0x21000040 | 0xFFFFFFFF | Creation Date | VR_DA | 1 | 1 | 1
0x21000050 | 0xFFFFFFFF | Creation Time | VR_TM | 1 | 1 | 1
0x21000070 | 0xFFFFFFFF | Originator | VR_AE | 1 | 1 | 1
0x21000140 | 0xFFFFFFFF | Destination AE | VR_AE | 1 | 1 | 1
0x21000160 | 0xFFFFFFFF | Owner ID | VR_SH | 1 | 1 | 1
0x21000170 | 0xFFFFFFFF | Number of Films | VR_IS | 1 | 1 | 1
0x21000500 | 0xFFFFFFFF | Referenced Print Job Sequence 2100 | VR_SQ | 1 | 1 | 1
0x21100010 | 0xFFFFFFFF | Printer Status | VR_CS | 1 | 1 | 1
0x21100020 | 0xFFFFFFFF | Printer Status Info | VR_CS | 1 | 1 | 1
0x21100030 | 0xFFFFFFFF | Printer Name | VR_LO | 1 | 1 | 1
0x21100099 | 0xFFFFFFFF | Print Queue ID | VR_SH | 1 | 1 | 1
0x21200010 | 0xFFFFFFFF | Queue Status | VR_CS | 1 | 1 | 1
0x21200050 | 0xFFFFFFFF | Print Job Description Sequence | VR_SQ | 1 | 1 | 1
0x21200070 | 0xFFFFFFFF | Referenced Print Job Sequence 2120 | VR_SQ | 1 | 1 | 1
0x21300010 | 0xFFFFFFFF | Print Management Capabilities Sequence | VR_SQ | 1 | 1 | 1
0x21300015 | 0xFFFFFFFF | Printer Characteristics Sequence | VR_SQ | 1 | 1 | 1
0x21300030 | 0xFFFFFFFF | Film Box Content Sequence | VR_SQ | 1 | 1 | 1
0x21300040 | 0xFFFFFFFF | Image Box Content Sequence | VR_SQ | 1 | 1 | 1
0x21300050 | 0xFFFFFFFF | Annotation Content Sequence | VR_SQ | 1 | 1 | 1
0x21300060 | 0xFFFFFFFF | Image Overlay Box Content Sequence | VR_SQ | 1 | 1 | 1
0x21300080 | 0xFFFFFFFF | Presentation LUT Content Sequence | VR_SQ | 1 | 1 | 1
0x213000A0 | 0xFFFFFFFF | Proposed Study Sequence | VR_SQ | 1 | 1 | 1
0x213000C0 | 0xFFFFFFFF | Original Image Sequence | VR_SQ | 1 | 1 | 1
0x30020002 | 0xFFFFFFFF | RT Image Label | VR_SH | 1 | 1 | 1
0x30020003 | 0xFFFFFFFF | RT Image Name | VR_LO | 1 | 1 | 1
0x30020004 | 0xFFFFFFFF | RT Image Description | VR_ST | 1 | 1 | 1
0x3002000A | 0xFFFFFFFF | Reported Values Origin | VR_CS | 1 | 1 | 1
0x3002000C | 0xFFFFFFFF | RT Image Plane | VR_CS | 1 | 1 | 1
0x3002000E | 0xFFFFFFFF | X-Ray Image Receptor Angle | VR_DS | 1 | 1 | 1
0x30020010 | 0xFFFFFFFF | RT Image Orientation | VR_DS | 6 | 6 | 6
0x30020011 | 0xFFFFFFFF | Image Plane Pixel Spacing | VR_DS | 2 | 2 | 2
0x30020012 | 0xFFFFFFFF | RT Image Position | VR_DS | 2 | 2 | 2
0x30020020 | 0xFFFFFFFF | Radiation Machine Name | VR_SH | 1 | 1 | 1
0x30020022 | 0xFFFFFFFF | Radiation Machine SAD | VR_DS | 1 | 1 | 1
0x30020024 | 0xFFFFFFFF | Radiation Machine SSD | VR_DS | 1 | 1 | 1
0x30020026 | 0xFFFFFFFF | RT Image SID | VR_DS | 1 | 1 | 1
0x30020028 | 0xFFFFFFFF | Source to Reference Object Distance | VR_DS | 1 | 1 | 1
0x30020029 | 0xFFFFFFFF | Fraction Number | VR_IS | 1 | 1 | 1
0x30020030 | 0xFFFFFFFF | Exposure Sequence | VR_SQ | 1 | 1 | 1
0x30020032 | 0xFFFFFFFF | Meterset Exposure | VR_DS | 1 | 1 | 1
0x30040001 | 0xFFFFFFFF | DVH Type | VR_CS | 1 | 1 | 1
0x30040002 | 0xFFFFFFFF | Dose Units | VR_CS | 1 | 1 | 1
0x30040004 | 0xFFFFFFFF | Dose Type | VR_CS | 1 | 1 | 1
0x30040006 | 0xFFFFFFFF | Dose Comment | VR_LO | 1 | 1 | 1
0x30040008 | 0xFFFFFFFF | Normalization Point | VR_DS | 3 | 3 | 3
0x3004000A | 0xFFFFFFFF | Dose Summation Type | VR_CS | 1 | 1 | 1
0x3004000C | 0xFFFFFFFF | Grid Frame Offset Vector | VR_DS | 2 | -1 | 1
0x3004000E | 0xFFFFFFFF | Dose Grid Scaling | VR_DS | 1 | 1 | 1
0x30040010 | 0xFFFFFFFF | RT Dose ROI Sequence | VR_SQ | 1 | 1 | 1
0x30040012 | 0xFFFFFFFF | Dose Value | VR_DS | 1 | 1 | 1
0x30040040 | 0xFFFFFFFF | DVH Normalization Point | VR_DS | 3 | 3 | 3
0x30040042 | 0xFFFFFFFF | DVH Normalization Dose Value | VR_DS | 1 | 1 | 1
0x30040050 | 0xFFFFFFFF | DVH Sequence | VR_SQ | 1 | 1 | 1
0x30040052 | 0xFFFFFFFF | DVH Dose Scaling | VR_DS | 1 | 1 | 1
0x30040054 | 0xFFFFFFFF | DVH Volume Units | VR_CS | 1 | 1 | 1
0x30040056 | 0xFFFFFFFF | DVH Number of Bins | VR_IS | 1 | 1 | 1
0x30040058 | 0xFFFFFFFF | DVH Data | VR_DS | 2 | -1 | 2
0x30040060 | 0xFFFFFFFF | DVH Referenced ROI Sequence | VR_SQ | 1 | 1 | 1
0x30040062 | 0xFFFFFFFF | DVH ROI Contribution Type | VR_CS | 1 | 1 | 1
0x30040070 | 0xFFFFFFFF | DVH Minimum Dose | VR_DS | 1 | 1 | 1
0x30040072 | 0xFFFFFFFF | DVH Maximum Dose | VR_DS | 1 | 1 | 1
0x30040074 | 0xFFFFFFFF | DVH Mean Dose | VR_DS | 1 | 1 | 1
0x30060002 | 0xFFFFFFFF | Structure Set Label | VR_SH | 1 | 1 | 1
0x30060004 | 0xFFFFFFFF | Structure Set Name | VR_LO | 1 | 1 | 1
0x30060006 | 0xFFFFFFFF | Structure Set Description | VR_ST | 1 | 1 | 1
0x30060008 | 0xFFFFFFFF | Structure Set Date | VR_DA | 1 | 1 | 1
0x30060009 | 0xFFFFFFFF | Structure Set Time | VR_TM | 1 | 1 | 1
0x30060010 | 0xFFFFFFFF | Referenced Frame of Reference Sequence | VR_SQ | 1 | 1 | 1
0x30060012 | 0xFFFFFFFF | RT Referenced Study Sequence | VR_SQ | 1 | 1 | 1
0x30060014 | 0xFFFFFFFF | RT Referenced Series Sequence | VR_SQ | 1 | 1 | 1
0x30060016 | 0xFFFFFFFF | Contour Image Sequence | VR_SQ | 1 | 1 | 1
0x30060020 | 0xFFFFFFFF | Structure Set ROI Sequence | VR_SQ | 1 | 1 | 1
0x30060022 | 0xFFFFFFFF | ROI Number | VR_IS | 1 | 1 | 1
0x30060024 | 0xFFFFFFFF | Referenced Frame of Reference UID | VR_UI | 1 | 1 | 1
0x30060026 | 0xFFFFFFFF | ROI Name | VR_LO | 1 | 1 | 1
0x30060028 | 0xFFFFFFFF | ROI Description | VR_ST | 1 | 1 | 1
0x3006002A | 0xFFFFFFFF | ROI Display Color | VR_IS | 3 | 3 | 3
0x3006002C | 0xFFFFFFFF | ROI Volume | VR_DS | 1 | 1 | 1
0x30060030 | 0xFFFFFFFF | RT Related ROI Sequence | VR_SQ | 1 | 1 | 1
0x30060033 | 0xFFFFFFFF | RT ROI Relationship | VR_CS | 1 | 1 | 1
0x30060036 | 0xFFFFFFFF | ROI Generation Algorithm | VR_CS | 1 | 1 | 1
0x30060038 | 0xFFFFFFFF | ROI Generation Description | VR_LO | 1 | 1 | 1
0x30060039 | 0xFFFFFFFF | ROI Contour Sequence | VR_SQ | 1 | 1 | 1
0x30060040 | 0xFFFFFFFF | Contour Sequence | VR_SQ | 1 | 1 | 1
0x30060042 | 0xFFFFFFFF | Contour Geometric Type | VR_CS | 1 | 1 | 1
0x30060044 | 0xFFFFFFFF | Contour Slab Thickness | VR_DS | 1 | 1 | 1
0x30060045 | 0xFFFFFFFF | Contour Offset Vector | VR_DS | 3 | 3 | 3
0x30060046 | 0xFFFFFFFF | Number of Contour Points | VR_IS | 1 | 1 | 1
0x30060050 | 0xFFFFFFFF | Contour Data | VR_DS | 3 | -1 | 3
0x30060080 | 0xFFFFFFFF | RT ROI Observations Sequence | VR_SQ | 1 | 1 | 1
0x30060082 | 0xFFFFFFFF | Observation Number | VR_IS | 1 | 1 | 1
0x30060084 | 0xFFFFFFFF | Referenced ROI Number | VR_IS | 1 | 1 | 1
0x30060085 | 0xFFFFFFFF | ROI Observation Label | VR_SH | 1 | 1 | 1
0x30060086 | 0xFFFFFFFF | RT ROI Identification Code Sequence | VR_SQ | 1 | 1 | 1
0x30060088 | 0xFFFFFFFF | ROI Observation Description | VR_ST | 1 | 1 | 1
0x300600A0 | 0xFFFFFFFF | Related RT ROI Observations Sequence | VR_SQ | 1 | 1 | 1
0x300600A4 | 0xFFFFFFFF | RT ROI Interpreted Type | VR_CS | 1 | 1 | 1
0x300600A6 | 0xFFFFFFFF | ROI Interpreter | VR_PN | 1 | 1 | 1
0x300600B0 | 0xFFFFFFFF | ROI Physical Properties Sequence | VR_SQ | 1 | 1 | 1
0x300600B2 | 0xFFFFFFFF | ROI Physical Property | VR_CS | 1 | 1 | 1
0x300600B4 | 0xFFFFFFFF | ROI Physical Property Value | VR_DS | 1 | 1 | 1
0x300600C0 | 0xFFFFFFFF | Frame of Reference Relationship Sequence | VR_SQ | 1 | 1 | 1
0x300600C2 | 0xFFFFFFFF | Related Frame of Reference UID | VR_UI | 1 | 1 | 1
0x300600C4 | 0xFFFFFFFF | Frame of Reference Transformation Type | VR_CS | 1 | 1 | 1
0x300600C6 | 0xFFFFFFFF | Frame of Reference Transformation Matrix | VR_DS,,, | 1,,,6, 16, 16 |  |
0x300600C8 | 0xFFFFFFFF | Frame of Reference Transformation Comment | VR_LO | 1 | 1 | 1
0x30080010 | 0xFFFFFFFF | Measured Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080012 | 0xFFFFFFFF | Measured Dose Description | VR_ST | 1 | 1 | 1
0x30080014 | 0xFFFFFFFF | Measured Dose Type | VR_CS | 1 | 1 | 1
0x30080016 | 0xFFFFFFFF | Measured Dose Value | VR_DS | 1 | 1 | 1
0x30080020 | 0xFFFFFFFF | Treatment Session Beam Sequence | VR_SQ | 1 | 1 | 1
0x30080022 | 0xFFFFFFFF | Current Fraction Number | VR_IS | 1 | 1 | 1
0x30080024 | 0xFFFFFFFF | Treatment Control Point Date | VR_DA | 1 | 1 | 1
0x30080025 | 0xFFFFFFFF | Treatment Control Point Time | VR_TM | 1 | 1 | 1
0x3008002A | 0xFFFFFFFF | Treatment Termination Status | VR_CS | 1 | 1 | 1
0x3008002B | 0xFFFFFFFF | Treatment Termination Code | VR_SH | 1 | 1 | 1
0x3008002C | 0xFFFFFFFF | Treatment Verification Status | VR_CS | 1 | 1 | 1
0x30080030 | 0xFFFFFFFF | Referenced Treatment Record Sequence | VR_SQ | 1 | 1 | 1
0x30080032 | 0xFFFFFFFF | Specified Primary Meterset | VR_DS | 1 | 1 | 1
0x30080033 | 0xFFFFFFFF | Specified Secondary Meterset | VR_DS | 1 | 1 | 1
0x30080036 | 0xFFFFFFFF | Delivered Primary Meterset | VR_DS | 1 | 1 | 1
0x30080037 | 0xFFFFFFFF | Delivered Secondary Meterset | VR_DS | 1 | 1 | 1
0x3008003A | 0xFFFFFFFF | Specified Treatment Time | VR_DS | 1 | 1 | 1
0x3008003B | 0xFFFFFFFF | Delivered Treatment Time | VR_DS | 1 | 1 | 1
0x30080040 | 0xFFFFFFFF | Control Point Delivery Sequence | VR_SQ | 1 | 1 | 1
0x30080042 | 0xFFFFFFFF | Specified Meterset | VR_DS | 1 | 1 | 1
0x30080044 | 0xFFFFFFFF | Delivered Meterset | VR_DS | 1 | 1 | 1
0x30080048 | 0xFFFFFFFF | Dose Rate Delivered | VR_DS | 1 | 1 | 1
0x30080050 | 0xFFFFFFFF | Treatment Summary Calculated Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080052 | 0xFFFFFFFF | Cumulative Dose to Dose Reference | VR_DS | 1 | 1 | 1
0x30080054 | 0xFFFFFFFF | First Treatment Date | VR_DA | 1 | 1 | 1
0x30080056 | 0xFFFFFFFF | Most Recent Treatment Date | VR_DA | 1 | 1 | 1
0x3008005A | 0xFFFFFFFF | Number of Fractions Delivered | VR_IS | 1 | 1 | 1
0x30080060 | 0xFFFFFFFF | Override Sequence | VR_SQ | 1 | 1 | 1
0x30080062 | 0xFFFFFFFF | Override Parameter Pointer | VR_AT | 1 | 1 | 1
0x30080064 | 0xFFFFFFFF | Measured Dose Reference Number | VR_IS | 1 | 1 | 1
0x30080066 | 0xFFFFFFFF | Override Reason | VR_ST | 1 | 1 | 1
0x30080070 | 0xFFFFFFFF | Calculated Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080072 | 0xFFFFFFFF | Calculated Dose Reference Number | VR_IS | 1 | 1 | 1
0x30080074 | 0xFFFFFFFF | Calculated Dose Reference Description | VR_ST | 1 | 1 | 1
0x30080076 | 0xFFFFFFFF | Calculated Dose Reference Dose Value | VR_DS | 1 | 1 | 1
0x30080078 | 0xFFFFFFFF | Start Meterset | VR_DS | 1 | 1 | 1
0x3008007A | 0xFFFFFFFF | End Meterset | VR_DS | 1 | 1 | 1
0x30080080 | 0xFFFFFFFF | Referenced Measured Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080082 | 0xFFFFFFFF | Referenced Measured Dose Reference Number | VR_IS | 1 | 1 | 1
0x30080090 | 0xFFFFFFFF | Referenced Calculated Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080092 | 0xFFFFFFFF | Referenced Calculated Dose Reference Number | VR_IS | 1 | 1 | 1
0x300800A0 | 0xFFFFFFFF | Beam Limiting Device Leaf Pairs Sequence | VR_SQ | 1 | 1 | 1
0x300800B0 | 0xFFFFFFFF | Recorded Wedge Sequence | VR_SQ | 1 | 1 | 1
0x300800C0 | 0xFFFFFFFF | Recorded Compensator Sequence | VR_SQ | 1 | 1 | 1
0x300800D0 | 0xFFFFFFFF | Recorded Block Sequence | VR_SQ | 1 | 1 | 1
0x300800E0 | 0xFFFFFFFF | Treatment Summary Measured Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x30080100 | 0xFFFFFFFF | Recorded Source Sequence | VR_SQ | 1 | 1 | 1
0x30080105 | 0xFFFFFFFF | Source Serial Number | VR_LO | 1 | 1 | 1
0x30080110 | 0xFFFFFFFF | Treatment Session Application Setup Sequence | VR_SQ | 1 | 1 | 1
0x30080116 | 0xFFFFFFFF | Application Setup Check | VR_CS | 1 | 1 | 1
0x30080120 | 0xFFFFFFFF | Recorded Brachy Accessory Device Sequence | VR_SQ | 1 | 1 | 1
0x30080122 | 0xFFFFFFFF | Referenced Brachy Accessory Device Number | VR_IS | 1 | 1 | 1
0x30080130 | 0xFFFFFFFF | Recorded Channel Sequence | VR_SQ | 1 | 1 | 1
0x30080132 | 0xFFFFFFFF | Specified Channel Total Time | VR_DS | 1 | 1 | 1
0x30080134 | 0xFFFFFFFF | Delivered Channel Total Time | VR_DS | 1 | 1 | 1
0x30080136 | 0xFFFFFFFF | Specified Number of Pulses | VR_IS | 1 | 1 | 1
0x30080138 | 0xFFFFFFFF | Delivered Number of Pulses | VR_IS | 1 | 1 | 1
0x3008013A | 0xFFFFFFFF | Specified Pulse Repetition Interval | VR_DS | 1 | 1 | 1
0x3008013C | 0xFFFFFFFF | Delivered Pulse Repetition Interval | VR_DS | 1 | 1 | 1
0x30080140 | 0xFFFFFFFF | Recorded Source Applicator Sequence | VR_SQ | 1 | 1 | 1
0x30080142 | 0xFFFFFFFF | Referenced Source Applicator Number | VR_IS | 1 | 1 | 1
0x30080150 | 0xFFFFFFFF | Recorded Channel Shield Sequence | VR_SQ | 1 | 1 | 1
0x30080152 | 0xFFFFFFFF | Referenced Channel Shield Number | VR_IS | 1 | 1 | 1
0x30080160 | 0xFFFFFFFF | Brachy Control Point Delivered Sequence | VR_SQ | 1 | 1 | 1
0x30080162 | 0xFFFFFFFF | Safe Position Exit Date | VR_DA | 1 | 1 | 1
0x30080164 | 0xFFFFFFFF | Safe Position Exit Time | VR_TM | 1 | 1 | 1
0x30080166 | 0xFFFFFFFF | Safe Position Return Date | VR_DA | 1 | 1 | 1
0x30080168 | 0xFFFFFFFF | Safe Position Return Time | VR_TM | 1 | 1 | 1
0x30080200 | 0xFFFFFFFF | Current Treatment Status | VR_CS | 1 | 1 | 1
0x30080202 | 0xFFFFFFFF | Treatment Status Comment | VR_ST | 1 | 1 | 1
0x30080220 | 0xFFFFFFFF | Fraction Group Summary Sequence | VR_SQ | 1 | 1 | 1
0x30080223 | 0xFFFFFFFF | Referenced Fraction Number | VR_IS | 1 | 1 | 1
0x30080224 | 0xFFFFFFFF | Fraction Group Type | VR_CS | 1 | 1 | 1
0x30080230 | 0xFFFFFFFF | Beam Stopper Position | VR_CS | 1 | 1 | 1
0x30080240 | 0xFFFFFFFF | Fraction Status Summary Sequence | VR_SQ | 1 | 1 | 1
0x30080250 | 0xFFFFFFFF | Treatment Date | VR_DA | 1 | 1 | 1
0x30080251 | 0xFFFFFFFF | Treatment Time | VR_TM | 1 | 1 | 1
0x300A0002 | 0xFFFFFFFF | RT Plan Label | VR_SH | 1 | 1 | 1
0x300A0003 | 0xFFFFFFFF | RT Plan Name | VR_LO | 1 | 1 | 1
0x300A0004 | 0xFFFFFFFF | RT Plan Description | VR_ST | 1 | 1 | 1
0x300A0006 | 0xFFFFFFFF | RT Plan Date | VR_DA | 1 | 1 | 1
0x300A0007 | 0xFFFFFFFF | RT Plan Time | VR_TM | 1 | 1 | 1
0x300A0009 | 0xFFFFFFFF | Treatment Protocols | VR_LO | 1 | -1 | 1
0x300A000A | 0xFFFFFFFF | Treatment Intent | VR_CS | 1 | 1 | 1
0x300A000B | 0xFFFFFFFF | Treatment Sites | VR_LO | 1 | -1 | 1
0x300A000C | 0xFFFFFFFF | RT Plan Geometry | VR_CS | 1 | 1 | 1
0x300A000E | 0xFFFFFFFF | Prescription Description | VR_ST | 1 | 1 | 1
0x300A0010 | 0xFFFFFFFF | Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x300A0012 | 0xFFFFFFFF | Dose Reference Number | VR_IS | 1 | 1 | 1
0x300A0014 | 0xFFFFFFFF | Dose Reference Structure Type | VR_CS | 1 | 1 | 1
0x300A0015 | 0xFFFFFFFF | Nominal Beam Energy Unit | VR_CS | 1 | 1 | 1
0x300A0016 | 0xFFFFFFFF | Dose Reference Description | VR_LO | 1 | 1 | 1
0x300A0018 | 0xFFFFFFFF | Dose Reference Point Coordinates | VR_DS | 3 | 3 | 3
0x300A001A | 0xFFFFFFFF | Nominal Prior Dose | VR_DS | 1 | 1 | 1
0x300A0020 | 0xFFFFFFFF | Dose Reference Type | VR_CS | 1 | 1 | 1
0x300A0021 | 0xFFFFFFFF | Constraint Weight | VR_DS | 1 | 1 | 1
0x300A0022 | 0xFFFFFFFF | Delivery Warning Dose | VR_DS | 1 | 1 | 1
0x300A0023 | 0xFFFFFFFF | Delivery Maximum Dose | VR_DS | 1 | 1 | 1
0x300A0025 | 0xFFFFFFFF | Target Minimum Dose | VR_DS | 1 | 1 | 1
0x300A0026 | 0xFFFFFFFF | Target Prescription Dose | VR_DS | 1 | 1 | 1
0x300A0027 | 0xFFFFFFFF | Target Maximum Dose | VR_DS | 1 | 1 | 1
0x300A0028 | 0xFFFFFFFF | Target Underdose Volume Fraction | VR_DS | 1 | 1 | 1
0x300A002A | 0xFFFFFFFF | Organ at Risk Full-volume Dose | VR_DS | 1 | 1 | 1
0x300A002B | 0xFFFFFFFF | Organ at Risk Limit Dose | VR_DS | 1 | 1 | 1
0x300A002C | 0xFFFFFFFF | Organ at Risk Maximum Dose | VR_DS | 1 | 1 | 1
0x300A002D | 0xFFFFFFFF | Organ at Risk Overdose Volume Fraction | VR_DS | 1 | 1 | 1
0x300A0040 | 0xFFFFFFFF | Tolerance Table Sequence | VR_SQ | 1 | 1 | 1
0x300A0042 | 0xFFFFFFFF | Tolerance Table Number | VR_IS | 1 | 1 | 1
0x300A0043 | 0xFFFFFFFF | Tolerance Table Label | VR_SH | 1 | 1 | 1
0x300A0044 | 0xFFFFFFFF | Gantry Angle Tolerance | VR_DS | 1 | 1 | 1
0x300A0046 | 0xFFFFFFFF | Beam Limiting Device Angle Tolerance | VR_DS | 1 | 1 | 1
0x300A0048 | 0xFFFFFFFF | Beam Limiting Device Tolerance Sequence | VR_SQ | 1 | 1 | 1
0x300A004A | 0xFFFFFFFF | Beam Limiting Device Position Tolerance | VR_DS | 1 | 1 | 1
0x300A004C | 0xFFFFFFFF | Patient Support Angle Tolerance | VR_DS | 1 | 1 | 1
0x300A004E | 0xFFFFFFFF | Table Top Eccentric Angle Tolerance | VR_DS | 1 | 1 | 1
0x300A0051 | 0xFFFFFFFF | Table Top Vertical Position Tolerance | VR_DS | 1 | 1 | 1
0x300A0052 | 0xFFFFFFFF | Table Top Longitudinal Position Tolerance | VR_DS | 1 | 1 | 1
0x300A0053 | 0xFFFFFFFF | Table Top Lateral Position Tolerance | VR_DS | 1 | 1 | 1
0x300A0055 | 0xFFFFFFFF | RT Plan Relationship | VR_CS | 1 | 1 | 1
0x300A0070 | 0xFFFFFFFF | Fraction Group Sequence | VR_SQ | 1 | 1 | 1
0x300A0071 | 0xFFFFFFFF | Fraction Group Number | VR_IS | 1 | 1 | 1
0x300A0078 | 0xFFFFFFFF | Number of Fractions Planned | VR_IS | 1 | 1 | 1
0x300A0079 | 0xFFFFFFFF | Number of Fractions Per Day | VR_IS | 1 | 1 | 1
0x300A007A | 0xFFFFFFFF | Repeat Fraction Cycle Length | VR_IS | 1 | 1 | 1
0x300A007B | 0xFFFFFFFF | Fraction Pattern | VR_LT | 1 | 1 | 1
0x300A0080 | 0xFFFFFFFF | Number of Beams | VR_IS | 1 | 1 | 1
0x300A0082 | 0xFFFFFFFF | Beam Dose Specification Point | VR_DS | 3 | 3 | 3
0x300A0084 | 0xFFFFFFFF | Beam Dose | VR_DS | 1 | 1 | 1
0x300A0086 | 0xFFFFFFFF | Beam Meterset | VR_DS | 1 | 1 | 1
0x300A00A0 | 0xFFFFFFFF | Number of Brachy Application Setups | VR_IS | 1 | 1 | 1
0x300A00A2 | 0xFFFFFFFF | Brachy Application Setup Dose Specification Point | VR_DS | 3 | 3 | 3
0x300A00A4 | 0xFFFFFFFF | Brachy Application Setup Dose | VR_DS | 1 | 1 | 1
0x300A00B0 | 0xFFFFFFFF | Beam Sequence | VR_SQ | 1 | 1 | 1
0x300A00B2 | 0xFFFFFFFF | Treatment Machine Name | VR_SH | 1 | 1 | 1
0x300A00B3 | 0xFFFFFFFF | Primary Dosimeter Unit | VR_CS | 1 | 1 | 1
0x300A00B4 | 0xFFFFFFFF | Source-Axis Distance | VR_DS | 1 | 1 | 1
0x300A00B6 | 0xFFFFFFFF | Beam Limiting Device Sequence | VR_SQ | 1 | 1 | 1
0x300A00B8 | 0xFFFFFFFF | RT Beam Limiting Device Type | VR_CS | 1 | 1 | 1
0x300A00BA | 0xFFFFFFFF | Source to Beam Limiting Device Distance | VR_DS | 1 | 1 | 1
0x300A00BC | 0xFFFFFFFF | Number of Leaf/Jaw Pairs | VR_IS | 1 | 1 | 1
0x300A00BE | 0xFFFFFFFF | Leaf Position Boundaries | VR_DS | 3 | -1 | 1
0x300A00C0 | 0xFFFFFFFF | Beam Number | VR_IS | 1 | 1 | 1
0x300A00C2 | 0xFFFFFFFF | Beam Name | VR_LO | 1 | 1 | 1
0x300A00C3 | 0xFFFFFFFF | Beam Description | VR_ST | 1 | 1 | 1
0x300A00C4 | 0xFFFFFFFF | Beam Type | VR_CS | 1 | 1 | 1
0x300A00C6 | 0xFFFFFFFF | Radiation Type | VR_CS | 1 | 1 | 1
0x300A00C8 | 0xFFFFFFFF | Reference Image Number | VR_IS | 1 | 1 | 1
0x300A00CA | 0xFFFFFFFF | Planned Verification Image Sequence | VR_SQ | 1 | 1 | 1
0x300A00CC | 0xFFFFFFFF | Imaging Device-Specific Acquisition Parameters | VR_LO | 1 | -1 | 1
0x300A00CE | 0xFFFFFFFF | Treatment Delivery Type | VR_CS | 1 | 1 | 1
0x300A00D0 | 0xFFFFFFFF | Number of Wedges | VR_IS | 1 | 1 | 1
0x300A00D1 | 0xFFFFFFFF | Wedge Sequence | VR_SQ | 1 | 1 | 1
0x300A00D2 | 0xFFFFFFFF | Wedge Number | VR_IS | 1 | 1 | 1
0x300A00D3 | 0xFFFFFFFF | Wedge Type | VR_CS | 1 | 1 | 1
0x300A00D4 | 0xFFFFFFFF | Wedge ID | VR_SH | 1 | 1 | 1
0x300A00D5 | 0xFFFFFFFF | Wedge Angle | VR_IS | 1 | 1 | 1
0x300A00D6 | 0xFFFFFFFF | Wedge Factor | VR_DS | 1 | 1 | 1
0x300A00D8 | 0xFFFFFFFF | Wedge Orientation | VR_DS | 1 | 1 | 1
0x300A00DA | 0xFFFFFFFF | Source to Wedge Tray Distance | VR_DS | 1 | 1 | 1
0x300A00E0 | 0xFFFFFFFF | Number of Compensators | VR_IS | 1 | 1 | 1
0x300A00E1 | 0xFFFFFFFF | Material ID | VR_SH | 1 | 1 | 1
0x300A00E2 | 0xFFFFFFFF | Total Compensator Tray Factor | VR_DS | 1 | 1 | 1
0x300A00E3 | 0xFFFFFFFF | Compensator Sequence | VR_SQ | 1 | 1 | 1
0x300A00E4 | 0xFFFFFFFF | Compensator Number | VR_IS | 1 | 1 | 1
0x300A00E5 | 0xFFFFFFFF | Compensator ID | VR_SH | 1 | 1 | 1
0x300A00E6 | 0xFFFFFFFF | Source to Compensator Tray Distance | VR_DS | 1 | 1 | 1
0x300A00E7 | 0xFFFFFFFF | Compensator Rows | VR_IS | 1 | 1 | 1
0x300A00E8 | 0xFFFFFFFF | Compensator Columns | VR_IS | 1 | 1 | 1
0x300A00E9 | 0xFFFFFFFF | Compensator Pixel Spacing | VR_DS | 2 | 2 | 2
0x300A00EA | 0xFFFFFFFF | Compensator Position | VR_DS | 2 | 2 | 2
0x300A00EB | 0xFFFFFFFF | Compensator Transmission Data | VR_DS | 1 | -1 | 1
0x300A00EC | 0xFFFFFFFF | Compensator Thickness Data | VR_DS | 1 | -1 | 1
0x300A00ED | 0xFFFFFFFF | Number of Boli | VR_IS | 1 | 1 | 1
0x300A00EE | 0xFFFFFFFF | Compensator Type | VR_CS | 1 | 1 | 1
0x300A00F0 | 0xFFFFFFFF | Number of Blocks | VR_IS | 1 | 1 | 1
0x300A00F2 | 0xFFFFFFFF | Total Block Tray Factor | VR_DS | 1 | 1 | 1
0x300A00F4 | 0xFFFFFFFF | Block Sequence | VR_SQ | 1 | 1 | 1
0x300A00F5 | 0xFFFFFFFF | Block Tray ID | VR_SH | 1 | 1 | 1
0x300A00F6 | 0xFFFFFFFF | Source to Block Tray Distance | VR_DS | 1 | 1 | 1
0x300A00F8 | 0xFFFFFFFF | Block Type | VR_CS | 1 | 1 | 1
0x300A00FA | 0xFFFFFFFF | Block Divergence | VR_CS | 1 | 1 | 1
0x300A00FC | 0xFFFFFFFF | Block Number | VR_IS | 1 | 1 | 1
0x300A00FE | 0xFFFFFFFF | Block Name | VR_LO | 1 | 1 | 1
0x300A0100 | 0xFFFFFFFF | Block Thickness | VR_DS | 1 | 1 | 1
0x300A0102 | 0xFFFFFFFF | Block Transmission | VR_DS | 1 | 1 | 1
0x300A0104 | 0xFFFFFFFF | Block Number of Points | VR_IS | 1 | 1 | 1
0x300A0106 | 0xFFFFFFFF | Block Data | VR_DS | 2 | -1 | 2
0x300A0107 | 0xFFFFFFFF | Applicator Sequence | VR_SQ | 1 | 1 | 1
0x300A0108 | 0xFFFFFFFF | Applicator ID | VR_SH | 1 | 1 | 1
0x300A0109 | 0xFFFFFFFF | Applicator Type | VR_CS | 1 | 1 | 1
0x300A010A | 0xFFFFFFFF | Applicator Description | VR_LO | 1 | 1 | 1
0x300A010C | 0xFFFFFFFF | Cumulative Dose Reference Coefficient | VR_DS | 1 | 1 | 1
0x300A010E | 0xFFFFFFFF | Final Cumulative Meterset Weight | VR_DS | 1 | 1 | 1
0x300A0110 | 0xFFFFFFFF | Number of Control Points | VR_IS | 1 | 1 | 1
0x300A0111 | 0xFFFFFFFF | Control Point Sequence | VR_SQ | 1 | 1 | 1
0x300A0112 | 0xFFFFFFFF | Control Point Index | VR_IS | 1 | 1 | 1
0x300A0114 | 0xFFFFFFFF | Nominal Beam Energy | VR_DS | 1 | 1 | 1
0x300A0115 | 0xFFFFFFFF | Dose Rate Set | VR_DS | 1 | 1 | 1
0x300A0116 | 0xFFFFFFFF | Wedge Position Sequence | VR_SQ | 1 | 1 | 1
0x300A0118 | 0xFFFFFFFF | Wedge Position | VR_CS | 1 | 1 | 1
0x300A011A | 0xFFFFFFFF | Beam Limiting Device Position Sequence | VR_SQ | 1 | 1 | 1
0x300A011C | 0xFFFFFFFF | Leaf/Jaw Positions | VR_DS | 2 | -1 | 2
0x300A011E | 0xFFFFFFFF | Gantry Angle | VR_DS | 1 | 1 | 1
0x300A011F | 0xFFFFFFFF | Gantry Rotation Direction | VR_CS | 1 | 1 | 1
0x300A0120 | 0xFFFFFFFF | Beam Limiting Device Angle | VR_DS | 1 | 1 | 1
0x300A0121 | 0xFFFFFFFF | Beam Limiting Device Rotation Direction | VR_CS | 1 | 1 | 1
0x300A0122 | 0xFFFFFFFF | Patient Support Angle | VR_DS | 1 | 1 | 1
0x300A0123 | 0xFFFFFFFF | Patient Support Rotation Direction | VR_CS | 1 | 1 | 1
0x300A0124 | 0xFFFFFFFF | Table Top Eccentric Axis Distance | VR_DS | 1 | 1 | 1
0x300A0125 | 0xFFFFFFFF | Table Top Eccentric Angle | VR_DS | 1 | 1 | 1
0x300A0126 | 0xFFFFFFFF | Table Top Eccentric Rotation Direction | VR_CS | 1 | 1 | 1
0x300A0128 | 0xFFFFFFFF | Table Top Vertical Position | VR_DS | 1 | 1 | 1
0x300A0129 | 0xFFFFFFFF | Table Top Longitudinal Position | VR_DS | 1 | 1 | 1
0x300A012A | 0xFFFFFFFF | Table Top Lateral Position | VR_DS | 1 | 1 | 1
0x300A012C | 0xFFFFFFFF | Isocenter Position | VR_DS | 3 | 3 | 3
0x300A012E | 0xFFFFFFFF | Surface Entry Point | VR_DS | 3 | 3 | 3
0x300A0130 | 0xFFFFFFFF | Source to Surface Distance | VR_DS | 1 | 1 | 1
0x300A0134 | 0xFFFFFFFF | Cumulative Meterset Weight | VR_DS | 1 | 1 | 1
0x300A0180 | 0xFFFFFFFF | Patient Setup Sequence | VR_SQ | 1 | 1 | 1
0x300A0182 | 0xFFFFFFFF | Patient Setup Number | VR_IS | 1 | 1 | 1
0x300A0184 | 0xFFFFFFFF | Patient Additional Position | VR_LO | 1 | 1 | 1
0x300A0190 | 0xFFFFFFFF | Fixation Device Sequence | VR_SQ | 1 | 1 | 1
0x300A0192 | 0xFFFFFFFF | Fixation Device Type | VR_CS | 1 | 1 | 1
0x300A0194 | 0xFFFFFFFF | Fixation Device Label | VR_SH | 1 | 1 | 1
0x300A0196 | 0xFFFFFFFF | Fixation Device Description | VR_ST | 1 | 1 | 1
0x300A0198 | 0xFFFFFFFF | Fixation Device Position | VR_SH | 1 | 1 | 1
0x300A01A0 | 0xFFFFFFFF | Shielding Device Sequence | VR_SQ | 1 | 1 | 1
0x300A01A2 | 0xFFFFFFFF | Shielding Device Type | VR_CS | 1 | 1 | 1
0x300A01A4 | 0xFFFFFFFF | Shielding Device Label | VR_SH | 1 | 1 | 1
0x300A01A6 | 0xFFFFFFFF | Shielding Device Description | VR_ST | 1 | 1 | 1
0x300A01A8 | 0xFFFFFFFF | Shielding Device Position | VR_SH | 1 | 1 | 1
0x300A01B0 | 0xFFFFFFFF | Setup Technique | VR_CS | 1 | 1 | 1
0x300A01B2 | 0xFFFFFFFF | Setup Technique Description | VR_ST | 1 | 1 | 1
0x300A01B4 | 0xFFFFFFFF | Setup Device Sequence | VR_SQ | 1 | 1 | 1
0x300A01B6 | 0xFFFFFFFF | Setup Device Type | VR_CS | 1 | 1 | 1
0x300A01B8 | 0xFFFFFFFF | Setup Device Label | VR_SH | 1 | 1 | 1
0x300A01BA | 0xFFFFFFFF | Setup Device Description | VR_ST | 1 | 1 | 1
0x300A01BC | 0xFFFFFFFF | Setup Device Parameter | VR_DS | 1 | 1 | 1
0x300A01D0 | 0xFFFFFFFF | Setup Reference Description | VR_ST | 1 | 1 | 1
0x300A01D2 | 0xFFFFFFFF | Table Top Vertical Setup Displacement | VR_DS | 1 | 1 | 1
0x300A01D4 | 0xFFFFFFFF | Table Top Longitudinal Setup Displacement | VR_DS | 1 | 1 | 1
0x300A01D6 | 0xFFFFFFFF | Table Top Lateral Setup Displacement | VR_DS | 1 | 1 | 1
0x300A0200 | 0xFFFFFFFF | Brachy Treatment Technique | VR_CS | 1 | 1 | 1
0x300A0202 | 0xFFFFFFFF | Brachy Treatment Type | VR_CS | 1 | 1 | 1
0x300A0206 | 0xFFFFFFFF | Treatment Machine Sequence | VR_SQ | 1 | 1 | 1
0x300A0210 | 0xFFFFFFFF | Source Sequence | VR_SQ | 1 | 1 | 1
0x300A0212 | 0xFFFFFFFF | Source Number | VR_IS | 1 | 1 | 1
0x300A0214 | 0xFFFFFFFF | Source Type | VR_CS | 1 | 1 | 1
0x300A0216 | 0xFFFFFFFF | Source Manufacturer | VR_LO | 1 | 1 | 1
0x300A0218 | 0xFFFFFFFF | Active Source Diameter | VR_DS | 1 | 1 | 1
0x300A021A | 0xFFFFFFFF | Active Source Length | VR_DS | 1 | 1 | 1
0x300A0222 | 0xFFFFFFFF | Source Encapsulation Nominal Thickness | VR_DS | 1 | 1 | 1
0x300A0224 | 0xFFFFFFFF | Source Encapsulation Nominal Transmission | VR_DS | 1 | 1 | 1
0x300A0226 | 0xFFFFFFFF | Source Isotope Name | VR_LO | 1 | 1 | 1
0x300A0228 | 0xFFFFFFFF | Source Isotope Half Life | VR_DS | 1 | 1 | 1
0x300A022A | 0xFFFFFFFF | Reference Air Kerma Rate | VR_DS | 1 | 1 | 1
0x300A022C | 0xFFFFFFFF | Air Kerma Rate Reference Date | VR_DA | 1 | 1 | 1
0x300A022E | 0xFFFFFFFF | Air Kerma Rate Reference Time | VR_TM | 1 | 1 | 1
0x300A0230 | 0xFFFFFFFF | Application Setup Sequence | VR_SQ | 1 | 1 | 1
0x300A0232 | 0xFFFFFFFF | Application Setup Type | VR_CS | 1 | 1 | 1
0x300A0234 | 0xFFFFFFFF | Application Setup Number | VR_IS | 1 | 1 | 1
0x300A0236 | 0xFFFFFFFF | Application Setup Name | VR_LO | 1 | 1 | 1
0x300A0238 | 0xFFFFFFFF | Application Setup Manufacturer | VR_LO | 1 | 1 | 1
0x300A0240 | 0xFFFFFFFF | Template Number | VR_IS | 1 | 1 | 1
0x300A0242 | 0xFFFFFFFF | Template Type | VR_SH | 1 | 1 | 1
0x300A0244 | 0xFFFFFFFF | Template Name | VR_LO | 1 | 1 | 1
0x300A0250 | 0xFFFFFFFF | Total Reference Air Kerma | VR_DS | 1 | 1 | 1
0x300A0260 | 0xFFFFFFFF | Brachy Accessory Device Sequence | VR_SQ | 1 | 1 | 1
0x300A0262 | 0xFFFFFFFF | Brachy Accessory Device Number | VR_IS | 1 | 1 | 1
0x300A0263 | 0xFFFFFFFF | Brachy Accessory Device ID | VR_SH | 1 | 1 | 1
0x300A0264 | 0xFFFFFFFF | Brachy Accessory Device Type | VR_CS | 1 | 1 | 1
0x300A0266 | 0xFFFFFFFF | Brachy Accessory Device Name | VR_LO | 1 | 1 | 1
0x300A026A | 0xFFFFFFFF | Brachy Accessory Device Nominal Thickness | VR_DS | 1 | 1 | 1
0x300A026C | 0xFFFFFFFF | Brachy Accessory Device Nominal Transmission | VR_DS | 1 | 1 | 1
0x300A0280 | 0xFFFFFFFF | Channel Sequence | VR_SQ | 1 | 1 | 1
0x300A0282 | 0xFFFFFFFF | Channel Number | VR_IS | 1 | 1 | 1
0x300A0284 | 0xFFFFFFFF | Channel Length | VR_DS | 1 | 1 | 1
0x300A0286 | 0xFFFFFFFF | Channel Total Time | VR_DS | 1 | 1 | 1
0x300A0288 | 0xFFFFFFFF | Source Movement Type | VR_CS | 1 | 1 | 1
0x300A028A | 0xFFFFFFFF | Number of Pulses | VR_IS | 1 | 1 | 1
0x300A028C | 0xFFFFFFFF | Pulse Repetition Interval | VR_DS | 1 | 1 | 1
0x300A0290 | 0xFFFFFFFF | Source Applicator Number | VR_IS | 1 | 1 | 1
0x300A0291 | 0xFFFFFFFF | Source Applicator ID | VR_SH | 1 | 1 | 1
0x300A0292 | 0xFFFFFFFF | Source Applicator Type | VR_CS | 1 | 1 | 1
0x300A0294 | 0xFFFFFFFF | Source Applicator Name | VR_LO | 1 | 1 | 1
0x300A0296 | 0xFFFFFFFF | Source Applicator Length | VR_DS | 1 | 1 | 1
0x300A0298 | 0xFFFFFFFF | Source Applicator Manufacturer | VR_LO | 1 | 1 | 1
0x300A029C | 0xFFFFFFFF | Source Applicator Wall Nominal Thickness | VR_DS | 1 | 1 | 1
0x300A029E | 0xFFFFFFFF | Source Applicator Wall Nominal Transmission | VR_DS | 1 | 1 | 1
0x300A02A0 | 0xFFFFFFFF | Source Applicator Step Size | VR_DS | 1 | 1 | 1
0x300A02A2 | 0xFFFFFFFF | Transfer Tube Number | VR_IS | 1 | 1 | 1
0x300A02A4 | 0xFFFFFFFF | Transfer Tube Length | VR_DS | 1 | 1 | 1
0x300A02B0 | 0xFFFFFFFF | Channel Shield Sequence | VR_SQ | 1 | 1 | 1
0x300A02B2 | 0xFFFFFFFF | Channel Shield Number | VR_IS | 1 | 1 | 1
0x300A02B3 | 0xFFFFFFFF | Channel Shield ID | VR_SH | 1 | 1 | 1
0x300A02B4 | 0xFFFFFFFF | Channel Shield Name | VR_LO | 1 | 1 | 1
0x300A02B8 | 0xFFFFFFFF | Channel Shield Nominal Thickness | VR_DS | 1 | 1 | 1
0x300A02BA | 0xFFFFFFFF | Channel Shield Nominal Transmission | VR_DS | 1 | 1 | 1
0x300A02C8 | 0xFFFFFFFF | Final Cumulative Time Weight | VR_DS | 1 | 1 | 1
0x300A02D0 | 0xFFFFFFFF | Brachy Control Point Sequence | VR_SQ | 1 | 1 | 1
0x300A02D2 | 0xFFFFFFFF | Control Point Relative Position | VR_DS | 1 | 1 | 1
0x300A02D4 | 0xFFFFFFFF | Control Point 3D Position | VR_DS | 3 | 3 | 3
0x300A02D6 | 0xFFFFFFFF | Cumulative Time Weight | VR_DS | 1 | 1 | 1
0x300C0002 | 0xFFFFFFFF | Referenced RT Plan Sequence | VR_SQ | 1 | 1 | 1
0x300C0004 | 0xFFFFFFFF | Referenced Beam Sequence | VR_SQ | 1 | 1 | 1
0x300C0006 | 0xFFFFFFFF | Referenced Beam Number | VR_IS | 1 | 1 | 1
0x300C0007 | 0xFFFFFFFF | Referenced Reference Image Number | VR_IS | 1 | 1 | 1
0x300C0008 | 0xFFFFFFFF | Start Cumulative Meterset Weight | VR_DS | 1 | 1 | 1
0x300C0009 | 0xFFFFFFFF | End Cumulative Meterset Weight | VR_DS | 1 | 1 | 1
0x300C000A | 0xFFFFFFFF | Referenced Brachy Application Setup Sequence | VR_SQ | 1 | 1 | 1
0x300C000C | 0xFFFFFFFF | Referenced Brachy Application Setup Number | VR_IS | 1 | 1 | 1
0x300C000E | 0xFFFFFFFF | Referenced Source Number | VR_IS | 1 | 1 | 1
0x300C0020 | 0xFFFFFFFF | Referenced Fraction Group Sequence | VR_SQ | 1 | 1 | 1
0x300C0022 | 0xFFFFFFFF | Referenced Fraction Group Number | VR_IS | 1 | 1 | 1
0x300C0040 | 0xFFFFFFFF | Referenced Verification Image Sequence | VR_SQ | 1 | 1 | 1
0x300C0042 | 0xFFFFFFFF | Referenced Reference Image Sequence | VR_SQ | 1 | 1 | 1
0x300C0050 | 0xFFFFFFFF | Referenced Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x300C0051 | 0xFFFFFFFF | Referenced Dose Reference Number | VR_IS | 1 | 1 | 1
0x300C0055 | 0xFFFFFFFF | Brachy Referenced Dose Reference Sequence | VR_SQ | 1 | 1 | 1
0x300C0060 | 0xFFFFFFFF | Referenced Structure Set Sequence | VR_SQ | 1 | 1 | 1
0x300C006A | 0xFFFFFFFF | Referenced Patient Setup Number | VR_IS | 1 | 1 | 1
0x300C0080 | 0xFFFFFFFF | Referenced Dose Sequence | VR_SQ | 1 | 1 | 1
0x300C00A0 | 0xFFFFFFFF | Referenced Tolerance Table Number | VR_IS | 1 | 1 | 1
0x300C00B0 | 0xFFFFFFFF | Referenced Bolus Sequence | VR_SQ | 1 | 1 | 1
0x300C00C0 | 0xFFFFFFFF | Referenced Wedge Number | VR_IS | 1 | 1 | 1
0x300C00D0 | 0xFFFFFFFF | Referenced Compensator Number | VR_IS | 1 | 1 | 1
0x300C00E0 | 0xFFFFFFFF | Referenced Block Number | VR_IS | 1 | 1 | 1
0x300C00F0 | 0xFFFFFFFF | Referenced Control Point Index | VR_IS | 1 | 1 | 1
0x300E0002 | 0xFFFFFFFF | Approval Status | VR_CS | 1 | 1 | 1
0x300E0004 | 0xFFFFFFFF | Review Date | VR_DA | 1 | 1 | 1
0x300E0005 | 0xFFFFFFFF | Review Time | VR_TM | 1 | 1 | 1
0x300E0008 | 0xFFFFFFFF | Reviewer Name | VR_PN | 1 | 1 | 1
0x40000010 | 0xFFFFFFFF | Arbitrary (Retired) | VR_LT | 1 | -1 | 1
0x40004000 | 0xFFFFFFFF | Comments (Retired) | VR_LT | 1 | -1 | 1
0x40080040 | 0xFFFFFFFF | Results ID | VR_SH | 1 | 1 | 1
0x40080042 | 0xFFFFFFFF | Results ID Issuer | VR_LO | 1 | 1 | 1
0x40080050 | 0xFFFFFFFF | Referenced Interpretation Sequence | VR_SQ | 1 | 1 | 1
0x400800FF | 0xFFFFFFFF | Report Production Status | VR_CS | 1 | 1 | 1
0x40080100 | 0xFFFFFFFF | Interpretation Recorded Date | VR_DA | 1 | 1 | 1
0x40080101 | 0xFFFFFFFF | Interpretation Recorded Time | VR_TM | 1 | 1 | 1
0x40080102 | 0xFFFFFFFF | Interpretation Recorder | VR_PN | 1 | 1 | 1
0x40080103 | 0xFFFFFFFF | Reference to Recorded Sound | VR_LO | 1 | 1 | 1
0x40080108 | 0xFFFFFFFF | Interpretation Transcription Date | VR_DA | 1 | 1 | 1
0x40080109 | 0xFFFFFFFF | Interpretation Transcription Time | VR_TM | 1 | 1 | 1
0x4008010A | 0xFFFFFFFF | Interpretation Transcriber | VR_PN | 1 | 1 | 1
0x4008010B | 0xFFFFFFFF | Interpretation Text | VR_ST | 1 | 1 | 1
0x4008010C | 0xFFFFFFFF | Interpretation Author | VR_PN | 1 | 1 | 1
0x40080111 | 0xFFFFFFFF | Interpretation Approver Sequence | VR_SQ | 1 | 1 | 1
0x40080112 | 0xFFFFFFFF | Interpretation Approval Date | VR_DA | 1 | 1 | 1
0x40080113 | 0xFFFFFFFF | Interpretation Approval Time | VR_TM | 1 | 1 | 1
0x40080114 | 0xFFFFFFFF | Physician Approving Interpretation | VR_PN | 1 | 1 | 1
0x40080115 | 0xFFFFFFFF | Interpretation Diagnosis Description | VR_LT | 1 | 1 | 1
0x40080117 | 0xFFFFFFFF | Interpretation Diagnosis Code Sequence | VR_SQ | 1 | 1 | 1
0x40080118 | 0xFFFFFFFF | Results Distribution List Sequence | VR_SQ | 1 | 1 | 1
0x40080119 | 0xFFFFFFFF | Distribution Name | VR_PN | 1 | 1 | 1
0x4008011A | 0xFFFFFFFF | Distribution Address | VR_LO | 1 | 1 | 1
0x40080200 | 0xFFFFFFFF | Interpretation ID | VR_SH | 1 | 1 | 1
0x40080202 | 0xFFFFFFFF | Interpretation ID Issuer | VR_LO | 1 | 1 | 1
0x40080210 | 0xFFFFFFFF | Interpretation Type ID | VR_CS | 1 | 1 | 1
0x40080212 | 0xFFFFFFFF | Interpretation Status ID | VR_CS | 1 | 1 | 1
0x40080300 | 0xFFFFFFFF | Impressions | VR_ST | 1 | 1 | 1
0x40084000 | 0xFFFFFFFF | Results Comments | VR_ST | 1 | 1 | 1
0x50000005 | 0xFF00FFFF | Curve Dimensions | VR_US | 1 | 1 | 1
0x50000010 | 0xFF00FFFF | Number of Points | VR_US | 1 | 1 | 1
0x50000020 | 0xFF00FFFF | Type of Data | VR_CS | 1 | 1 | 1
0x50000022 | 0xFF00FFFF | Curve Description | VR_LO | 1 | 1 | 1
0x50000030 | 0xFF00FFFF | Axis Units | VR_SH | 1 | -1 | 1
0x50000040 | 0xFF00FFFF | Axis Labels | VR_SH | 1 | -1 | 1
0x50000103 | 0xFF00FFFF | Data Value Representation | VR_US | 1 | 1 | 1
0x50000104 | 0xFF00FFFF | Minimum Coordinate Value | VR_US | 1 | -1 | 1
0x50000105 | 0xFF00FFFF | Maximum Coordinate Value | VR_US | 1 | -1 | 1
0x50000106 | 0xFF00FFFF | Curve Range | VR_SH | 1 | -1 | 1
0x50000110 | 0xFF00FFFF | Curve Data Descriptor | VR_US | 1 | -1 | 1
0x50000112 | 0xFF00FFFF | Coordinate Start Value | VR_US | 1 | 1 | 1
0x50000114 | 0xFF00FFFF | Coordinate Step Value | VR_US | 1 | 1 | 1
0x50002000 | 0xFF00FFFF | Audio Type | VR_US | 1 | 1 | 1
0x50002002 | 0xFF00FFFF | Audio Sample Format | VR_US | 1 | 1 | 1
0x50002004 | 0xFF00FFFF | Number of Channels | VR_US | 1 | 1 | 1
0x50002006 | 0xFF00FFFF | Number of Samples | VR_UL | 1 | 1 | 1
0x50002008 | 0xFF00FFFF | Sample Rate | VR_UL | 1 | 1 | 1
0x5000200A | 0xFF00FFFF | Total Time | VR_UL | 1 | 1 | 1
0x5000200C | 0xFF00FFFF | Audio Sample Data | VR_OW | 1 | 1 | 1
0x5000200E | 0xFF00FFFF | Audio Comments | VR_LT | 1 | 1 | 1
0x50002500 | 0xFF00FFFF | Curve Label | VR_LO | 1 | 1 | 1
0x50002600 | 0xFF00FFFF | Referenced Overlay Sequence 50xx | VR_SQ | 1 | 1 | 1
0x50002610 | 0xFF00FFFF | Referenced Overlay Group | VR_US | 1 | 1 | 1
0x50003000 | 0xFF00FFFF | Curve Data | VR_OW | 1 | 1 | 1
0x60000010 | 0xFF00FFFF | Overlay Rows | VR_US | 1 | 1 | 1
0x60000011 | 0xFF00FFFF | Overlay Columns | VR_US | 1 | 1 | 1
0x60000012 | 0xFF00FFFF | Overlay Planes | VR_US | 1 | 1 | 1
0x60000015 | 0xFF00FFFF | Number of Frames in Overlay | VR_IS | 1 | 1 | 1
0x60000022 | 0xFF00FFFF | Overlay Description | VR_LO | 1 | 1 | 1
0x60000040 | 0xFF00FFFF | Overlay Type | VR_CS | 1 | 1 | 1
0x60000045 | 0xFF00FFFF | Overlay Subtype | VR_LO | 1 | 1 | 1
0x60000050 | 0xFF00FFFF | Overlay Origin | VR_SS | 2 | 2 | 2
0x60000051 | 0xFF00FFFF | Image Frame Origin | VR_US | 1 | 1 | 1
0x60000052 | 0xFF00FFFF | Overlay Plane Origin | VR_US | 1 | 1 | 1
0x60000060 | 0xFF00FFFF | Compression Code (Retired) | VR_LO | 1 | 1 | 1
0x60000061 | 0xFF00FFFF | Overlay Compression Originator | VR_SH | 1 | 1 | 1
0x60000062 | 0xFF00FFFF | Overlay Compression Label | VR_SH | 1 | 1 | 1
0x60000063 | 0xFF00FFFF | Overlay Compression Description | VR_SH | 1 | 1 | 1
0x60000066 | 0xFF00FFFF | Overlay Compression Step Pointers | VR_AT | 1 | -1 | 1
0x60000068 | 0xFF00FFFF | Overlay Repeat Interval | VR_US | 1 | 1 | 1
0x60000069 | 0xFF00FFFF | Overlay Bits Grouped | VR_US | 1 | 1 | 1
0x60000100 | 0xFF00FFFF | Overlay Bits Allocated | VR_US | 1 | 1 | 1
0x60000102 | 0xFF00FFFF | Overlay Bit Position | VR_US | 1 | 1 | 1
0x60000110 | 0xFF00FFFF | Overlay Format (Retired) | VR_LO | 1 | 1 | 1
0x60000200 | 0xFF00FFFF | Overlay Location (Retired) | VR_US | 1 | 1 | 1
0x60000800 | 0xFF00FFFF | Overlay Code Label | VR_LO | 1 | -1 | 1
0x60000802 | 0xFF00FFFF | Overlay Number of Tables | VR_US | 1 | 1 | 1
0x60000803 | 0xFF00FFFF | Overlay Code Table Location | VR_AT | 1 | -1 | 1
0x60000804 | 0xFF00FFFF | Overlay Bits For Code Word | VR_US | 1 | 1 | 1
0x60001100 | 0xFF00FFFF | Overlay Descriptor - Gray (Retired) | VR_US | 1 | 1 | 1
0x60001101 | 0xFF00FFFF | Overlay Descriptor - Red (Retired) | VR_US | 1 | 1 | 1
0x60001102 | 0xFF00FFFF | Overlay Descriptor - Green (Retired) | VR_US | 1 | 1 | 1
0x60001103 | 0xFF00FFFF | Overlay Descriptor - Blue (Retired) | VR_US | 1 | 1 | 1
0x60001200 | 0xFF00FFFF | Overlays - Gray (Retired) | VR_US | 1 | -1 | 1
0x60001201 | 0xFF00FFFF | Overlays - Red (Retired) | VR_US | 1 | -1 | 1
0x60001202 | 0xFF00FFFF | Overlays - Green (Retired) | VR_US | 1 | -1 | 1
0x60001203 | 0xFF00FFFF | Overlays - Blue (Retired) | VR_US | 1 | -1 | 1
0x60001301 | 0xFF00FFFF | ROI Area | VR_IS | 1 | 1 | 1
0x60001302 | 0xFF00FFFF | ROI Mean | VR_DS | 1 | 1 | 1
0x60001303 | 0xFF00FFFF | ROI Standard Deviation | VR_DS | 1 | 1 | 1
0x60001500 | 0xFF00FFFF | Overlay Label | VR_LO | 1 | 1 | 1
0x60003000 | 0xFF00FFFF | Overlay Data | VR_OW | 1 | 1 | 1
0x60004000 | 0xFF00FFFF | Comments (Retired) | VR_LT | 1 | -1 | 1
0x7FE00010 | 0xFFFFFFFF | Pixel Data | VR_OW | 1 | 1 | 1
0x7FE00020 | 0xFFFFFFFF | Coefficients SDVN | VR_OW | 1 | -1 | 1
0x7FE00030 | 0xFFFFFFFF | Coefficients SDHN | VR_OW | 1 | -1 | 1
0x7FE00040 | 0xFFFFFFFF | Coefficients SDDN | VR_OW | 1 | -1 | 1
0x7F000010 | 0xFF00FFFF | Variable Pixel Data | VR_OW | 1 | 1 | 1
0x7F000011 | 0xFF00FFFF | Variable Next Data Group | VR_US | 1 | 1 | 1
0x7F000020 | 0xFF00FFFF | Variable Coefficients SDVN | VR_OW | 1 | -1 | 1
0x7F000030 | 0xFF00FFFF | Variable Coefficients SDHN | VR_OW | 1 | -1 | 1
0x7F000040 | 0xFF00FFFF | Variable Coefficients SDDN | VR_OW | 1 | -1 | 1
0xFFFCFFFC | 0xFFFFFFFF | Data Set Trailing Padding | VR_OB | 1 | 1 | 1
0xFFFEE000 | 0xFFFFFFFF | Item | VR_OB | 1 | 1 | 1
0xFFFEE00D | 0xFFFFFFFF | Item Delimitation Item | VR_OB | 1 | 1 | 1
0xFFFEE0DD | 0xFFFFFFFF | Sequence Delimitation Item | VR_OB | 1 | 1 | 1


Default Value Representation Tag Table

Default Value Representation Table

The table below contains the default values for the Value Representations supported by DICOM.

For more information on the structure of this table, refer to DICOMVR.

Code | Name | Length | Restriction | UnitSize
VR_AE | Application Entity | 16 | VR_STRING | VR_MAXIMUM | 1
VR_AS | Age String | 4 | VR_TEXT | VR_FIXED | 1
VR_AT | Attribute Tag | 4 | VR_BINARY | VR_FIXED | 4
VR_CS | Code String | 16 | VR_STRING | VR_MAXIMUM | 1
VR_DA | Date | 8 | VR_TEXT | VR_FIXED | 1
VR_DS | Decimal String | 16 | VR_STRING | VR_MAXIMUM | 1
VR_DT | Date Time | 26 | VR_TEXT | VR_MAXIMUM | 1
VR_FD | Floating Point Double | 8 | VR_BINARY | VR_FIXED | 8
VR_FL | Floating Point Single | 4 | VR_BINARY | VR_FIXED | 4
VR_IS | Integer String | 12 | VR_STRING | VR_MAXIMUM | 1
VR_LO | Long String | 64 | VR_STRING | VR_MAXIMUM | 1
VR_LT | Long Text | 10240 | VR_TEXT | VR_MAXIMUM | 1
VR_OB | Other Byte String | 0 | VR_BINARY | VR_ANY | 1
VR_OF | Other Float String | 0xFFFFFFFC | VR_BINARY | VR_MAXIMUM | 4
VR_OW | Other Word String | 0 | VR_BINARY | VR_ANY | 2
VR_PN | Person Name | 64 | VR_TEXT | VR_MAXIMUM_GROUP | 1
VR_SH | Short String | 16 | VR_STRING | VR_MAXIMUM | 1
VR_SL | Signed Long | 4 | VR_BINARY | VR_FIXED | 4
VR_SQ | Sequence of Items | 0 | VR_NOT_APPLICABLE | 1
VR_SS | Signed Short | 2 | VR_BINARY | VR_FIXED | 2
VR_ST | Short Text | 1024 | VR_TEXT | VR_MAXIMUM | 1
VR_TM | Time | 16 | VR_TEXT | VR_MAXIMUM | 1
VR_UI | Unique Identifier | 64 | VR_TEXT | VR_MAXIMUM | 1
VR_UL | Unsigned Long | 4 | VR_BINARY | VR_FIXED | 4
VR_UN | Unknown | 0 | VR_BINARY | VR_ANY | 1
VR_US | Unsigned Short | 2 | VR_BINARY | VR_FIXED | 2
VR_UT | Unlimited Text | 0xFFFFFFFE | VR_TEXT | VR_MAXIMUM | 1


DICOM Macros

The following macros are available for use with the LEADTOOLS DICOM Class Library:

#define MAKETAG(nGroup,nElement) ((L_UINT32)((((L_UINT32)nGroup) << 16) | nElement))

#define GETGROUP(nTag) ((L_UINT16)(nTag >> 16))

#define GETELEMENT(nTag) ((L_UINT16)(nTag & 0xFFFF))

For an example, refer to LDicomDS::ConformanceDS and LDicomDS::GetCharValue.


DICOM Standard

The DICOM Standard is published by the

National Electrical Manufacturers Association

1300 N. 17th Street

Rosslyn, Virginia 22209 USA


Document/Medical Support and Licensing Requirements

Document/Medical Licensing and Royalty Agreements:

Congratulations! You have licensed one of the LEADTOOLS Document/Medical software products, the most comprehensive imaging toolkits on the market, enabling you to create powerful imaging applications. The license terms for LEADTOOLS Document Imaging, LEADTOOLS Document Imaging Suite, LEADTOOLS Medical Imaging and LEADTOOLS Medical Imaging Suite require runtime licensing based on the number of copies of your application that you deploy (i.e., distribute or install and use internally).

By paying the initial box price for the applicable LEADTOOLS product, you have obtained a development license, which entitles you to develop your application and test it. Once completed, if you wish to distribute the application or deploy it internally on multiple machines, you are required to enter into a duplication and distribution agreement with LEAD. You have the ability to choose from several licensing options depending on your volume needs.

The product you are installing is a fully functional working version and includes support for all features in LEADTOOLS Document Imaging, LEADTOOLS Document Imaging Suite, LEADTOOLS Medical Imaging and LEADTOOLS Medical Imaging Suite. (Depending on which product you have licensed, some of the features may ultimately not be available to you. See the on-line help file for a product feature comparison.) Until you sign and return the correct licensing agreement, your application will display a "nag" message. Once LEAD receives the executed contract, we will provide you a password that will permit you to terminate the "nag" message for the product that you have licensed. In addition to providing the password, you must also use the no nag version of the LTKRN14n.dll, found in the REDIST\NONAGLTKRN directory. This is also the version you must redistribute.

Duplication and Distribution Agreements

Click this button to start a new WinHelp session to review the License Agreements governing your use of the software.


IOD Class Constants

The following constants are used to indicate the Class Information Object Definitions.

Code constant | Code value and meaning
CLASS_12_LEAD_ECG | 12-Lead ECG
CLASS_AMBULATORY_ECG | Ambulatory ECG
CLASS_BASIC_ANNOTATION | Basic Annotation
CLASS_BASIC_CARDIAC_EP | Basic Cardiac EP
CLASS_BASIC_COLOR_IMAGE_BOX | Basic Color Image Box
CLASS_BASIC_COLOR_PRINT_META | Basic Print Meta
CLASS_BASIC_DIRECTORY | Basic Directory
CLASS_BASIC_FILM_BOX | Basic Film Box
CLASS_BASIC_FILM_SESSION | Basic Film Session
CLASS_BASIC_GRAYSCALE_IMAGE_BOX | Basic Grayscale Image Box
CLASS_BASIC_GRAYSCALE_PRINT_META | Basic Print Meta
CLASS_BASIC_IMAGE_BOX | Basic Image Box
CLASS_BASIC_PRINT_IMAGE_OVERLAY_BOX | Basic print image overlay box.
CLASS_BASIC_STUDY_DESCRIPTOR | Basic Study Descriptor
CLASS_BASIC_TEXT_SR | Basic Text Structured Reporting
CLASS_BASIC_VOICE_AUDIO | Basic Voice Audio
CLASS_CHEST_CAD_SR | Chest CAD SR
CLASS_COMPREHENSIVE_SR | Comprehensive Structured Reporting
CLASS_CR_IMAGE_STORAGE | Computed Radiography Image
CLASS_CT_IMAGE_STORAGE | Computed Tomography Image
CLASS_DX_IMAGE_STORAGE_PRESENTATION | Digital X-ray image presentation.
CLASS_DX_IMAGE_STORAGE_PROCESSING | Digital X-ray image processing.
CLASS_DX_INTRAORAL_IMAGE_STORAGE_PRESENTATION | Digital X-ray Intraoral image presentation.
CLASS_DX_INTRAORAL_IMAGE_STORAGE_PROCESSING | Digital X-ray Intraoral image processing.
CLASS_DX_MAMMOGRAPHY_IMAGE_STORAGE_PRESENTATION | Digital X-ray Mammography image presentation.
CLASS_DX_MAMMOGRAPHY_IMAGE_STORAGE_PROCESSING | Digital X-ray Mammography image processing.
CLASS_ENHANCED_MR_IMAGE_STORAGE | Enhanced MR Image Storage
CLASS_ENHANCED_SR | Enhanced Structured Reporting
CLASS_GENERAL_ECG | General ECG
CLASS_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEP | General Purpose Performed Procedure Step
CLASS_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP | General Purpose Scheduled Procedure Step
CLASS_GENERAL_PURPOSE_WORKLIST | General Purpose Worklist
CLASS_GENERAL_PURPOSE_WORKLIST_MANAGEMENT_META | General Purpose Worklist Management Meta
CLASS_GRAYSCALE_SOFTCOPY_PRESENTATION_STATE | Grayscale Softcopy Presentation State
CLASS_HC_COLOR_IMAGE_STORAGE | Hardcopy Color Image
CLASS_HC_GRAYSCALE_IMAGE_STORAGE | Hardcopy Grayscale Image
CLASS_HEMODYNAMIC | Hemodynamic
CLASS_IMAGE_OVERLAY_BOX_RETIRED | Image Overlay Box (Retired)
CLASS_INTERPRETATION | Interpretation
CLASS_KEY_OBJECT_SELECTION_DOCUMENT | Key Object Selection Document
CLASS_MAMMOGRAPHY_CAD_SR | Mammography CAD SR
CLASS_MAX | Maximum number of classes.
CLASS_MODALITY_PERFORMED_PROCEDURE_STEP | Modality Performed Procedure Step
CLASS_MODALITY_WORKLIST | Modality Worklist
CLASS_MR_IMAGE_STORAGE | Magnetic Resonance Image
CLASS_MR_SPECTROSCOPY_STORAGE | MR Spectroscopy Storage
CLASS_NM_IMAGE_STORAGE | Nuclear Medicine Image
CLASS_NM_IMAGE_STORAGE_RETIRED | Nuclear Medicine Image (Retired)
CLASS_OPHTHALMIC_8_BIT_PHOTOGRAPHY_IMAGE_STORAGE | Ophthalmic Photography 8 Bit Image Storage
CLASS_OPHTHALMIC_16_BIT_PHOTOGRAPHY_IMAGE_STORAGE | Ophthalmic Photography 16 Bit Image Storage
CLASS_PATIENT | Patient
CLASS_PATIENT_META | Patient Meta
CLASS_PATIENT_ROOT_QUERY_IMAGE | Patient root query image.
CLASS_PATIENT_ROOT_QUERY_PATIENT | Patient root query patient.
CLASS_PATIENT_ROOT_QUERY_SERIES | Patient root query series.
CLASS_PATIENT_ROOT_QUERY_STUDY | Patient root query study.
CLASS_PATIENT_STUDY_QUERY_PATIENT | Patient study query patient.
CLASS_PATIENT_STUDY_QUERY_STUDY | Patient study query study.
CLASS_PET_IMAGE_STORAGE | Positron Emission Tomography Image
CLASS_PRESENTATION_LUT | Presentation LUT
CLASS_PRINT_JOB | Print Job
CLASS_PRINT_QUEUE | Print Queue
CLASS_PRINTER | Printer
CLASS_PRINTER_CONFIGURATION | Printer configuration.
CLASS_PULL_PRINT_REQUEST | Pull Print Request
CLASS_PULL_STORED_PRINT_META | Pull Stored Print Meta
CLASS_RAW_DATA_STORAGE | Raw Data Storage
CLASS_REFERENCED_COLOR_PRINT_META_RETIRED | Referenced Print Meta (Retired)
CLASS_REFERENCED_GRAYSCALE_PRINT_META_RETIRED | Referenced Print Meta (Retired)
CLASS_RESULTS | Results
CLASS_RESULTS_META | Results Meta
CLASS_RT_BEAMS_TREATMENT_RECORD_STORAGE | Radiotherapy Beams Treatment Record.
CLASS_RT_BRACHY_TREATMENT_RECORD_STORAGE | Radiotherapy Brachy Treatment Record.
CLASS_RT_DOSE_STORAGE | Radiotherapy Dose
CLASS_RT_IMAGE_STORAGE | Radiotherapy Image
CLASS_RT_PLAN_STORAGE | Radiotherapy Plan
CLASS_RT_STRUCTURE_SET_STORAGE | Radiotherapy Structure Set
CLASS_RT_TREATMENT_SUMMARY_RECORD_STORAGE | Radiotherapy Treatment Summary Record.
CLASS_SC_IMAGE_STORAGE | Secondary Capture Image
CLASS_SC_MULTI_FRAME_GRAYSCALE_BYTE_IMAGE_STORAGE | Secondary Capture Multi-frame Grayscale Byte Image Storage
CLASS_SC_MULTI_FRAME_GRAYSCALE_WORD_IMAGE_STORAGE | Secondary Capture Multi-frame Grayscale Word Image Storage
CLASS_SC_MULTI_FRAME_SINGLE_BIT_IMAGE_STORAGE | Secondary Capture Multi-frame Single Bit Image Storage
CLASS_SC_MULTI_FRAME_TRUE_COLOR_IMAGE_STORAGE | Secondary Capture Multi-Frame True Color Image Storage
CLASS_STANDALONE_CURVE_STORAGE | Standalone Curve
CLASS_STANDALONE_MODALITY_LUT_STORAGE | Standalone Modality LUT
CLASS_STANDALONE_OVERLAY_STORAGE | Standalone Overlay
CLASS_STANDALONE_PET_CURVE_STORAGE | Standalone Positron Emission Tomography Curve
CLASS_STANDALONE_VOI_LUT_STORAGE | Standalone VOI LUT
CLASS_STEREOMETRIC_RELATIONSHIP_STORAGE | Stereometric Relationship Storage
CLASS_STORAGE_COMMITMENT_PULL_MODEL | Storage Commitment
CLASS_STORAGE_COMMITMENT_PUSH_MODEL | Storage Commitment
CLASS_STORED_PRINT_STORAGE | Stored Print
CLASS_STUDY | Study
CLASS_STUDY_COMPONENT | Study Component
CLASS_STUDY_META | Study Meta
CLASS_STUDY_ROOT_QUERY_IMAGE | Study root query image.
CLASS_STUDY_ROOT_QUERY_SERIES | Study root query series.
CLASS_STUDY_ROOT_QUERY_STUDY | Study root query study.
CLASS_UNKNOWN | Unknown
CLASS_US_IMAGE_STORAGE | Ultrasound Image
CLASS_US_IMAGE_STORAGE_RETIRED | Ultrasound Image (Retired)
CLASS_US_MULTI_FRAME_IMAGE_STORAGE | Ultrasound Multi-frame Image
CLASS_US_MULTI_FRAME_IMAGE_STORAGE_RETIRED | Ultrasound Multi-frame Image (Retired)
CLASS_VISIT | Visit
CLASS_VL_ENDOSCOPIC_IMAGE_STORAGE | Visible Light Endoscopic image.
CLASS_VL_MICROSCOPIC_IMAGE_STORAGE | Visible Light Microscopic image.
CLASS_VL_PHOTOGRAPHIC_IMAGE_STORAGE | Visible Light Photographic image.
CLASS_VL_SLIDE_COORDINATES_MICROSCOPIC_IMAGE_STORAGE | Visible Light slide coordinates for a Microscopic image.
CLASS_VOI_LUT_BOX_RETIRED | VOI LUT Box (Retired)
CLASS_XA_BIPLANE_IMAGE_STORAGE_RETIRED | X-Ray Angiographic Bi-Plane Image (Retired)
CLASS_XA_IMAGE_STORAGE | X-Ray Angiographic Image
CLASS_XRF_IMAGE_STORAGE | X-Ray Radiofluoroscopic Image


IOD Module Constants

The following constants are used to indicate the Module Information Object Definitions.

Code constant | Code value and meaning
MODULE_ACQUISITION_CONTEXT | Acquisition Context Module
MODULE_ANNOTATION_LIST | Annotation List module
MODULE_APPROVAL | Approval module
MODULE_AUDIO | Audio module
MODULE_BASIC_ANNOTATION_PRESENTATION | Basic Annotation Presentation module
MODULE_BASIC_FILM_BOX_KEY | Basic Film Box Key
MODULE_BASIC_FILM_BOX_PRESENTATION | Basic Film Box Presentation module
MODULE_BASIC_FILM_BOX_RELATIONSHIP | Basic Film Box Relationship module
MODULE_BASIC_FILM_SESSION_PRESENTATION | Basic Film Session Presentation module
MODULE_BASIC_FILM_SESSION_RELATIONSHIP | Basic Film Session Relationship module
MODULE_BASIC_IMAGE_BOX_KEY | Basic Image Box Key
MODULE_BASIC_PRINT_IMAGE_OVERLAY_BOX | Basic Print Image Overlay Box Module
MODULE_BILLING_AND_MATERIAL_MANAGEMENT_CODES | Billing and Material Management Codes module
MODULE_BIPLANE_IMAGE | Biplane Image module
MODULE_BIPLANE_OVERLAY | Biplane Overlay module
MODULE_BIPLANE_SEQUENCE | Biplane Sequence module
MODULE_BITMAP_DISPLAY_SHUTTER | Bitmap display shutter
MODULE_BULK_MOTION_SYNCHRONIZATION | Bulk Motion Synchronization
MODULE_CALCULATED_DOSE_REFERENCE_RECORD | Calculated Dose Reference Record Module
MODULE_CARDIAC_SYNCHRONIZATION | Cardiac Synchronization
MODULE_CINE | Cine module
MODULE_CLINICAL_TRIAL_SERIES | Clinical Trial Series
MODULE_CLINICAL_TRIAL_STUDY | Clinical Trial Study
MODULE_CLINICAL_TRIAL_SUBJECT | Clinical Trial Subject
MODULE_COMMON_INSTANCE_REFERENCE | Common Instance Reference
MODULE_CONTRAST_BOLUS | Contrast Bolus module
MODULE_CR_IMAGE | Computed Radiography Image module
MODULE_CR_SERIES | Computed Radiography Series module
MODULE_CT_IMAGE | Computed Tomography Image module
MODULE_CURVE | Curve module
MODULE_CURVE_IDENTIFICATION | Curve Identification module
MODULE_CURVE_KEY | Curve Key
MODULE_DEVICE | Device module
MODULE_DIRECTORY_INFORMATION | Directory information
MODULE_DISPLAY_SHUTTER | Display Shutter module
MODULE_DISPLAYED_AREA | Displayed area
MODULE_DX_ANATOMY_IMAGED | Digital X-ray anatomy imaged Module
MODULE_DX_DETECTOR | Digital X-ray Detector Module
MODULE_DX_IMAGE | Digital X-ray image Module
MODULE_DX_POSITIONING | Digital X-ray Positioning Module
MODULE_DX_SERIES | Digital X-ray series Module
MODULE_ENHANCED_CONTRAST_BOLUS | Enhanced Contrast/Bolus
MODULE_ENHANCED_MR_IMAGE | Enhanced MR Image
MODULE_FILESET_IDENTIFICATION | Fileset identification
MODULE_FILM_BOX | Film Box module
MODULE_FILM_SESSION_KEY | Film Session Key
MODULE_FRAME_OF_REFERENCE | Frame of Reference module
MODULE_FRAME_POINTERS | Frame Pointers module
MODULE_GENERAL_EQUIPMENT | General Equipment module
MODULE_GENERAL_IMAGE | General Image module
MODULE_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEP_INFORMATION | General Purpose Performed Procedure Step Information
MODULE_GENERAL_PURPOSE_PERFORMED_PROCEDURE_STEP_RELATIONSHIP | General Purpose Performed Procedure Step Relationship
MODULE_GENERAL_PURPOSE_RESULTS | General Purpose Results
MODULE_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_INFORMATION | General Purpose Scheduled Procedure Step Information
MODULE_GENERAL_PURPOSE_SCHEDULED_PROCEDURE_STEP_RELATIONSHIP | General Purpose Scheduled Procedure Step Relationship
MODULE_GENERAL_QUEUE | General Queue module
MODULE_GENERAL_SERIES | General Series module
MODULE_GENERAL_STUDY | General Study module
MODULE_GRAPHIC_ANNOTATION | Graphic annotation
MODULE_GRAPHIC_LAYER | Graphic layer
MODULE_HC_COLOR_IMAGE | Hard Copy Color Image module
MODULE_HC_EQUIPMENT | Hard Copy Equipment module
MODULE_HC_GRAYSCALE_IMAGE | Hard Copy Grayscale Image module
MODULE_IMAGE_ACQUISITION_RESULTS | Image Acquisition Results module
MODULE_IMAGE_BOX_LIST | Image Box List module
MODULE_IMAGE_BOX_PRESENTATION | Image Box Presentation module
MODULE_IMAGE_BOX_RELATIONSHIP | Image Box Relationship module
MODULE_IMAGE_HISTOGRAM | Image Histogram Module
MODULE_IMAGE_KEY | Image Key
MODULE_IMAGE_OVERLAY_BOX_LIST | Image Overlay Box List module
MODULE_IMAGE_OVERLAY_BOX_PRESENTATION | Image Overlay Box Presentation module
MODULE_IMAGE_OVERLAY_BOX_RELATIONSHIP | Image Overlay Box Relationship module
MODULE_IMAGE_PIXEL | Image Pixel module
MODULE_IMAGE_PLANE | Image Plane module
MODULE_INTERPRETATION_APPROVAL | Interpretation Approval module
MODULE_INTERPRETATION_IDENTIFICATION | Interpretation Identification module
MODULE_INTERPRETATION_KEY | Interpretation Key
MODULE_INTERPRETATION_RECORDING | Interpretation Recording module
MODULE_INTERPRETATION_RELATIONSHIP | Interpretation Relationship module
MODULE_INTERPRETATION_STATE | Interpretation State module
MODULE_INTERPRETATION_TRANSCRIPTION | Interpretation Transcription module
MODULE_INTRAORAL_IMAGE | Intra-oral Image Module
MODULE_INTRAORAL_SERIES | Intra-oral Series Module
MODULE_KEY_OBJECT_DOCUMENT | Key Object Document
MODULE_KEY_OBJECT_DOCUMENT_KEY | Key Object Doc
MODULE_KEY_OBJECT_DOCUMENT_SERIES | Key Object Document Series
MODULE_LUT_IDENTIFICATION | LUT Identification module
MODULE_MAMMOGRAPHY_IMAGE | Mammography Image Module
MODULE_MAMMOGRAPHY_SERIES | Mammography Series Module
MODULE_MASK | Mask module
MODULE_MAX | Maximum number of modules
MODULE_MEASURED_DOSE_REFERENCE_RECORD | Measured Dose Reference Record Module
MODULE_MODALITY_LUT | Modality LUT module
MODULE_MODALITY_LUT_KEY | Modality LUT Key
MODULE_MR_IMAGE | Magnetic Resonance Image module
MODULE_MR_PULSE_SEQUENCE | MR Pulse Sequence
MODULE_MR_SPECTROSCOPY | MR Spectroscopy
MODULE_MR_SPECTROSCOPY_DATA | MR Spectroscopy Data
MODULE_MR_SPECTROSCOPY_PULSE_SEQUENCE | MR Spectroscopy Pulse Sequence
MODULE_MULTI_FRAME | Multi-Frame module
MODULE_MULTI_FRAME_DIMENSION | Multi-frame Dimension
MODULE_MULTI_FRAME_FUNCTIONAL_GROUPS | Multi-frame Functional Groups
MODULE_MULTI_FRAME_OVERLAY | Multi-Frame Overlay module
MODULE_MULTIREFERENCED_FILE_KEY | Multi-referenced File Key
MODULE_NM_DETECTOR | Nuclear Medicine Detector module
MODULE_NM_EQUIPMENT_RETIRED | Nuclear Medicine Equipment (Retired)
MODULE_NM_IMAGE | Nuclear Medicine Image module
MODULE_NM_IMAGE_PIXEL | Nuclear Medicine Image Pixel module
MODULE_NM_IMAGE_RETIRED | Nuclear Medicine Image (Retired)
MODULE_NM_ISOTOPE | Nuclear Medicine Isotope module
MODULE_NM_MULTI_FRAME | Nuclear Medicine Multi-Frame module
MODULE_NM_MULTI_GATED_ACQUISITION | Nuclear Medicine Multi-Gated Acquisition module
MODULE_NM_MULTI_GATED_ACQUISITION_IMAGE_RETIRED | Nuclear Medicine Multi-Gated Acquisition Image (Retired)
MODULE_NM_PET_PATIENT_ORIENTATION | Nuclear Medicine Positron Emission Tomography Patient Orientation module
MODULE_NM_PHASE | Nuclear Medicine Phase module
MODULE_NM_RECONSTRUCTION | Nuclear Medicine Reconstruction module
MODULE_NM_SERIES_RETIRED | Nuclear Medicine Series (Retired)
MODULE_NM_SPECT_ACQUISITION_IMAGE_RETIRED | Nuclear Medicine Spect Acquisition Image (Retired)
MODULE_NM_TOMO_ACQUISITION | Nuclear Medicine Tomography Acquisition module
MODULE_OCULAR_REGION_IMAGED | Ocular Region Imaged
MODULE_OPHTHALMIC_PHOTOGRAPHY_SERIES | Ophthalmic Photography Series
MODULE_OPHTHALMIC_PHOTOGRAPHY_IMAGE | Ophthalmic Photography Image
MODULE_OPHTHALMIC_PHOTOGRAPHIC_PARAMETERS | Ophthalmic Photographic Parameters
MODULE_OPHTHALMIC_PHOTOGRAPHY_ACQUISITION_PARAMETERS | Ophthalmic Photography Acquisition Parameters
MODULE_OVERLAY_CURVE_ACTIVATION | Overlay curve activation
MODULE_OVERLAY_IDENTIFICATION | Overlay Identification module
MODULE_OVERLAY_KEY | Overlay Key
MODULE_OVERLAY_PLANE | Overlay Plane module
MODULE_PALETTE_COLOR_LOOCKUP_TABLE | Palette Color LookUp Table module
MODULE_PATIENT | Patient module
MODULE_PATIENT_DEMOGRAPHIC | Patient Demographic module
MODULE_PATIENT_IDENTIFICATION | Patient Identification module
MODULE_PATIENT_KEY | Patient Key
MODULE_PATIENT_MEDICAL | Patient Medical module
MODULE_PATIENT_RELATIONSHIP | Patient Relationship module
MODULE_PATIENT_STUDY | Patient Study module
MODULE_PATIENT_SUMMARY | Patient Summary module
MODULE_PERFORMED_PROCEDURE_STEP_INFORMATION | Performed Procedure Step Information module
MODULE_PERFORMED_PROCEDURE_STEP_RELATIONSHIP | Performed Procedure Step Relationship module
MODULE_PET_CURVE | Positron Emission Tomography Curve module
MODULE_PET_IMAGE | Positron Emission Tomography Image module
MODULE_PET_ISOTOPE | Positron Emission Tomography Isotope module
MODULE_PET_MULTIGATED_ACQUISITION | Positron Emission Tomography Multi-gated Acquisition module
MODULE_PET_SERIES | Positron Emission Tomography Series module
MODULE_PRESENTATION_LUT | Presentation LUT module
MODULE_PRESENTATION_LUT_LIST | Presentation LUT List module
MODULE_PRESENTATION_SERIES | Presentation Series
MODULE_PRESENTATION_STATE | Presentation state
MODULE_PRINT_JOB | Print Job module
MODULE_PRINT_QUEUE | Print Queue module
MODULE_PRINT_QUEUE_KEY | Print Queue Key
MODULE_PRINT_REQUEST | Print Request module
MODULE_PRINTER | Printer module
MODULE_PRINTER_CHARACTERISTICS | Printer Characteristics module
MODULE_PRINTER_CONFIGURATION | Printer Configuration Module
MODULE_PRIVATE_KEY | Private Key
MODULE_RADIATION_DOSE | Radiation Dose module
MODULE_RAW_DATA | Raw Data
MODULE_RECORD_SELECTION_KEY | Record Selection Key
MODULE_RESPIRATORY_SYNCHRONIZATION | Respiratory Synchronization
MODULE_RESULT_KEY | Result Key
MODULE_RESULTS_IDENTIFICATION | Results Identification module
MODULE_RESULTS_IMPRESSIONS | Results Impressions module
MODULE_RESULTS_RELATIONSHIP | Results Relationship module
MODULE_ROI_CONTOUR | Region Of Interest Contour module
MODULE_RT_BEAMS | Radiotherapy Beams module
MODULE_RT_BEAMS_SESSION_RECORD | Radiotherapy Beams Session Record Module
MODULE_RT_BRACHY_APPLICATION_SETUPS | Radiotherapy Brachy Application Setups module
MODULE_RT_BRACHY_SESSION_RECORD | Radiotherapy Brachy Session Record Module
MODULE_RT_DOSE | Radiotherapy Dose module
MODULE_RT_DOSE_KEY | Radiotherapy Dose Key
MODULE_RT_DOSE_ROI | Radiotherapy Dose Region Of Interest module.
MODULE_RT_DVH | Radiotherapy Dose Volume Histograms module
MODULE_RT_FRACTION_SCHEME | Radiotherapy Fraction Scheme module
MODULE_RT_GENERAL_PLAN | Radiotherapy General Plan module
MODULE_RT_GENERAL_TREATMENT_RECORD | Radiotherapy General Treatment Record Module
MODULE_RT_IMAGE | Radiotherapy Image module
MODULE_RT_OBSERVATIONS | Radiotherapy Observations module
MODULE_RT_PATIENT_SETUP | Radiotherapy Patient Setup module
MODULE_RT_PLAN_KEY | Radiotherapy Plan Key
MODULE_RT_PRESCRIPTION | Radiotherapy Prescription module
MODULE_RT_SERIES | Radiotherapy Series module
MODULE_RT_STRUCTURE_SET_KEY | Radiotherapy Structure Set Key
MODULE_RT_TOLERANCE_TABLES | Radiotherapy Tolerance Tables module
MODULE_RT_TREATMENT_MACHINE_RECORD | Radiotherapy Treatment Machine Record Module
MODULE_RT_TREATMENT_RECORD_KEY | Radiotherapy Treatment Record Key
MODULE_RT_TREATMENT_SUMMARY_RECORD | Radiotherapy Treatment Summary Record Module
MODULE_SC_EQUIPMENT | Secondary Capture Equipment module
MODULE_SC_IMAGE | Secondary Capture Image module
MODULE_SC_MULTI_FRAME_IMAGE | SC Multi-frame Image
MODULE_SC_MULTI_FRAME_VECTOR | SC Multi-frame Vector
MODULE_SERIES_KEY | Series Key
MODULE_SLIDE_COORDINATES | Slide Coordinates Module
MODULE_SOFTCOPY_PRESENTATION_LUT | Softcopy presentation LUT
MODULE_SOFTCOPY_VOI_LUT | Softcopy VOI LUT
MODULE_SOP_COMMON | SOP Common module
MODULE_SPATIAL_TRANSFORMATION | Spatial transformation
MODULE_SPECIMEN_IDENTIFICATION | Specimen identification Module
MODULE_SR_DOCUMENT_CONTENT | Structured Reporting Document Content
MODULE_SR_DOCUMENT_GENERAL | Structured Reporting Document General
MODULE_SR_DOCUMENT_KEY | Structured Reporting Document Content
MODULE_SR_DOCUMENT_SERIES | Structured Reporting Document Series
MODULE_STEREOMETRIC_SERIES | Stereometric Series
MODULE_STEREOMETRIC_RELATIONSHIP | Stereometric Relationship
MODULE_STORAGE_COMMITMENT | Storage Commitment module
MODULE_STORED_PRINT_KEY | Stored Print Key
MODULE_STRUCTURE_SET | Structure Set module
MODULE_STUDY_ACQUISITION | Study Acquisition module
MODULE_STUDY_CLASSIFICATION | Study Classification module
MODULE_STUDY_COMPONENT | Study Component module
MODULE_STUDY_COMPONENT_ACQUISITION | Study Component Acquisition module
MODULE_STUDY_COMPONENT_KEY | Study Component Key
MODULE_STUDY_COMPONENT_RELATIONSHIP | Study Component Relationship module
MODULE_STUDY_CONTENT | Study Content module
MODULE_STUDY_IDENTIFICATION | Study Identification module
MODULE_STUDY_KEY | Study Key
MODULE_STUDY_READ | Study Read module
MODULE_STUDY_RELATIONSHIP | Study Relationship module
MODULE_STUDY_SCHEDULING | Study Scheduling module
MODULE_SUPPLEMENTAL_PALETTE_COLOR_LOOKUP_TABLE | Supplemental Palette Color Lookup Table
MODULE_SYNCHRONIZATION | Synchronization
MODULE_THERAPY | Therapy module
MODULE_TOPIC_KEY | Topic Key
MODULE_US_FRAME_OF_REFERENCE | Ultrasound Frame of Reference module
MODULE_US_FRAME_OF_REFERENCE_RETIRED | Ultrasound Frame of Reference (Retired)
MODULE_US_IMAGE | Ultrasound Image module
MODULE_US_IMAGE_RETIRED | Ultrasound Image (Retired)
MODULE_US_REGION_CALIBRATION | Ultrasound Region Calibration module
MODULE_US_REGION_CALIBRATION_RETIRED | Ultrasound Region of Calibration (Retired)
MODULE_VISIT_ADMISSION | Visit Admission module
MODULE_VISIT_DISCHARGE | Visit Discharge module
MODULE_VISIT_IDENTIFICATION | Visit Identification module
MODULE_VISIT_KEY | Visit Key
MODULE_VISIT_RELATIONSHIP | Visit Relationship module
MODULE_VISIT_SCHEDULING | Visit Scheduling module
MODULE_VISIT_STAY | Visit Stay module
MODULE_VL_IMAGE | Visible Light Image Module
MODULE_VOI_LUT | VOI LUT module
MODULE_VOI_LUT_KEY | VOI LUT Key
MODULE_WAVEFORM | Waveform
MODULE_WAVEFORM_ANNOTATION | Waveform annotation
MODULE_WAVEFORM_IDENTIFICATION | Waveform identification
MODULE_XA_ACQUISITION | X-Ray Angiographic Acquisition module
MODULE_XA_ACQUISITION_DOSE | X-Ray Angiographic Acquisition Dose Module
MODULE_XA_COLLIMATOR | X-Ray Angiographic Collimator module
MODULE_XA_FILTRATION | X-Ray Angiographic Filtration Module
MODULE_XA_GENERATION | X-Ray Angiographic Generation Module
MODULE_XA_GRID | X-Ray Angiographic Grid Module
MODULE_XA_IMAGE | X-Ray Angiographic Image module
MODULE_XA_POSITIONER | X-Ray Angiographic Positioner module
MODULE_XA_TABLE | X-Ray Angiographic Table module
MODULE_XRF_POSITIONER | X-Ray Radiofluoroscopic Positioner module
MODULE_XRF_TOMO_ACQUISITION | X-Ray Radiofluoroscopic Tomography Acquisition module


IOD Usage Constants

The following constants are used to indicate the usage of Information Object Definitions.

Code constant | Code value and meaning
IOD_USAGE_M | [0x00] Mandatory IOD
IOD_USAGE_C | [0x01] Conditional IOD
IOD_USAGE_U | [0x02] Optional IOD
IOD_USAGE_1 | [0x03] Mandatory IOD - type 1
IOD_USAGE_1C | [0x04] Conditional IOD - type 1
IOD_USAGE_2 | [0x05] Mandatory IOD - type 2
IOD_USAGE_2C | [0x06] Conditional IOD - type 2
IOD_USAGE_3 | [0x07] Optional IOD - type 3


JPEG 2000 Plug In Support Instructions

To implement JPEG 2000 Plug In support, you must do the following:

1. Find the JPEG 2000 Plug In key on the JPEG 2000 Plug In Certificate e-mailed to you.

2. Use the JPEG 2000 Plug In keyword with the LSettings::UnlockSupport function to implement JPEG 2000 Plug In support in your application.


LEADTOOLS Documentation

LEADTOOLS Reference Manuals

LEADTOOLS provides reference manuals that contain the same information as the online help. You can print them from PDF files. Please note that due to the large size of the PDF files that contain the LEADTOOLS manuals, these files are no longer included in the setup. Instead, these PDF files can be downloaded from our website at http://support.leadtools.com/SupportPortal/DesktopDefault.aspx?tabindex=3&tabid=27.

To print the PDF files, you must use the Adobe Acrobat Reader 3.0 or higher. You can download a copy of the Acrobat Reader from the Adobe web site (http://www.adobe.com/). Note that different versions of the Acrobat Reader are available for different operating systems, but they all can read the same PDF files.


N-ACTION-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-ACTION-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000003 | Requested SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0130
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00001001 | Requested SOP Instance UID | UI | 1 | M
0x00001008 | Action Type ID | US | 1 | M
Data Set | Action Information - Application-specific Data Set containing additional information related to the operation |  |  | U


N-ACTION-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-ACTION-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8130
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U
0x00001008 | Action Type ID | US | 1 | C
Data Set | Action Reply - Application-specific Data Set containing additional information related to the operation |  |  | C


N-CREATE-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-CREATE-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0140
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00001000 | Affected SOP Instance UID | UI | 1 | U
Data Set | Attribute List - This field is encoded as a Data Set. One Data Element is encoded for each Attribute and Attribute Value application to the operation |  |  | U


N-CREATE-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-CREATE-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8140
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | C
Data Set | Attribute List - This field is encoded as a Data Set. One Data Element is encoded for each Attribute and Attribute Value application to the operation |  |  | U


N-DELETE-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-DELETE-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000003 | Requested SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0150
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00001001 | Requested SOP Instance UID | UI | 1 | M


N-DELETE-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-DELETE-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8150
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U


N-EVENT-REPORT-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-EVENT-REPORT-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0100
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00001000 | Affected SOP Instance UID | UI | 1 | M
Data Set | Event Information - Application-specific Data Set containing additional information related to the operation |  |  | U


N-EVENT-REPORT-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-EVENT-REPORT-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8100
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U
0x00001002 | Event Type ID | US | 1 | C
Data Set | Event Reply - Application-specific Data Set containing additional information related to the operation |  |  | C


N-GET-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-GET-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000003 | Requested SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0110
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_ABSENT
0x00001001 | Requested SOP Instance UID | UI | 1 | M
0x00001005 | Attribute Identifier List | AT | -1 | U


N-GET-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-GET-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8110
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U
Data Set | Attribute List - This field is encoded as a Data Set. One Data Element is encoded for each Attribute Value returned |  |  | C


N-SET-REQUEST Default Table

The following table provides default information about the Command Elements contained in the N-SET-REQUEST Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000003 | Requested SOP Class UID | UI | 1 | M
0x00000100 | Command Field | US | 1 | 0x0120
0x00000110 | Message ID | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT
0x00001001 | Requested SOP Instance UID | UI | 1 | M
Data Set | Modification List - This field is encoded as a Data Set. One Data Element is encoded for each Attribute and Attribute Value applicable to the operation |  |  | M


N-SET-RESPONSE Default Table

The following table provides default information about the Command Elements contained in the N-SET-RESPONSE Command Set.

In the column headings the following abbreviations apply:

VR = Value Representation

VM = Value Multiplicity

In the Usage column the following abbreviations apply:

U = Use is a service user option.

C = Conditional

M = Mandatory

For more information about Value Representations, refer to Default Value Representation Table.

To see a list of the default tag constants for the command sets data elements, refer to Data Element Tag Constants for the Command Sets

Tag | Name | VR | VM | Usage
0x00000002 | Affected SOP Class UID | UI | 1 | U
0x00000100 | Command Field | US | 1 | 0x8120
0x00000120 | Message ID Being Responded To | US | 1 | M
0x00000800 | Data Set Type | US | 1 | COMMAND_DATASET_PRESENT or COMMAND_DATASET_ABSENT
0x00000900 | Status | US | 1 | M
0x00001000 | Affected SOP Instance UID | UI | 1 | U
Data Set | Attribute List - This field is encoded as a Data Set. One Data Element is encoded for each Attribute and Attribute Value application to the operation |  |  | U


Raster Pro/Document/Medical Features

Raster Pro:

LEADTOOLS Raster Imaging Pro provides some imaging capabilities that are not available in the LEADTOOLS Raster Imaging product. In order to access these features, you must unlock them by calling LSettings::UnlockSupport (L_SUPPORT_LTPRO, L_KEY_LTPRO). L_KEY_LTPRO can be found in ltkey.h.

If you are a licensed user of LEADTOOLS Raster Imaging, and would like to access Raster Imaging Pro features, you must contact Tech Support for information on obtaining a license and the unlock key for calling LSettings::UnlockSupport.

Document/Medical:

LEADTOOLS Document Imaging, LEADTOOLS Document Imaging Suite, LEADTOOLS Medical Imaging and LEADTOOLS Medical Imaging Suite are the most comprehensive imaging toolkits on the market. No other toolkit provides as many imaging features for color, gray-scale and black & white images in one development package, and for one price. These toolkits comprise LEAD's best code and are designed for the programmer who is looking for the fastest performance, and/or the most extensive color, document, and medical imaging capabilities available.

These toolkits contain powerful annotation capabilities and optimized document image processing filters, and high performance compression, decompression and viewing of JPEG, LEAD CMP, MRC and CCITT G3/G4. The annotation capabilities enable the programmer to add text, highlights, sticky notes, audio, ellipses, buttons, lines, arrows, rectangles, polygons, redaction (blackout), hotspots, freehand scribble, pointers, bitmap and text stamps, to black & white and color images. Programmers working with document imaging will also find special processing filters such as despeckle, deskew, favor black, and scale to gray to enhance their black and white 1 bit images. Additionally, you can achieve faster rotation in 90-degree increments by applying a rotated view perspective to the bitmap. These LEADTOOLS toolkits offer the fastest software-only JPEG decoder available.

LEADTOOLS Document Imaging

The LEADTOOLS Document Imaging toolkit contains all the features available in the LEADTOOLS Raster Imaging Pro. In addition, it contains the following capabilities:

Special functions for Document (bitonal) images. The LEADTOOLS functions for bitonal images are especially useful for working with images from black-and-white scanners or FAX machines. These functions let you do things such as automatically straighten (deskew) an image, remove spots (despeckle), or clarify a scaled display (using scale-to-gray and favor-black features).

Annotation. LEADTOOLS supports annotation of images by letting you overlay images with text, lines, shapes, arrows, buttons, highlights, hot spots, sticky notes, stamps, buttons, and sounds.

Fast rotation. LEADTOOLS achieves fast rotation in 90-degree increments by applying a rotated view perspective to the bitmap.

ISIS support. LEADTOOLS supports ISIS interfaces for driving scanning devices.

Faster compression and decompression. The Document/Medical editions work faster when loading and saving LEAD CMP, JPEG, and CCITT Group 3 and Group 4 images. The LEADTOOLS functions for loading and saving are the same in all products. The only difference is in performance.

1-bit Image Clean-up. The Document toolkits include support for removing dots, blobs, holes, inverted text, lines, borders, bumps and nicks from 1-bit images.

Region Clean-up. [Document/Medical] Remove all the holes from a region.

Embedded Messages. The Document toolkits include support for embedding messages in lossless image formats like bmp, tiff, lossless jpeg, etc. The message is embedded without any visible changes to the image, and does not appreciably increase the size of the image. The message is password-protected.

Image Conversion. The Document toolkits include support for transforming a bitmap into a binary image using specified thresholds or a threshold calculated automatically based on statistical features of the bitmap.

12 and 16 bit grayscale images. [Document/Medical] Load, process, display, window level and save 12 and 16 bit grayscale images (including support for 16-bit grayscale TIFF).

48 and 64 bit color images. [Document/Medical] Load, process, display, and save 48 and 64 bit color images.

MRC Support. [Document/Medical] LEADTOOLS supports the Mixed Raster Content format for color documents containing mixed image and text components. For more information, refer to the

Halftoning. [Document/Medical] Convert 1-, 4-, 8-, 16-, 24-, or 32-bit bitmaps to a halftoned bitmap, with a specified pattern rotation. A halftoned bitmap is a 1-bit bitmap that has been dithered for black and white printing or display.

LEADTOOLS Document Imaging Suite

The LEADTOOLS Document Imaging Suite toolkit contains all the capabilities of LEADTOOLS Document Imaging, and includes the features listed below. Please note that the OCR features are included in this toolkit, however they can also be purchased as a plug-in for the LEADTOOLS Document Imaging toolkit. Also, JBIG support is provided in this toolkit, however a JBIG Module may be added on to LEADTOOLS Document Imaging, LEADTOOLS Medical Imaging or LEADTOOLS Medical Imaging Suite.

OCR features. [Document/Medical] LEAD offers OCR features that use Scansoft Textbridge technology. Support for these features is included in the LEADTOOLS Document Imaging Suite, and can be added, via plug-in to the LEADTOOLS Document Imaging, LEADTOOLS Medical Imaging and LEADTOOLS Medical Imaging Suite toolkits. The OCR features allow you to perform optical character recognition and turn images into documents. Features include preset confidence and accuracy levels for controlling how sensitive the engine is to unrecognized text, artificial intelligence for improving recognition on documents of the same type, and built-in and user-defined lexicons for limiting the type of text to recognize within a particular zone. LEADTOOLS provides the ability to verify or correct text during, and (using LEAD's unique OCR editor) after recognition. LEAD's OCR editor ties the text being edited directly to the image, providing a visual reference to the original bitmap data. The OCR engine can perform Automatic area segmentation creating multi-layered zones, recognizing areas such as tables, rules, images and text. Or, you can manually designate up to 250 such zones. The OCR features support different fonts, sizes (5 to 72 point) and styles. Fax, dot matrix and halftones can be preprocessed to improve recognition results. The OCR Engine supports major European and Scandinavian languages (Danish, Dutch, Finnish, French, German, Italian, Norwegian, Portuguese, Russian, Spanish, and Swedish) as well as English. Support for dialects such as US. English, French Canadian, Latin American Spanish, Swiss German, and Brazilian Portuguese is also provided.

Recognized text can be exported to more than 40 different formats, including MS Word, MS Excel, Dbase andWordPerfect. The LEADTOOLS OCR features contain superior OCR processing speeds, for use in form recognition and processing applications.

LEAD's JBIG filter. [Document/Medical] LEAD includes support for this filter in the LEADTOOLS Document Imaging Suite toolkit. Support for this filter can be added to LEADTOOLS Document Imaging, LEADTOOLS Medical Imaging or LEADTOOLS Medical Imaging Suite by purchasing the JBIG Module. JBIG defines a method for lossless compression encoding of a bi-level image (two-color image). This method can also be used for coding grayscale and color images. LEADTOOLS completely supports all three types of images, giving you the ability to make full use of this powerful compression technology. LEADTOOLS also supports the progressive capability of JBIG, allowing you to store and send multiple representations of images at different resolutions without any extra storage overhead.

LEADTOOLS Medical Imaging

LEADTOOLS Medical Imaging contains all the capabilities of LEADTOOLS Document Imaging. It also includes general medical imaging technologies (1-16,24,32 bit color, 1-16 bit grayscale and window leveling of 12 and 16-bit grayscale images) and support for the DICOM file format.

DICOM file support. [Medical] LEADTOOLS Medical Imaging provides COMPLETE support for the DICOM 3.0 specification, including all standard IOD classes and modalities (CR, CT, MR, NM, US, RF, SC, VL, etc.) and complete DICOM Basic Directory support.

Window leveling. [Document/Medical] Detect and set LowBit and HighBit for image data, display images with automatic LUT intensity expansion, or set LUT entries and ranges with specific values and gradients. Display images through the LUT without changing the data, or process the image data using the LUT. Linearize the number of pixels locally in a bitmap, based on the specified color space in order to bring out the detail in dark areas of an image, and smooth the edges between blocks.

Medical Imaging Processing. [Medical] LEADTOOLS Medical Imaging provides image processing functionality designed specifically to allow you to examine and improve the quality of medical images.

LEADTOOLS Medical Imaging Suite

LEADTOOLS Medical Imaging Suite contains all the capabilities of LEADTOOLS Medical Imaging. In addition, it supports the following:

DICOM Communication support. [Medical Suite] LEADTOOLS provides COMPLETE support for DICOM Communications, including all Service Classes (Verification, Storage, Query/Retrieve, Patient Management, etc), and contains high-level communications functions simplifying the creation of DICOM client/server applications.

(Document/Medical) is used in the documentation to designate the features that are available in LEADTOOLS Document Imaging, LEADTOOLS Document Imaging Suite, LEADTOOLS Medical Imaging and LEADTOOLS Medical Imaging Suite. Those features that are available only in the Medical toolkits are indicated in the documentation by (Medical). Features available only in the LEADTOOLS Medical Imaging Suite toolkit are indicated in the documentation by (Medical Suite).

(Internet only) is used in the documentation to designate the features that are available only in the LEADTOOLS Internet toolkit.

For more information, refer to Document/Medical Edition Support and Licensing Requirements .


Status Values

Value | Meaning
COMMAND_STATUS_SUCCESS | [0x0000] Success
COMMAND_STATUS_CANCEL | [0xFE00] Cancel
COMMAND_STATUS_ATTRIBUTE_LIST_ERROR | [0x0107] Attribute list error
COMMAND_STATUS_ATTRIBUTE_OUT_OF_RANGE | [0x0116] Attribute Value Out of Range
COMMAND_STATUS_CLASS_NOT_SUPPORTED | [0x0122] Class not supported
COMMAND_STATUS_CLASE_INSTANCE_CONFLICT | [0x0119] Class-instance conflict
COMMAND_STATUS_DUPLICATE_INSTANCE | [0x0111] Duplicate instance
COMMAND_STATUS_DUPLICATE_INVOCATION | [0x0210] Duplicate invocation
COMMAND_STATUS_INVALID_ARGUMENT_VALUE | [0x0115] Invalid argument value
COMMAND_STATUS_INVALID_ATTRIBUTE_VALUE | [0x0106] Invalid attribute value
COMMAND_STATUS_INVALID_OBJECT_INSTANCE | [0x0117] Invalid object instance
COMMAND_STATUS_MISSING_ATTRIBUTE | [0x0120] Missing attribute
COMMAND_STATUS_MISSING_ATTRIBUTE_VALUE | [0x0121] Missing attribute value
COMMAND_STATUS_MISTYPED_ARGUMENT | [0x0212] Mistyped argument
COMMAND_STATUS_NO_SUCH_ARGUMENT | [0x0114] No such argument
COMMAND_STATUS_NO_SUCH_ATTRIBUTE | [0x0105] No such attribute
COMMAND_STATUS_NO_SUCH_EVENT_TYPE | [0x0113] No such event type
COMMAND_STATUS_NO_SUCH_OBJECT_INSTANCE | [0x0112] No such object instance
COMMAND_STATUS_NO_SUCH_CLASS | [0x0118] No such class
COMMAND_STATUS_NO_SUCH_ACTION_TYPE | [0x0123] No such action type
COMMAND_STATUS_PROCESSING_FAILURE | [0x0110] Processing failure
COMMAND_STATUS_RESOURCE_LIMITATION | [0x0213] Resource limitation
COMMAND_STATUS_UNRECOGNIZED_OPERATION | [0x0211] Unrecognized operation
COMMAND_STATUS_PENDING | [0xFF00] Matches are continuing - Current Match is supplied and any Optional Keys were supported in the same manner as Required Keys.
COMMAND_STATUS_PENDING_WARNING | [0xFF01] Matches are continuing - Warning that one or more Optional Keys were not supported for existence and/or matching for this Identifier.


Transfer Syntax Values

Value | Meaning
UID_IMPLICIT_VR_LITTLE_ENDIAN | "1.2.840.10008.1.2"
UID_EXPLICIT_VR_LITTLE_ENDIAN | "1.2.840.10008.1.2.1"
UID_EXPLICIT_VR_BIG_ENDIAN | "1.2.840.10008.1.2.2"
UID_JPEG_BASELINE_1 | "1.2.840.10008.1.2.4.50"
UID_JPEG_EXTENDED_2_4 | "1.2.840.10008.1.2.4.51"
UID_JPEG_EXTENDED_3_5 | "1.2.840.10008.1.2.4.52"
UID_JPEG_SPECTRAL_NONHIER_6_8 | "1.2.840.10008.1.2.4.53"
UID_JPEG_SPECTRAL_NONHIER_7_9 | "1.2.840.10008.1.2.4.54"
UID_JPEG_FULL_NONHIER_10_12 | "1.2.840.10008.1.2.4.55"
UID_JPEG_FULL_NONHIER_11_13 | "1.2.840.10008.1.2.4.56"
UID_JPEG_LOSSLESS_NONHIER_14 | "1.2.840.10008.1.2.4.57"
UID_JPEG_LOSSLESS_NONHIER_15 | "1.2.840.10008.1.2.4.58"
UID_JPEG_EXTENDED_HIER_16_18 | "1.2.840.10008.1.2.4.59"
UID_JPEG_EXTENDED_HIER_17_19 | "1.2.840.10008.1.2.4.60"
UID_JPEG_SPECTRAL_HIER_20_22 | "1.2.840.10008.1.2.4.61"
UID_JPEG_SPECTRAL_HIER_21_23 | "1.2.840.10008.1.2.4.62"
UID_JPEG_FULL_HIER_24_26 | "1.2.840.10008.1.2.4.63"
UID_JPEG_FULL_HIER_25_27 | "1.2.840.10008.1.2.4.64"
UID_JPEG_LOSSLESS_HIER_PROCESS_28 | "1.2.840.10008.1.2.4.65"
UID_JPEG_LOSSLESS_HIER_PROCESS_29 | "1.2.840.10008.1.2.4.66"
UID_JPEG_LOSSLESS_NONHIER_14B | "1.2.840.10008.1.2.4.70"
UID_JPEG2000_LOSSLESS_ONLY | "1.2.840.10008.1.2.4.90"
UID_JPEG2000 | "1.2.840.10008.1.2.4.91"
UID_RLE_LOSSLESS | "1.2.840.10008.1.2.5"


UID Table

The following is a list of default values for the Unique Identifiers that are standard for the DICOM file format.

Code | Name
1.2.840.10008.1.1 | Verification SOP Class
1.2.840.10008.1.2 | Implicit VR Little Endian
1.2.840.10008.1.2.1 | Explicit VR Little Endian
1.2.840.10008.1.2.1.99 | Deflated Explicit VR Little Endian
1.2.840.10008.1.2.2 | Explicit VR Big Endian
1.2.840.10008.1.2.4.50 | JPEG Baseline (Process 1)
1.2.840.10008.1.2.4.51 | JPEG Extended (Process 2 & 4)
1.2.840.10008.1.2.4.52 | JPEG Extended (Process 3 & 5)
1.2.840.10008.1.2.4.53 | JPEG Spectral Selection, Non-Hierarchical (Process 6 & 8)
1.2.840.10008.1.2.4.54 | JPEG Spectral Selection, Non-Hierarchical (Process 7 & 9)
1.2.840.10008.1.2.4.55 | JPEG Full Progression, Non-Hierarchical (Process 10 & 12)
1.2.840.10008.1.2.4.56 | JPEG Full Progression, Non-Hierarchical (Process 11 & 13)
1.2.840.10008.1.2.4.57 | JPEG Lossless, Non-Hierarchical (Process 14)
1.2.840.10008.1.2.4.58 | JPEG Lossless, Non-Hierarchical (Process 15)
1.2.840.10008.1.2.4.59 | JPEG Extended, Hierarchical (Process 16 & 18)
1.2.840.10008.1.2.4.60 | JPEG Extended, Hierarchical (Process 17 & 19)
1.2.840.10008.1.2.4.61 | JPEG Spectral Selection, Hierarchical (Process 20 & 22)
1.2.840.10008.1.2.4.62 | JPEG Spectral Selection, Hierarchical (Process 21 & 23)
1.2.840.10008.1.2.4.63 | JPEG Full Progression, Hierarchical (Process 24 & 26)
1.2.840.10008.1.2.4.64 | JPEG Full Progression, Hierarchical (Process 25 & 27)
1.2.840.10008.1.2.4.65 | JPEG Lossless, Hierarchical (Process 28)
1.2.840.10008.1.2.4.66 | JPEG Lossless, Hierarchical (Process 29)
1.2.840.10008.1.2.4.70 | JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])
1.2.840.10008.1.2.4.80 | JPEG-LS Lossless Image Compression Transfer Syntax
1.2.840.10008.1.2.4.81 | JPEG-LS Lossy (Near-Lossless) Image Compression Transfer Syntax
1.2.840.10008.1.2.4.90 | JPEG 2000 Lossless
1.2.840.10008.1.2.4.91 | JPEG 2000 Lossy
1.2.840.10008.1.2.5 | RLE Lossless
1.2.840.10008.1.3.10 | Media Storage Directory Storage
1.2.840.10008.1.9 | Basic Study Content Notification SOP Class
1.2.840.10008.1.20.1 | Storage Commitment Push Model SOP Class
1.2.840.10008.1.20.1.1 | Storage Commitment Push Model SOP Instance
1.2.840.10008.1.20.2 | Storage Commitment Pull Model SOP Class
1.2.840.10008.1.20.2.1 | Storage Commitment Pull Model SOP Instance
1.2.840.10008.2.16.4 | DICOM Controlled Terminology
1.2.840.10008.3.1.1.1 | DICOM Application Context Name
1.2.840.10008.3.1.2.1.1 | Detached Patient Management SOP Class
1.2.840.10008.3.1.2.1.4 | Detached Patient Management Meta SOP Class
1.2.840.10008.3.1.2.2.1 | Detached Visit Management SOP Class
1.2.840.10008.3.1.2.3.1 | Detached Study Management SOP Class
1.2.840.10008.3.1.2.3.2 | Study Component Management SOP Class
1.2.840.10008.3.1.2.3.3 | Modality Performed Procedure Step SOP Class
1.2.840.10008.3.1.2.3.4 | Modality Performed Procedure Step Retrieve SOP Class
1.2.840.10008.3.1.2.3.5 | Modality Performed Procedure Step Notification SOP Class
1.2.840.10008.3.1.2.5.1 | Detached Results Management SOP Class
1.2.840.10008.3.1.2.5.4 | Detached Results Management Meta SOP Class
1.2.840.10008.3.1.2.5.5 | Detached Study Management Meta SOP Class
1.2.840.10008.3.1.2.6.1 | Detached Interpretation Management SOP Class
1.2.840.10008.5.1.1.1 | Basic Film Session SOP Class
1.2.840.10008.5.1.1.2 | Basic Film Box SOP Class
1.2.840.10008.5.1.1.4 | Basic Grayscale Image Box SOP Class
1.2.840.10008.5.1.1.4.1 | Basic Color Image Box SOP Class
1.2.840.10008.5.1.1.4.2 | Referenced Image Box SOP Class (Retired)
1.2.840.10008.5.1.1.9 | Basic Grayscale Print Management Meta SOP Class
1.2.840.10008.5.1.1.9.1 | Referenced Grayscale Print Management Meta SOP Class (Retired)
1.2.840.10008.5.1.1.14 | Print Job SOP Class
1.2.840.10008.5.1.1.15 | Basic Annotation Box SOP Class
1.2.840.10008.5.1.1.16 | Printer SOP Class
1.2.840.10008.5.1.1.16.376 | Printer Configuration Retrieval Class
1.2.840.10008.5.1.1.17 | Printer SOP Instance
1.2.840.10008.5.1.1.17.376 | Printer Configuration Retrieval Instance
1.2.840.10008.5.1.1.18 | Basic Color Print Management Meta SOP Class
1.2.840.10008.5.1.1.18.1 | Referenced Color Print Management Meta SOP Class (Retired)
1.2.840.10008.5.1.1.22 | VOI LUT Box SOP Class (Retired)
1.2.840.10008.5.1.1.23 | Presentation LUT SOP Class
1.2.840.10008.5.1.1.24 | Image Overlay Box SOP Class (Retired)
1.2.840.10008.5.1.1.24.1 | Basic Print Image Overlay Box Class
1.2.840.10008.5.1.1.25 | Print Queue SOP Instance
1.2.840.10008.5.1.1.26 | Print Queue Management SOP Class
1.2.840.10008.5.1.1.27 | Stored Print Storage SOP Class
1.2.840.10008.5.1.1.29 | Hardcopy Grayscale Image Storage SOP Class
1.2.840.10008.5.1.1.30 | Hardcopy Color Image Storage SOP Class
1.2.840.10008.5.1.1.31 | Pull Print Request SOP Class
1.2.840.10008.5.1.1.32 | Pull Stored Print Management Meta SOP Class
1.2.840.10008.5.1.4.1.1.1 | Computed Radiography Image Storage
1.2.840.10008.5.1.4.1.1.1.1 | Digital X-ray Image Storage Presentation
1.2.840.10008.5.1.4.1.1.1.1.1 | Digital X-ray Image Storage Processing
1.2.840.10008.5.1.4.1.1.1.2 | Digital X-ray Mammography Image Storage Presentation
1.2.840.10008.5.1.4.1.1.1.2.1 | Digital X-ray Mammography Image Storage Processing
1.2.840.10008.5.1.4.1.1.1.3 | Digital X-ray Intra-oral Image Storage Presentation
1.2.840.10008.5.1.4.1.1.1.3.1 | Digital X-ray Intra-oral Image Storage Processing
1.2.840.10008.5.1.4.1.1.2 | Computed Tomography Image Storage
1.2.840.10008.5.1.4.1.1.3 | Ultrasound Multi-frame Image Storage (Retired)
1.2.840.10008.5.1.4.1.1.3.1 | Ultrasound Multi-frame Image Storage
1.2.840.10008.5.1.4.1.1.4 | Magnetic Resonance Image Storage
1.2.840.10008.5.1.4.1.1.4.1 | Enhanced MR Image Storage
1.2.840.10008.5.1.4.1.1.4.2 | MR Spectroscopy Storage
1.2.840.10008.5.1.4.1.1.5 | Nuclear Medicine Image Storage (Retired)
1.2.840.10008.5.1.4.1.1.6 | Ultrasound Image Storage (Retired)
1.2.840.10008.5.1.4.1.1.6.1 | Ultrasound Image Storage
1.2.840.10008.5.1.4.1.1.7 | Secondary Capture Image Storage
1.2.840.10008.5.1.4.1.1.7.1 | Multi-frame Single Bit Secondary Capture Image Storage
1.2.840.10008.5.1.4.1.1.7.2 | Multi-frame Grayscale Byte Secondary Capture Image Storage
1.2.840.10008.5.1.4.1.1.7.3 | Multi-frame Grayscale Word Secondary Capture Image Storage
1.2.840.10008.5.1.4.1.1.7.4 | Multi-frame True Color Secondary Capture Image Storage
1.2.840.10008.5.1.4.1.1.8 | Standalone Overlay Storage
1.2.840.10008.5.1.4.1.1.9 | Standalone Curve Storage
1.2.840.10008.5.1.4.1.1.9.1.3 | Ambulatory ECG Waveform Storage
1.2.840.10008.5.1.4.1.1.9.2.1 | Hemodynamic Waveform Storage
1.2.840.10008.5.1.4.1.1.9.3.1 | Cardiac Electrophysiology Waveform Storage
1.2.840.10008.5.1.4.1.1.9.4.1 | Basic Voice Audio Waveform Storage
1.2.840.10008.5.1.4.1.1.10 | Standalone Modality LUT Storage
1.2.840.10008.5.1.4.1.1.11 | Standalone VOI LUT Storage
1.2.840.10008.5.1.4.1.1.11.1 | Grayscale Softcopy Presentation State Storage
1.2.840.10008.5.1.4.1.1.12.1 | X-Ray Angiographic Image Storage
1.2.840.10008.5.1.4.1.1.12.2 | X-Ray Radiofluoroscopic Image Storage
1.2.840.10008.5.1.4.1.1.12.3 | X-Ray Angiographic Bi-Plane Image Storage (Retired)
1.2.840.10008.5.1.4.1.1.20 | Nuclear Medicine Image Storage
1.2.840.10008.5.1.4.1.1.66 | Raw Data Storage
1.2.840.10008.5.1.4.1.1.77.1 | Visible Light Storage (Retired)
1.2.840.10008.5.1.4.1.1.77.2 | Visible Light Multiframe Image Storage (Retired)
1.2.840.10008.5.1.4.1.1.77.1.1 | Visible Light Endoscopic Image Storage Class
1.2.840.10008.5.1.4.1.1.77.1.2 | Visible Light Microscopic Image Storage Class
1.2.840.10008.5.1.4.1.1.77.1.3 | Visible Light Slide Coordinates Microscopic Image Storage Class
1.2.840.10008.5.1.4.1.1.77.1.4 | Visible Light Photographic Image Storage Class
1.2.840.10008.5.1.4.1.1.77.1.5.1 | Ophthalmic Photography 8 Bit Image Storage
1.2.840.10008.5.1.4.1.1.77.1.5.2 | Ophthalmic Photography 16 Bit Image Storage
1.2.840.10008.5.1.4.1.1.77.1.5.3 | Stereometric Relationship Storage
1.2.840.10008.5.1.4.1.1.88.11 | Basic Text Structured Reporting
1.2.840.10008.5.1.4.1.1.88.22 | Enhanced Structured Reporting
1.2.840.10008.5.1.4.1.1.88.33 | Comprehensive Structured Reporting
1.2.840.10008.5.1.4.1.1.88.50 | Mammography CAD SR
1.2.840.10008.5.1.4.1.1.88.59 | Key Object Selection Document
1.2.840.10008.5.1.4.1.1.88.65 | Chest CAD SR
1.2.840.10008.5.1.4.1.1.128 | Positron Emission Tomography Image Storage
1.2.840.10008.5.1.4.1.1.129 | Standalone Positron Emission Tomography Curve Storage
1.2.840.10008.5.1.4.1.1.481.1 | Radiotherapy Image Storage
1.2.840.10008.5.1.4.1.1.481.2 | Radiotherapy Dose Storage
1.2.840.10008.5.1.4.1.1.481.3 | Radiotherapy Structure Set Storage
1.2.840.10008.5.1.4.1.1.481.4 | Radiotherapy Beams Treatment Record Storage Class
1.2.840.10008.5.1.4.1.1.481.5 | Radiotherapy Plan Storage
1.2.840.10008.5.1.4.1.1.481.6 | Radiotherapy Brachy Treatment Record Storage Class
1.2.840.10008.5.1.4.1.1.481.7 | Radiotherapy Treatment Summary Record Storage Class
1.2.840.10008.5.1.4.1.2.1.1 | Patient Root Query/Retrieve Information Model - FIND
1.2.840.10008.5.1.4.1.2.1.2 | Patient Root Query/Retrieve Information Model - MOVE
1.2.840.10008.5.1.4.1.2.1.3 | Patient Root Query/Retrieve Information Model - GET
1.2.840.10008.5.1.4.1.2.2.1 | Study Root Query/Retrieve Information Model - FIND
1.2.840.10008.5.1.4.1.2.2.2 | Study Root Query/Retrieve Information Model - MOVE
1.2.840.10008.5.1.4.1.2.2.3 | Study Root Query/Retrieve Information Model - GET
1.2.840.10008.5.1.4.1.2.3.1 | Patient/Study Only Query/Retrieve Information Model - FIND
1.2.840.10008.5.1.4.1.2.3.2 | Patient/Study Only Query/Retrieve Information Model - MOVE
1.2.840.10008.5.1.4.1.2.3.3 | Patient/Study Only Query/Retrieve Information Model - GET
1.2.840.10008.5.1.4.31 | Modality Worklist Information Model - FIND
1.2.840.10008.5.1.4.32 | General Purpose Worklist Management Meta SOP Class
1.2.840.10008.5.1.4.32.1 | General Purpose Worklist Information Model – FIND
1.2.840.10008.5.1.4.32.2 | General Purpose Scheduled Procedure Step SOP Class
1.2.840.10008.5.1.4.32.3 | General Purpose Performed Procedure Step SOP Class


Value Representation Constants

The following constants are used to indicate the Value Representation.

Value | Meaning
VR_AE | [0x4145U] Application Entity
VR_AS | [0x4153U] Age String
VR_AT | [0x4154U] Attribute Tag
VR_CS | [0x4353U] Code String
VR_DA | [0x4441U] Date
VR_DS | [0x4453U] Decimal String
VR_DT | [0x4454U] Date Time
VR_FD | [0x4644U] Floating Point Double
VR_FL | [0x464CU] Floating Point Single
VR_IS | [0x4953U] Integer String
VR_LO | [0x4C4FU] Long String
VR_LT | [0x4C54U] Long Text
VR_OB | [0x4F42U] Other Byte String
VR_OF | [0x4F46U] Other Float String
VR_OW | [0x4F57U] Other Word String
VR_PN | [0x504EU] Person Name
VR_SH | [0x5348U] Short String
VR_SL | [0x534CU] Signed Long
VR_SQ | [0x5351U] Sequence of Items
VR_SS | [0x5353U] Signed Short
VR_ST | [0x5354U] Short Text
VR_TM | [0x544DU] Time
VR_UI | [0x5549U] Unique Identifier
VR_UL | [0x554CU] Unsigned Long
VR_UN | [0x554EU] Unknown
VR_US | [0x5553U] Unsigned Short
VR_UT | [0x5554U] Unlimited Text


Topic Selection

LEAD Technologies, Inc.
Suite 400
1201 Greenwood Cliff
Charlotte, NC 28204

Sales@Leadtools.com
www.leadtools.com

(704) 332-5532
FAX: (704) 372-8161
Tech Support: (704) 372-9681

LEADTOOLS is ideal for developers involved in still frame, multimedia, document, medical, and vector imaging projects, including Internet/Intranet applications. Independent of the specific application requirement – scanning, file format support/conversion, compression, image processing, annotation, database support, multimedia, etc. – LEADTOOLS provides the most comprehensive, robust, flexible, and powerful imaging solution available.

Click this button to start the Licensing help file to review the License Agreements governing your use of the software.

Click this button to start the Products help file to review the full line of LEADTOOLS Products.

Click this button to start the Imaging help file to review the full line of LEADTOOLS Image Categories.