←Select platform

SetStringValuePtr(DicomElement,IntPtr,int) Method

Summary
Sets the string value(s) of a Data Element.
Syntax
C#
C++/CLI
public bool SetStringValuePtr( 
   DicomElement element, 
   IntPtr value, 
   int count 
) 
public: 
bool SetStringValuePtr(  
   DicomElement^ element, 
   IntPtr value, 
   int count 
)  

Parameters

element
An item in the Data Set.

value
Pointer to buffer 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 buffer and set count to the appropriate number of values.

count
Value that represents 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 value and set count to the appropriate number.

Return Value

true if The string value(s) were set successfully. false if Could not set the string value(s) of the Data Element.

Remarks

Note: You must allocate the memory for value. This overload of SetStringValuePtr differs from other versions (SetStringValuePtr) in that it is missing the last argument (DicomCharacterSetType). This overload is affected by the value(s) in the Specific Character Set (0008,0005) Attribute.

The following DICOM Value Representations are affected by Attribute Specific Character Set (0008,0005)

  • SH (Short String)
  • LO (Long String)
  • ST (Short Text)
  • LT (Long Text)
  • UT (Unlimited Text)
  • PN (Person Name)

If element is one of these Value Representations and the string cannot be represented using the standard character set (ASCII characters), then this overload attempts to encode the string using one or character sets stored in the Specific Character Set Attribute (0008,0005). Before calling this method with unicode strings, make sure that the Specific Character Set Attribute of the DicomDataSet contains values for any character set that is necessary. For example, when encoding a japanese string the following are some of the possible values for specific character:

  • "ISO_IR 192" (Unicode in UTF-8)
  • "ISO_IR 13" (Japanese, single-byte, no code extensions)
  • "\ISO 2022 IR 87" (Default, JIS X 0208)
  • "ISO 2022 IR 13\ISO 2022 IR 87" (JIS X 0201, JIS X 0208)

For more information, see Part 3 section 'C.12.1.1.2 Specific Character Set' of the DICOM Specification.

If you want to set more than one value in the Value Field of the Data Element, put all the string values in value and set count 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 value, separated by the "0" delimiter and set count to three. For example, the illustration below shows a character string, containing three strings separated by the 0 delimiter.

string.gif

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 method can be called only if the Value Representation of the Data Element is:

For more information about Value Representations, refer to Default Value Representation Table.

Example
C#
using Leadtools; 
using Leadtools.Dicom; 
 
 
/// 
private void DicomSetStringValueTest() 
{ 
   DicomEngine.Startup(); 
 
   DicomDataSet ds = new DicomDataSet(); 
   string japaneseText1 = "亜美"; 
   string japaneseText2 = "千香子"; 
   string[] japaneseStrings = { japaneseText1, japaneseText2 }; 
   DicomElement element; 
 
   // Example 1 - uses Specific Character Set Attribute (0008,0005) to set one string 
   ds.Reset(); 
   element = ds.InsertElement(null, false, DicomTag.PatientName, DicomVRType.PN, false, 0); 
   ds.InsertElementAndSetValue(DicomTag.SpecificCharacterSet, "ISO_IR 192");     // Unicode in UTF-8 
   ds.SetStringValue(element, japaneseText1); 
   string result = ds.GetStringValue(element, 0); 
   Debug.Assert(result == japaneseText1); 
 
   // Example 2 - uses Specific Character Set Attribute (0008,0005) to set two strings 
   ds.Reset(); 
   element = ds.InsertElement(null, false, DicomTag.OtherPatientNames, DicomVRType.PN, false, 0); 
   ds.InsertElementAndSetValue(DicomTag.SpecificCharacterSet, "ISO_IR 192");     // Unicode in UTF-8 
   ds.SetStringValue(element, japaneseStrings); 
   Debug.Assert(ds.GetStringValue(element, 0) == japaneseStrings[0]); 
   Debug.Assert(ds.GetStringValue(element, 1) == japaneseStrings[1]); 
 
   // Example 3 - pass in a DicomCharacterSet and set one string 
   ds.Reset(); 
   element = ds.InsertElement(null, false, DicomTag.PatientName, DicomVRType.PN, false, 0); 
   ds.SetStringValue(element, japaneseText1, DicomCharacterSetType.UnicodeInUtf8); 
   result = ds.GetStringValue(element, 0); 
   Debug.Assert(result == japaneseText1); 
 
   // Example 4 -- pass in a DicomCharacterSet and set two strings 
   ds.Reset(); 
   element = ds.InsertElement(null, false, DicomTag.OtherPatientNames, DicomVRType.PN, false, 0); 
   ds.SetStringValue(element, japaneseStrings, DicomCharacterSetType.UnicodeInUtf8); 
   Debug.Assert(ds.GetStringValue(element, 0) == japaneseStrings[0]); 
   Debug.Assert(ds.GetStringValue(element, 1) == japaneseStrings[1]); 
 
   // Example 5 -- uses Specific Character Set Attribute (0008,0005) to set one string using IntPtr 
   ds.Reset(); 
   GCHandle pinnedArray = GCHandle.Alloc(japaneseText1, GCHandleType.Pinned); 
   IntPtr pointer = pinnedArray.AddrOfPinnedObject(); 
   element = ds.InsertElement(null, false, DicomTag.PatientName, DicomVRType.PN, false, 0); 
   ds.InsertElementAndSetValue(DicomTag.SpecificCharacterSet, "ISO_IR 192");     // Unicode in UTF-8 
   ds.SetStringValuePtr(element, pointer, 1); 
   result = ds.GetStringValue(element, 0); 
   Debug.Assert(result == japaneseText1); 
   pinnedArray.Free(); 
 
   DicomEngine.Shutdown(); 
} 
Requirements

Target Platforms

Help Version 23.0.2024.8.20
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Dicom Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.