X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmHeader.cxx;h=29955e13029d535e3746bba7de03d1aabe8dcc59;hb=0fa193d8b312b90f2ee822e1ee87f6e2fbd1dcb5;hp=82c31a0fa29d00f8664537d6cf6ff56c9df250d0;hpb=0457e1e8fc68df6d9e2d1a0fcd0053ecee3c5ad7;p=gdcm.git diff --git a/src/gdcmHeader.cxx b/src/gdcmHeader.cxx index 82c31a0f..29955e13 100644 --- a/src/gdcmHeader.cxx +++ b/src/gdcmHeader.cxx @@ -1,4 +1,4 @@ -// gdcmHeader.cxx +// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.68 2003/05/28 19:36:21 frog Exp $ #include #include @@ -12,20 +12,16 @@ #include #include "gdcmUtil.h" #include "gdcmHeader.h" +using namespace std; // Refer to gdcmHeader::CheckSwap() #define HEADER_LENGTH_TO_READ 256 // Refer to gdcmHeader::SetMaxSizeLoadElementValue() #define _MaxSizeLoadElementValue_ 1024 -gdcmVR * gdcmHeader::dicom_vr = (gdcmVR*)0; -gdcmDictSet * gdcmHeader::Dicts = (gdcmDictSet*)0; - void gdcmHeader::Initialise(void) { - if (!gdcmHeader::dicom_vr) - gdcmHeader::dicom_vr = gdcmGlobal::GetVR(); - if (!gdcmHeader::Dicts) - gdcmHeader::Dicts = gdcmGlobal::GetDicts(); + dicom_vr = gdcmGlobal::GetVR(); + Dicts = gdcmGlobal::GetDicts(); RefPubDict = Dicts->GetDefaultPubDict(); RefShaDict = (gdcmDict*)0; } @@ -34,7 +30,8 @@ gdcmHeader::gdcmHeader(const char *InFilename, bool exception_on_error) { SetMaxSizeLoadElementValue(_MaxSizeLoadElementValue_); filename = InFilename; Initialise(); - OpenFile(exception_on_error); + if ( !OpenFile(exception_on_error)) + return; ParseHeader(); LoadElements(); CloseFile(); @@ -47,10 +44,9 @@ bool gdcmHeader::OpenFile(bool exception_on_error) if(!fp) throw gdcmFileError("gdcmHeader::gdcmHeader(const char *, bool)"); } - else - dbg.Error(!fp, "gdcmHeader::gdcmHeader cannot open file", filename.c_str()); if ( fp ) return true; + dbg.Verbose(0, "gdcmHeader::gdcmHeader cannot open file", filename.c_str()); return false; } @@ -433,6 +429,7 @@ bool gdcmHeader::IsJPEGLossless(void) { return false; LoadElementValueSafe(Element); const char * Transfert = Element->GetValue().c_str(); + printf("TransfertSyntx %s\n",Transfert); if ( memcmp(Transfert+strlen(Transfert)-2 ,"70",2)==0) return true; if ( memcmp(Transfert+strlen(Transfert)-2 ,"55",2)==0) return true; return false; @@ -717,7 +714,6 @@ void gdcmHeader::SetMaxSizeLoadElementValue(long NewSize) { void gdcmHeader::LoadElementValue(gdcmElValue * ElVal) { size_t item_read; guint16 group = ElVal->GetGroup(); - guint16 elem = ElVal->GetElement(); string vr = ElVal->GetVR(); guint32 length = ElVal->GetLength(); bool SkipLoad = false; @@ -867,6 +863,18 @@ guint32 gdcmHeader::ReadInt32(void) { return g; } + +gdcmElValue* gdcmHeader::GetElValueByNumber(guint16 Group, guint16 Elem) { + + gdcmElValue* elValue = PubElValSet.GetElementByNumber(Group, Elem); + if (!elValue) { + dbg.Verbose(1, "gdcmHeader::GetElValueByNumber", + "failed to Locate gdcmElValue"); + return (gdcmElValue*)0; + } + return elValue; +} + /** * \ingroup gdcmHeader * \brief Build a new Element Value from all the low level arguments. @@ -973,10 +981,11 @@ bool gdcmHeader::IsAnInteger(gdcmElValue * ElVal) { if (length == 4) return true; else { - printf("Erroneous Group Length element length %d\n",length); + printf("Erroneous Group Length element length (%04x , %04x) : %d\n", + group, element,length); dbg.Error("gdcmHeader::IsAnInteger", - "Erroneous Group Length element length."); + "Erroneous Group Length element length."); } } @@ -1295,7 +1304,11 @@ string gdcmHeader::GetElValRepByName(string TagName) { */ int gdcmHeader::SetPubElValByNumber(string content, guint16 group, guint16 element) + +//TODO : homogeneiser les noms : SetPubElValByNumber qui appelle PubElValSet.SetElValueByNumber +// pourquoi pas SetPubElValueByNumber ?? { + return ( PubElValSet.SetElValueByNumber (content, group, element) ); } @@ -1427,18 +1440,36 @@ int gdcmHeader::GetZSize(void) { return 1; } +/** + * \ingroup gdcmHeader + * \brief Return the size (in bytes) of a single pixel of data. + * @return The size in bytes of a single pixel of data. + * + */ +int gdcmHeader::GetPixelSize(void) { + string PixelType = GetPixelType(); + if (PixelType == "8U" || PixelType == "8S") + return 1; + if (PixelType == "16U" || PixelType == "16S") + return 2; + if (PixelType == "32U" || PixelType == "32S") + return 4; + dbg.Verbose(0, "gdcmHeader::GetPixelSize: Unknown pixel type"); + return 0; +} + /** * \ingroup gdcmHeader * \brief Build the Pixel Type of the image. * Possible values are: - * - U8 unsigned 8 bit, - * - S8 signed 8 bit, - * - U16 unsigned 16 bit, - * - S16 signed 16 bit, - * - U32 unsigned 32 bit, - * - S32 signed 32 bit, + * - 8U unsigned 8 bit, + * - 8S signed 8 bit, + * - 16U unsigned 16 bit, + * - 16S signed 16 bit, + * - 32U unsigned 32 bit, + * - 32S signed 32 bit, * \warning 12 bit images appear as 16 bit. - * @return + * @return */ string gdcmHeader::GetPixelType(void) { string BitsAlloc; @@ -1532,11 +1563,11 @@ void gdcmHeader::LoadElements(void) { } } -void gdcmHeader::PrintPubElVal(ostream & os) { +void gdcmHeader::PrintPubElVal(std::ostream & os) { PubElValSet.Print(os); } -void gdcmHeader::PrintPubDict(ostream & os) { +void gdcmHeader::PrintPubDict(std::ostream & os) { RefPubDict->Print(os); }