Mercurial > hg > orthanc-wsi
comparison Resources/Orthanc/Core/Enumerations.cpp @ 116:a18bfe1fdd62
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 04 Jan 2018 10:49:34 +0100 |
parents | a3e8ac8b7256 |
children | 4f3945a2b725 |
comparison
equal
deleted
inserted
replaced
115:a51dee6a1515 | 116:a18bfe1fdd62 |
---|---|
1 /** | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | 2 * Orthanc - A Lightweight, RESTful DICOM Store |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
4 * Department, University Hospital of Liege, Belgium | 4 * Department, University Hospital of Liege, Belgium |
5 * Copyright (C) 2017 Osimis, Belgium | 5 * Copyright (C) 2017-2018 Osimis S.A., Belgium |
6 * | 6 * |
7 * This program is free software: you can redistribute it and/or | 7 * This program is free software: you can redistribute it and/or |
8 * modify it under the terms of the GNU General Public License as | 8 * modify it under the terms of the GNU General Public License as |
9 * published by the Free Software Foundation, either version 3 of the | 9 * published by the Free Software Foundation, either version 3 of the |
10 * License, or (at your option) any later version. | 10 * License, or (at your option) any later version. |
36 | 36 |
37 #include "OrthancException.h" | 37 #include "OrthancException.h" |
38 #include "Toolbox.h" | 38 #include "Toolbox.h" |
39 #include "Logging.h" | 39 #include "Logging.h" |
40 | 40 |
41 #include <boost/thread/mutex.hpp> | |
41 #include <string.h> | 42 #include <string.h> |
42 #include <cassert> | 43 #include <cassert> |
43 | 44 |
44 namespace Orthanc | 45 namespace Orthanc |
45 { | 46 { |
750 return "Grayscale (signed 16bpp)"; | 751 return "Grayscale (signed 16bpp)"; |
751 | 752 |
752 case PixelFormat_Float32: | 753 case PixelFormat_Float32: |
753 return "Grayscale (float 32bpp)"; | 754 return "Grayscale (float 32bpp)"; |
754 | 755 |
756 case PixelFormat_Grayscale32: | |
757 return "Grayscale (unsigned 32bpp)"; | |
758 | |
759 case PixelFormat_RGB48: | |
760 return "RGB48"; | |
761 | |
755 default: | 762 default: |
763 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
764 } | |
765 } | |
766 | |
767 | |
768 const char* EnumerationToString(ModalityManufacturer manufacturer) | |
769 { | |
770 switch (manufacturer) | |
771 { | |
772 case ModalityManufacturer_Generic: | |
773 return "Generic"; | |
774 | |
775 case ModalityManufacturer_GenericNoWildcardInDates: | |
776 return "GenericNoWildcardInDates"; | |
777 | |
778 case ModalityManufacturer_GenericNoUniversalWildcard: | |
779 return "GenericNoUniversalWildcard"; | |
780 | |
781 case ModalityManufacturer_StoreScp: | |
782 return "StoreScp"; | |
783 | |
784 case ModalityManufacturer_ClearCanvas: | |
785 return "ClearCanvas"; | |
786 | |
787 case ModalityManufacturer_Dcm4Chee: | |
788 return "Dcm4Chee"; | |
789 | |
790 case ModalityManufacturer_Vitrea: | |
791 return "Vitrea"; | |
792 | |
793 default: | |
794 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
795 } | |
796 } | |
797 | |
798 | |
799 const char* EnumerationToString(DicomRequestType type) | |
800 { | |
801 switch (type) | |
802 { | |
803 case DicomRequestType_Echo: | |
804 return "Echo"; | |
805 break; | |
806 | |
807 case DicomRequestType_Find: | |
808 return "Find"; | |
809 break; | |
810 | |
811 case DicomRequestType_Get: | |
812 return "Get"; | |
813 break; | |
814 | |
815 case DicomRequestType_Move: | |
816 return "Move"; | |
817 break; | |
818 | |
819 case DicomRequestType_Store: | |
820 return "Store"; | |
821 break; | |
822 | |
823 default: | |
824 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
825 } | |
826 } | |
827 | |
828 | |
829 const char* EnumerationToString(TransferSyntax syntax) | |
830 { | |
831 switch (syntax) | |
832 { | |
833 case TransferSyntax_Deflated: | |
834 return "Deflated"; | |
835 | |
836 case TransferSyntax_Jpeg: | |
837 return "JPEG"; | |
838 | |
839 case TransferSyntax_Jpeg2000: | |
840 return "JPEG2000"; | |
841 | |
842 case TransferSyntax_JpegLossless: | |
843 return "JPEG Lossless"; | |
844 | |
845 case TransferSyntax_Jpip: | |
846 return "JPIP"; | |
847 | |
848 case TransferSyntax_Mpeg2: | |
849 return "MPEG2"; | |
850 | |
851 case TransferSyntax_Rle: | |
852 return "RLE"; | |
853 | |
854 default: | |
855 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
856 } | |
857 } | |
858 | |
859 | |
860 const char* EnumerationToString(DicomVersion version) | |
861 { | |
862 switch (version) | |
863 { | |
864 case DicomVersion_2008: | |
865 return "2008"; | |
866 break; | |
867 | |
868 case DicomVersion_2017c: | |
869 return "2017c"; | |
870 break; | |
871 | |
872 default: | |
756 throw OrthancException(ErrorCode_ParameterOutOfRange); | 873 throw OrthancException(ErrorCode_ParameterOutOfRange); |
757 } | 874 } |
758 } | 875 } |
759 | 876 |
760 | 877 |
1125 | 1242 |
1126 throw OrthancException(ErrorCode_ParameterOutOfRange); | 1243 throw OrthancException(ErrorCode_ParameterOutOfRange); |
1127 } | 1244 } |
1128 | 1245 |
1129 | 1246 |
1247 ModalityManufacturer StringToModalityManufacturer(const std::string& manufacturer) | |
1248 { | |
1249 ModalityManufacturer result; | |
1250 bool obsolete = false; | |
1251 | |
1252 if (manufacturer == "Generic") | |
1253 { | |
1254 return ModalityManufacturer_Generic; | |
1255 } | |
1256 else if (manufacturer == "GenericNoWildcardInDates") | |
1257 { | |
1258 return ModalityManufacturer_GenericNoWildcardInDates; | |
1259 } | |
1260 else if (manufacturer == "GenericNoUniversalWildcard") | |
1261 { | |
1262 return ModalityManufacturer_GenericNoUniversalWildcard; | |
1263 } | |
1264 else if (manufacturer == "ClearCanvas") | |
1265 { | |
1266 return ModalityManufacturer_ClearCanvas; | |
1267 } | |
1268 else if (manufacturer == "StoreScp") | |
1269 { | |
1270 return ModalityManufacturer_StoreScp; | |
1271 } | |
1272 else if (manufacturer == "Dcm4Chee") | |
1273 { | |
1274 return ModalityManufacturer_Dcm4Chee; | |
1275 } | |
1276 else if (manufacturer == "Vitrea") | |
1277 { | |
1278 return ModalityManufacturer_Vitrea; | |
1279 } | |
1280 else if (manufacturer == "AgfaImpax" || | |
1281 manufacturer == "SyngoVia") | |
1282 { | |
1283 result = ModalityManufacturer_GenericNoWildcardInDates; | |
1284 obsolete = true; | |
1285 } | |
1286 else if (manufacturer == "EFilm2" || | |
1287 manufacturer == "MedInria") | |
1288 { | |
1289 result = ModalityManufacturer_Generic; | |
1290 obsolete = true; | |
1291 } | |
1292 else | |
1293 { | |
1294 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
1295 } | |
1296 | |
1297 if (obsolete) | |
1298 { | |
1299 LOG(WARNING) << "The \"" << manufacturer << "\" manufacturer is obsolete since " | |
1300 << "Orthanc 1.3.0. To guarantee compatibility with future Orthanc " | |
1301 << "releases, you should replace it by \"" | |
1302 << EnumerationToString(result) | |
1303 << "\" in your configuration file."; | |
1304 } | |
1305 | |
1306 return result; | |
1307 } | |
1308 | |
1309 | |
1310 DicomVersion StringToDicomVersion(const std::string& version) | |
1311 { | |
1312 if (version == "2008") | |
1313 { | |
1314 return DicomVersion_2008; | |
1315 } | |
1316 else if (version == "2017c") | |
1317 { | |
1318 return DicomVersion_2017c; | |
1319 } | |
1320 else | |
1321 { | |
1322 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
1323 } | |
1324 } | |
1325 | |
1326 | |
1130 unsigned int GetBytesPerPixel(PixelFormat format) | 1327 unsigned int GetBytesPerPixel(PixelFormat format) |
1131 { | 1328 { |
1132 switch (format) | 1329 switch (format) |
1133 { | 1330 { |
1134 case PixelFormat_Grayscale8: | 1331 case PixelFormat_Grayscale8: |
1141 case PixelFormat_RGB24: | 1338 case PixelFormat_RGB24: |
1142 return 3; | 1339 return 3; |
1143 | 1340 |
1144 case PixelFormat_RGBA32: | 1341 case PixelFormat_RGBA32: |
1145 case PixelFormat_BGRA32: | 1342 case PixelFormat_BGRA32: |
1343 case PixelFormat_Grayscale32: | |
1146 return 4; | 1344 return 4; |
1147 | 1345 |
1148 case PixelFormat_Float32: | 1346 case PixelFormat_Float32: |
1149 assert(sizeof(float) == 4); | 1347 assert(sizeof(float) == 4); |
1150 return 4; | 1348 return 4; |
1349 | |
1350 case PixelFormat_RGB48: | |
1351 return 6; | |
1151 | 1352 |
1152 default: | 1353 default: |
1153 throw OrthancException(ErrorCode_ParameterOutOfRange); | 1354 throw OrthancException(ErrorCode_ParameterOutOfRange); |
1154 } | 1355 } |
1155 } | 1356 } |
1223 } | 1424 } |
1224 else if (s == "ISO_IR 13" || s == "ISO 2022 IR 13") | 1425 else if (s == "ISO_IR 13" || s == "ISO 2022 IR 13") |
1225 { | 1426 { |
1226 encoding = Encoding_Japanese; | 1427 encoding = Encoding_Japanese; |
1227 } | 1428 } |
1228 else if (s == "GB18030") | 1429 else if (s == "GB18030" || s == "GBK") |
1229 { | 1430 { |
1431 /** | |
1432 * According to tumashu@163.com, "In China, many dicom file's | |
1433 * 0008,0005 tag is set as "GBK", instead of "GB18030", GBK is a | |
1434 * subset of GB18030, and which is used frequently in China, | |
1435 * suggest support it." | |
1436 * https://groups.google.com/d/msg/orthanc-users/WMM8LMbjpUc/02-1f_yFCgAJ | |
1437 **/ | |
1230 encoding = Encoding_Chinese; | 1438 encoding = Encoding_Chinese; |
1231 } | 1439 } |
1232 /* | 1440 /* |
1233 else if (s == "ISO 2022 IR 149") | 1441 else if (s == "ISO 2022 IR 149") |
1234 { | 1442 { |
1473 | 1681 |
1474 case ValueRepresentation_NotSupported: | 1682 case ValueRepresentation_NotSupported: |
1475 default: | 1683 default: |
1476 throw OrthancException(ErrorCode_ParameterOutOfRange); | 1684 throw OrthancException(ErrorCode_ParameterOutOfRange); |
1477 } | 1685 } |
1478 } | 1686 } |
1687 | |
1688 | |
1689 static boost::mutex defaultEncodingMutex_; // Should not be necessary | |
1690 static Encoding defaultEncoding_ = ORTHANC_DEFAULT_DICOM_ENCODING; | |
1691 | |
1692 Encoding GetDefaultDicomEncoding() | |
1693 { | |
1694 boost::mutex::scoped_lock lock(defaultEncodingMutex_); | |
1695 return defaultEncoding_; | |
1696 } | |
1697 | |
1698 void SetDefaultDicomEncoding(Encoding encoding) | |
1699 { | |
1700 std::string name = EnumerationToString(encoding); | |
1701 | |
1702 { | |
1703 boost::mutex::scoped_lock lock(defaultEncodingMutex_); | |
1704 defaultEncoding_ = encoding; | |
1705 } | |
1706 | |
1707 LOG(INFO) << "Default encoding for DICOM was changed to: " << name; | |
1708 } | |
1709 | |
1479 } | 1710 } |