L_DicomSetVOILUT

#include "ltdic.h"

L_LTDIC_API L_UINT16 L_DicomSetVOILUT(hDS, uVOILUTIndex, pVOILUTAttributes, pLUTData, uDataSize, uFlags)

HDICOMDS hDS;

a DICOM handle

L_UINT uVOILUTIndex;

the VOI LUT index

pDICOMVOILUTATTRIBS pVOILUTAttributes;

pointer to a VOI 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 VOI LUT.

Parameter

Description

hDS

A DICOM handle.

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), this pointer cant be NULL.

uDataSize

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

uFlags

Reserved for future use. Pass 0.

Returns

DICOM_SUCCESS

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

Platforms

Win32, x64, Linux.

See Also

Functions:

L_DicomGetWindowCount, L_DicomGetVOILUTCount, L_DicomGetWindow, L_DicomSetWindow, L_DicomDeleteWindow, L_DicomGetVOILUT, L_DicomGetVOILUTData, L_DicomDeleteVOILUT

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)

#define SET_SIZE(p) (p)->uStructSize = sizeof(*(p)); 
L_INT DicomSetVOILUTExample(HDICOMDS hDicomDS, L_BOOL bAdd) 
{ 
   DICOMVOILUTATTRIBS   VOILUTAttribs ={0}; 
   L_UINT16             uRet; 
   L_UINT               uVOILUTCount=0; 
   L_UINT16             *pVOILUTData = NULL; 
   L_UINT               uDataSize = 0; 
   L_UINT               uLUTIndex; 
   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 = L_DicomGetVOILUTCount(hDicomDS,&uVOILUTCount); 
   if(uRet != DICOM_SUCCESS) 
      return uRet; 
   if(uVOILUTCount>0) 
   { 
      // Get he attributes of  the first VOI LUT 
      uRet = L_DicomGetVOILUT(hDicomDS,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 = L_DicomGetVOILUTData(hDicomDS,0,pVOILUTData,uDataSize,0); 
      if(uRet != DICOM_SUCCESS) 
      { 
         free(pVOILUTData); 
         return uRet; 
      } 
      // Remap the data 
      for(uLUTIndex = 0; uLUTIndex <= (uDataSize-1); uLUTIndex++) 
      pVOILUTData[uLUTIndex] = pVOILUTData[uLUTIndex]/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(uLUTIndex = 0; uLUTIndex<= (uDataSize-1); uLUTIndex++) 
      pVOILUTData[uLUTIndex] = (L_UINT16)uLUTIndex; 
   } 
   uNewLUTIndex = uVOILUTCount; 
   if(!bAdd) 
   { 
      // Delete existing LUT 
      uRet = L_DicomDeleteVOILUT(hDicomDS,0); 
      if(uRet != DICOM_SUCCESS) 
      { 
         free(pVOILUTData); 
         return uRet; 
      } 
      uNewLUTIndex = 0 ; 
   } 
   // Set the new LUT 
   uRet = L_DicomSetVOILUT(hDicomDS,uNewLUTIndex,&VOILUTAttribs,pVOILUTData,uDataSize,0); 
   if(pVOILUTData) 
      free(pVOILUTData); 
   return uRet; 
} 

Help Version 19.0.2017.10.18
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS DICOM C API Help