#include "Ltdic.h"
L_UINT16 LDicomDS::GetImageList(pElement, hList, nIndex, nCount, nBitsPerPixel, uFlags)
L_UINT16 LDicomDS::GetImageList(pElement, hList, nIndex, nCount, nBitsPerPixel, uFlags, pfnCallback, pUserData)
pDICOMELEMENT pElement; |
pointer to a DICOMELEMENT structure |
HBITMAPLIST hList; |
handle to the list of images |
L_UINT32 nIndex; |
index value |
L_UINT32 nCount; |
number of frames to load |
L_INT32 nBitsPerPixel; |
resulting image pixel depth |
L_UINT uFlags; |
flags |
GETIMAGECALLBACK pfnCallback; |
callback function |
L_VOID * pUserData; |
pointer to more parameters for the callback |
Loads the image 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 images. | |
nIndex | Position of the first frame to load. Use zero-based indexing. For example, if there are 10 images in a list, the index of the last one is 9. | |
nCount | Number of frames to load into the image list. | |
nBitsPerPixel | Resulting image 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 resulting image | |
12 | 12 bits per pixel in the resulting image. | |
16 | 16 bits per pixel in the resulting image | |
24 | 24 bits per pixel in the resulting image | |
32 | 32 bits per pixel in the resulting image |
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 image. | |
DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT | [0x0002] If set, the function will automatically apply the "Modality LUT" when loading the image. | |
DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT | [0x0004] If set, the function will automatically apply the "VOI LUT" when loading the image. | |
DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION | [0x0008] (Deprecated, do not use) If set, the function will adjust the high bit and/or low bit (if possible) inside the image handle in order to hold the range of pixel values after applying the modality LUT. | |
DICOM_GETIMAGE_AUTO_SCALE_MODALITY_LUT | [0x0010] If set, the function will scale the resulting pixel data to fit within the range of 0 to 2^BitsPerPixel-1 if any of the values would exceed that range. | |
DICOM_GETIMAGE_AUTO_SCALE_VOI_LUT | [0x0020] Only used in conjunction with DICOM_GETIMAGE_AUTO_SCALE_MODALITY_LUT. If set, the function will rescale the VOI LUT to match the rescale that was performed by DICOM_GETIMAGE_AUTO_SCALE_MODALITY_LUT. | |
DICOM_GETIMAGE_AUTODETECT_INVALID_RLE_COMPRESSION | [0x0040] For RLE compressed, automatically detects if the MSB and LSB segments are written in the incorrect order. | |
DICOM_GETIMAGE_RLE_SWAP_SEGMENTS | [0x0080] Internal Use Only. | |
DICOM_GETIMAGE_LOADCORRUPTED | [0x0100] Allow loading of corrupt JPEG. | |
DICOM_GETIMAGE_FROM_FLTLOAD | [0x8000] Internal Use Only. | |
pfnCallback |
Callback Function for additional processing. Use the function pointer as the value of this parameter.
The callback function must adhere to the function prototype described in the GETIMAGECALLBACK 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 that variable or structure, casting it to L_VOID *. 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 additional parameters are not needed, you can pass NULL in this parameter. |
0 |
SUCCESS |
>0 |
An error occurred. Refer to Return Codes. |
As an example, say you wanted 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 an image 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) cant 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 image 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 wont 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.
If the DICOM dataset has a Multi-frame Functional Groups module, some VOI LUT information will be read from the correspondingFrame VOI LUT Sequence, and some Modality LUT information will be read from the corresponding Pixel Value Transformation Sequence.
The specific elements that are read is 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 |
(0028,9145) Pixel Value Transformation Sequence child elements
Tag |
Name |
(0028,1052) |
Rescale Intercept |
(0028,1053) |
Rescale Slope |
(0028,1054) |
Rescale Type |
For a detailed discussion on Multi-frame Functional Groups and how the DICOM_SET_IMAGE_MFG flags are used, see the topic Multi-frame Functional 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 |
Win32, x64
Functions: |
|
Topics: |
|
|
How to Disable the Automatic Loading of the default DICOM IOD Table |
This example fills a bitmap list with all images from the Data Set.
#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName
L_INT LDicomDS_GetImageListExample()
{
L_INT nRet;
LDicomDS *pDS;
HBITMAPLIST hList;
pDS = new LDicomDS(NULL);
nRet = pDS->LoadDS(MAKE_IMAGE_PATH(TEXT("image1.dcm")), 0);
if(nRet != DICOM_SUCCESS)
return nRet;
nRet = L_CreateBitmapList(&hList);
if(nRet != SUCCESS)
return nRet;
nRet = pDS->GetImageList(NULL, hList, 0, ELEMENT_INDEX_MAX, 0, 0);
if(nRet != DICOM_SUCCESS)
return nRet;
nRet = L_DestroyBitmapList(hList);
if(nRet != SUCCESS)
return nRet;
delete pDS;
return DICOM_SUCCESS;
}