1- #include "dcmtk/config/osconfig.h" // For DCMTK_VERSION_NUMBER and config macros
2- #include "dcmtk/dcmdata/dctk.h" // Core DICOM toolkit (includes DcmDataset, DcmPixelData, etc.)
3- #include "dcmtk/dcmdata/dcpixel.h" // For DcmPixelData
4- #include "dcmtk/dcmdata/dcdeftag.h" // For DCM_PixelData tag
1+ #include "dcmtk/config/osconfig.h"
2+ #include "dcmtk/dcmdata/dctk.h"
3+ #include "dcmtk/dcmdata/dcpixel.h"
4+ #include "dcmtk/dcmdata/dcdeftag.h"
5+
6+ // Helper: Determine if the transfer syntax is uncompressed
7+ bool isUncompressedXfer (E_TransferSyntax xfer )
8+ {
9+ return xfer == EXS_LittleEndianExplicit ||
10+ xfer == EXS_LittleEndianImplicit ||
11+ xfer == EXS_BigEndianExplicit ;
12+ }
513
614Uint32 getFrameSize (DcmDataset * dataset )
715{
8- DcmPixelData * pixelData = nullptr ;
9- if (dataset -> findAndGetElement (DCM_PixelData , pixelData ).bad () || !pixelData )
16+ DcmElement * elem = nullptr ;
17+ if (dataset -> findAndGetElement (DCM_PixelData , elem ).bad () || !elem )
18+ return 0 ;
19+
20+ DcmPixelData * pixelData = dynamic_cast < DcmPixelData * > (elem );
21+ if (!pixelData )
1022 return 0 ;
1123
1224 Uint32 frameSize = 0 ;
13- OFBool isUncompressed = (pixelData -> transferState () == ERW_memory );
25+ OFCondition status ;
26+
27+ E_TransferSyntax xfer = dataset -> getOriginalXfer ();
28+ bool isUncompressed = isUncompressedXfer (xfer );
29+
30+
1431 status = pixelData -> getUncompressedFrameSize (dataset , frameSize , isUncompressed );
1532
1633 return status .good () ? frameSize : 0 ;
17- }
34+ }
0 commit comments