LDicomDS::SetVOILUT

Summary

Sets the attributes that describe the VOI LUT.

Syntax

#include "ltdic.h"

L_UINT16 LDicomDS::SetVOILUT(uVOILUTIndex, pVOILUTAttributes, pLUTData, uDataSize,uFlags)

Parameters

L_UINT 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.

pDICOMVOILUTATTRIBS pVOILUTAttributes

Pointer to a structure containing the VOI LUT attributes to set.

L_UINT16 *pLUTData

Pointer to the buffer that holds the "LUT Data" (0028,3006) to set. This pointer cant be NULL.

L_UINT uDataSize

Size of the buffer pointed to by pLUTData, cant be 0.This value should at least equal pVOILUTAttributes->LUTDescriptor.uNumberOfEntries.

L_UINT uFlags

Reserved for future use. Pass 0.

Returns

Value Meaning
0 The function was successful.
> 0 An error occurred. Refer to Return Codes.

Comments

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

Platforms

Win32, x64

See Also

Functions

Topics

Example

This example will add a new VOI LUT to the dataset or replace the existing one(s).

L_INT LDicomDS_SetVOILUTExample( LDicomDS &InDS, L_BOOL bAdd ) 
{ 
   L_INT                nRet; 
   DICOMVOILUTATTRIBS   VOILUTAttribs ={0}; 
   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 
   VOILUTAttribs.uStructSize = sizeof(DICOMVOILUTATTRIBS); 
   VOILUTAttribs.LUTDescriptor.uStructSize = sizeof(DICOMLUTDESCRIPTOR); 
 
   // Get the number of VOI LUT(s) in the file 
   nRet = InDS.GetVOILUTCount (&uVOILUTCount);  
   if(nRet != DICOM_SUCCESS)  
   { 
      return nRet; 
   } 
   if(uVOILUTCount>0)  
   { 
      // Get he attributes of  the first VOI LUT 
      nRet = InDS.GetVOILUT (0,&VOILUTAttribs,sizeof(DICOMVOILUTATTRIBS),0);  
      if(nRet != DICOM_SUCCESS)  
      {       
         return nRet;    
      } 
      uDataSize = VOILUTAttribs.LUTDescriptor.uNumberOfEntries;  
      pVOILUTData = (L_UINT16*)malloc(uDataSize* sizeof(L_UINT16));  
      if(!pVOILUTData)  
      { 
         return DICOM_ERROR_MEMORY;    
      } 
      // Get the LUT data 
      nRet = InDS.GetVOILUTData (0,pVOILUTData,uDataSize,0);  
      if(nRet != DICOM_SUCCESS)  
      {                
         free(pVOILUTData);  
         return nRet;  
      } 
      // Remap the data 
      for(nLUTIndex = 0; nLUTIndex <= (L_INT)(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 <= (L_INT)(uDataSize-1); nLUTIndex++) 
      { 
         pVOILUTData[nLUTIndex] = (L_UINT16)nLUTIndex;  
      } 
   } 
   uNewLUTIndex = uVOILUTCount;  
   if(!bAdd)  
   { 
      // Delete existing LUT 
      nRet = InDS.DeleteVOILUT (0);  
      if(nRet != DICOM_SUCCESS)  
      {   
         free(pVOILUTData);  
         return nRet;  
      } 
      uNewLUTIndex = 0 ;  
   }   
   // Set the new LUT 
   nRet = InDS.SetVOILUT(uNewLUTIndex,&VOILUTAttribs,pVOILUTData,uDataSize,0);  
   if(nRet != DICOM_SUCCESS)  
   {   
      free(pVOILUTData);  
      return nRet;  
   }    
   if(pVOILUTData)  
   { 
      free(pVOILUTData);    
   }    
   return DICOM_SUCCESS;  
} 

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

LEADTOOLS DICOM C++ Class Library Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.