←Select platform

SetWindow(int,int,DicomWindowAttributes,DicomSetImageFlags) Method

Summary

Sets the attributes that describe the "Window Center" and "Window Width".

Syntax
C#
VB
C++
Java
Public Overloads Sub SetWindow( _ 
   ByVal frameIndex As Integer, _ 
   ByVal index As Integer, _ 
   ByVal attributes As DicomWindowAttributes, _ 
   ByVal flags As DicomSetImageFlags _ 
)  
public void setWindow(int frameIndex, int index, DicomWindowAttributes attributes, int dicomSetImageFlags) 

Parameters

frameIndex
A zero-based index that identifies the frame number in the dataset. If the dataset does not support Multi-frames, this parameter is ignored.

index
The zero-based index of the window center, window width value, to update. 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.

attributes
The window-related attributes to set.

flags
determines how the VOI LUT is set

Remarks

This method will set the attributes that describe window center and window width.

If "Window Center" (0028,1050) does not already exist in the Data Set, this method will insert it and set its value to WindowCenter.

If "Window Width" (0028,1051) does not already exist in the Data Set, this method will isnert it and set its value to WindowWidth.

The Multi-frame Functional Groups module may have a Shared Functional Groups Sequence item, and/or a Per-frame Functional Groups Sequence item. Either of these items may have a Frame VOI LUT Sequence (0028,9132) item. The uFlags parameter can be used to add or modify existing information in the Frame VOI LUT Sequence. The following flags are used only if the Frame VOI LUT Sequence does not already exist.

  • DicomSetImageFlags.MfgVoiLutPerFrame
  • DicomSetImageFlags.MfgVoiLutShared In this case, the sequence is placed in the sequence indicated by the (Per-frame Functional Groups Sequence or Shared Functional Groups Sequence) flag. If a Frame VOI LUT Sequence already exists in a DICOM dataset, uFlags is ignored and the sequence is placed in the location where sequences already exist.

The specific elements that are read or updated when using these flags are shown below: (0028,9132) Frame VOI LUT Sequence Child Elements

Tag Name
(0028,1050) Window Center
(0028,1051) Window Width
(0028,1055) Window Center & Width Explanation

Valid flags are DicomSetImageFlags.None, DicomSetImageFlags.MfgOverwriteShared, DicomSetImageFlags.MfgVoiLutPerFrame, DicomSetImageFlags.MfgVoiLutShared. All other flags are ignored. For a detailed discussion on Multi-frame Functional Groups see the topic Multi-frame Functional Groups.

Example

This example will initialize a new DICOM command set that supports Multi-frame functional groups Two VOI LUT will be added to the dataset at the per frame level The VOI LUT from the second frame is retrieved Finally, the VOI LUT from the second frame is deleted

C#
VB
using Leadtools; 
using Leadtools.Dicom; 
 
///  
void DicomDataSet_SetWindowExample() 
{ 
   DicomDataSet ds = new DicomDataSet(); 
   DicomDataSetInitializeFlags flags = 
      DicomDataSetInitializeFlags.ExplicitVR | 
      DicomDataSetInitializeFlags.LittleEndian | 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly | 
      DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
      ; 
 
   // Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags); 
 
   // Delete these items -- they will get added again later in the sample 
   // * Shared Functional Group2 Sequence 
   // * Per-frame Functional Group2 Sequence 
 
   DicomElement element = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   element = ds.FindFirstElement(null, DicomTag.SharedFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   // Add a VOI LUT on 0th frame 
   DicomWindowAttributes windowAttributes = new DicomWindowAttributes(); 
 
   windowAttributes.WindowCenter = 32767; 
   windowAttributes.WindowWidth = 65535; 
   windowAttributes.Explanation = "frame 0"; 
   ds.SetWindow(0, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame); 
 
   // Add a second VOI LUT on the 1st frame 
   windowAttributes.WindowCenter = 32000; 
   windowAttributes.WindowWidth = 60000; 
   windowAttributes.Explanation = "frame 1"; 
   ds.SetWindow(1, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame); 
 
   // Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   DicomWindowAttributes windowAttributes2 = ds.GetWindow(1, 0); 
 
   string sMsg = string.Format("Window Center: {0}\nWindowWidth: {1}\nExplanation {2}", 
      windowAttributes.WindowCenter, 
      windowAttributes.WindowWidth, 
      windowAttributes.Explanation); 
   MessageBox.Show(sMsg); 
 
   // Finally, delete the second VOI LUT 
   ds.DeleteWindow(1, DicomSetImageFlags.None); 
 
   // Save the file 
   ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "Test.dcm"), DicomDataSetSaveFlags.None); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; 
} 
Imports Leadtools 
Imports Leadtools.Dicom 
 
'''  
Private Sub DicomDataSet_SetWindowExample() 
   Dim ds As DicomDataSet = New DicomDataSet() 
   Dim flags As DicomDataSetInitializeFlags = DicomDataSetInitializeFlags.ExplicitVR Or DicomDataSetInitializeFlags.LittleEndian Or 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly Or DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
 
   ' Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags) 
 
   ' Delete these items -- they will get added again later in the sample 
   ' * Shared Functional Group2 Sequence 
   ' * Per-frame Functional Group2 Sequence 
 
   Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PerFrameFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   element = ds.FindFirstElement(Nothing, DicomTag.SharedFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   ' Add a VOI LUT on 0th frame 
   Dim windowAttributes As DicomWindowAttributes = New DicomWindowAttributes() 
 
   windowAttributes.WindowCenter = 32767 
   windowAttributes.WindowWidth = 65535 
   windowAttributes.Explanation = "frame 0" 
   ds.SetWindow(0, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame) 
 
   ' Add a second VOI LUT on the 1st frame 
   windowAttributes.WindowCenter = 32000 
   windowAttributes.WindowWidth = 60000 
   windowAttributes.Explanation = "frame 1" 
   ds.SetWindow(1, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame) 
 
   ' Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   Dim windowAttributes2 As DicomWindowAttributes = ds.GetWindow(1, 0) 
 
   Dim sMsg As String = String.Format("Window Center: {0}" & Constants.vbLf & "WindowWidth: {1}" & Constants.vbLf & "Explanation {2}", 
                                      windowAttributes.WindowCenter, windowAttributes.WindowWidth, windowAttributes.Explanation) 
   MessageBox.Show(sMsg) 
 
   ' Finally, delete the second VOI LUT 
   ds.DeleteWindow(1, DicomSetImageFlags.None) 
 
   ' Save the file 
   ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "Test.dcm"), DicomDataSetSaveFlags.None) 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" 
End Class 
c#[Silverlight C# Example] 
using Leadtools; 
using Leadtools.Dicom; 
using Leadtools.Examples; 
 
void DicomDataSet_SetWindowExample(Stream outputStream) 
{ 
   DicomDataSet ds = new DicomDataSet(); 
   DicomDataSetInitializeFlags flags = 
      DicomDataSetInitializeFlags.ExplicitVR | 
      DicomDataSetInitializeFlags.LittleEndian | 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly | 
      DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
      ; 
 
   // Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags); 
 
   // Delete these items -- they will get added again later in the sample 
   // * Shared Functional Group2 Sequence 
   // * Per-frame Functional Group2 Sequence 
 
   DicomElement element = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   element = ds.FindFirstElement(null, DicomTag.SharedFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   // Add a VOI LUT on 0th frame 
   DicomWindowAttributes windowAttributes = new DicomWindowAttributes(); 
 
   windowAttributes.WindowCenter = 32767; 
   windowAttributes.WindowWidth = 65535; 
   windowAttributes.Explanation = "frame 0"; 
   ds.SetWindow(0, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame); 
 
   // Add a second VOI LUT on the 1st frame 
   windowAttributes.WindowCenter = 32000; 
   windowAttributes.WindowWidth = 60000; 
   windowAttributes.Explanation = "frame 1"; 
   ds.SetWindow(1, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame); 
 
   // Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   DicomWindowAttributes windowAttributes2 = ds.GetWindow(1, 0); 
 
   string sMsg = string.Format("Window Center: {0}\nWindowWidth: {1}\nExplanation {2}", 
      windowAttributes.WindowCenter, 
      windowAttributes.WindowWidth, 
      windowAttributes.Explanation); 
   Debug.WriteLine(sMsg); 
 
   // Finally, delete the second VOI LUT 
   ds.DeleteWindow(1, DicomSetImageFlags.None); 
 
   // Save the file 
   ds.Save(outputStream, DicomDataSetSaveFlags.None); 
} 
vb[Silverlight VB Example] 
Imports Leadtools 
Imports Leadtools.Dicom 
 
Private Sub DicomDataSet_SetWindowExample(ByVal outputStream As Stream) 
   Dim ds As DicomDataSet = New DicomDataSet() 
   Dim flags As DicomDataSetInitializeFlags = DicomDataSetInitializeFlags.ExplicitVR Or 
                                              DicomDataSetInitializeFlags.LittleEndian Or 
                                              DicomDataSetInitializeFlags.AddMandatoryElementsOnly Or 
                                              DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
 
   ' Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags) 
 
   ' Delete these items -- they will get added again later in the sample 
   ' * Shared Functional Group2 Sequence 
   ' * Per-frame Functional Group2 Sequence 
 
   Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PerFrameFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   element = ds.FindFirstElement(Nothing, DicomTag.SharedFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   ' Add a VOI LUT on 0th frame 
   Dim windowAttributes As DicomWindowAttributes = New DicomWindowAttributes() 
 
   windowAttributes.WindowCenter = 32767 
   windowAttributes.WindowWidth = 65535 
   windowAttributes.Explanation = "frame 0" 
   ds.SetWindow(0, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame) 
 
   ' Add a second VOI LUT on the 1st frame 
   windowAttributes.WindowCenter = 32000 
   windowAttributes.WindowWidth = 60000 
   windowAttributes.Explanation = "frame 1" 
   ds.SetWindow(1, 0, windowAttributes, DicomSetImageFlags.MfgVoiLutPerFrame) 
 
   ' Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   Dim windowAttributes2 As DicomWindowAttributes = ds.GetWindow(1, 0) 
 
   Dim sMsg As String = String.Format("Window Center: {0}" _ 
                                      & Constants.vbLf _ 
                                      & "WindowWidth: {1}" _ 
                                      & Constants.vbLf _ 
                                      & "Explanation {2}", 
                                      windowAttributes.WindowCenter, 
                                      windowAttributes.WindowWidth, 
                                      windowAttributes.Explanation) 
   Debug.WriteLine(sMsg) 
 
   ' Finally, delete the second VOI LUT 
   ds.DeleteWindow(1, DicomSetImageFlags.None) 
 
   ' Save the file 
   ds.Save(outputStream, DicomDataSetSaveFlags.None) 
End Sub 

Requirements

Target Platforms

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

Leadtools.Dicom Assembly