Mercurial > hg > orthanc
comparison Core/DicomParsing/ParsedDicomFile.cpp @ 3217:cf8cbeb35f33
preliminary support of Korean character set
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 13 Feb 2019 17:46:12 +0100 |
parents | 4e43e67f8ecf |
children | 9b0e67161600 |
comparison
equal
deleted
inserted
replaced
3216:c9a71eb4edcf | 3217:cf8cbeb35f33 |
---|---|
643 return; | 643 return; |
644 } | 644 } |
645 } | 645 } |
646 | 646 |
647 InvalidateCache(); | 647 InvalidateCache(); |
648 std::auto_ptr<DcmElement> element(FromDcmtkBridge::FromJson(tag, value, decodeDataUriScheme, GetEncoding())); | 648 |
649 bool hasCodeExtensions; | |
650 Encoding encoding = DetectEncoding(hasCodeExtensions); | |
651 std::auto_ptr<DcmElement> element(FromDcmtkBridge::FromJson(tag, value, decodeDataUriScheme, encoding)); | |
649 InsertInternal(*pimpl_->file_->getDataset(), element.release()); | 652 InsertInternal(*pimpl_->file_->getDataset(), element.release()); |
650 } | 653 } |
651 | 654 |
652 | 655 |
653 static bool CanReplaceProceed(DcmDataset& dicom, | 656 static bool CanReplaceProceed(DcmDataset& dicom, |
704 | 707 |
705 decoded = &binary; | 708 decoded = &binary; |
706 } | 709 } |
707 else | 710 else |
708 { | 711 { |
709 Encoding encoding = GetEncoding(); | 712 bool hasCodeExtensions; |
710 if (GetEncoding() != Encoding_Utf8) | 713 Encoding encoding = DetectEncoding(hasCodeExtensions); |
714 if (encoding != Encoding_Utf8) | |
711 { | 715 { |
712 binary = Toolbox::ConvertFromUtf8(utf8Value, encoding); | 716 binary = Toolbox::ConvertFromUtf8(utf8Value, encoding); |
713 decoded = &binary; | 717 decoded = &binary; |
714 } | 718 } |
715 } | 719 } |
764 return; | 768 return; |
765 } | 769 } |
766 } | 770 } |
767 | 771 |
768 std::auto_ptr<DcmElement> element(FromDcmtkBridge::CreateElementForTag(tag)); | 772 std::auto_ptr<DcmElement> element(FromDcmtkBridge::CreateElementForTag(tag)); |
769 FromDcmtkBridge::FillElementWithString(*element, tag, utf8Value, decodeDataUriScheme, GetEncoding()); | 773 |
774 bool hasCodeExtensions; | |
775 Encoding encoding = DetectEncoding(hasCodeExtensions); | |
776 FromDcmtkBridge::FillElementWithString(*element, tag, utf8Value, decodeDataUriScheme, encoding); | |
770 | 777 |
771 InsertInternal(dicom, element.release()); | 778 InsertInternal(dicom, element.release()); |
772 UpdateStorageUid(tag, utf8Value, false); | 779 UpdateStorageUid(tag, utf8Value, false); |
773 } | 780 } |
774 } | 781 } |
803 { | 810 { |
804 return; | 811 return; |
805 } | 812 } |
806 } | 813 } |
807 | 814 |
808 InsertInternal(dicom, FromDcmtkBridge::FromJson(tag, value, decodeDataUriScheme, GetEncoding())); | 815 bool hasCodeExtensions; |
816 Encoding encoding = DetectEncoding(hasCodeExtensions); | |
817 InsertInternal(dicom, FromDcmtkBridge::FromJson(tag, value, decodeDataUriScheme, encoding)); | |
809 | 818 |
810 if (tag == DICOM_TAG_SOP_CLASS_UID || | 819 if (tag == DICOM_TAG_SOP_CLASS_UID || |
811 tag == DICOM_TAG_SOP_INSTANCE_UID) | 820 tag == DICOM_TAG_SOP_INSTANCE_UID) |
812 { | 821 { |
813 if (value.type() != Json::stringValue) | 822 if (value.type() != Json::stringValue) |
873 element == NULL) | 882 element == NULL) |
874 { | 883 { |
875 return false; | 884 return false; |
876 } | 885 } |
877 | 886 |
887 bool hasCodeExtensions; | |
888 Encoding encoding = DetectEncoding(hasCodeExtensions); | |
889 | |
878 std::set<DicomTag> tmp; | 890 std::set<DicomTag> tmp; |
879 std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement | 891 std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement |
880 (*element, DicomToJsonFlags_Default, | 892 (*element, DicomToJsonFlags_Default, |
881 0, GetEncoding(), tmp)); | 893 0, encoding, hasCodeExtensions, tmp)); |
882 | 894 |
883 if (v.get() == NULL || | 895 if (v.get() == NULL || |
884 v->IsNull()) | 896 v->IsNull()) |
885 { | 897 { |
886 value = ""; | 898 value = ""; |
1292 throw OrthancException(ErrorCode_InternalError); | 1304 throw OrthancException(ErrorCode_InternalError); |
1293 } | 1305 } |
1294 } | 1306 } |
1295 | 1307 |
1296 | 1308 |
1297 Encoding ParsedDicomFile::GetEncoding() const | 1309 Encoding ParsedDicomFile::DetectEncoding(bool& hasCodeExtensions) const |
1298 { | 1310 { |
1299 return FromDcmtkBridge::DetectEncoding(*pimpl_->file_->getDataset(), | 1311 return FromDcmtkBridge::DetectEncoding(hasCodeExtensions, |
1312 *pimpl_->file_->getDataset(), | |
1300 GetDefaultDicomEncoding()); | 1313 GetDefaultDicomEncoding()); |
1301 } | 1314 } |
1302 | 1315 |
1303 | 1316 |
1304 void ParsedDicomFile::SetEncoding(Encoding encoding) | 1317 void ParsedDicomFile::SetEncoding(Encoding encoding) |
1530 } | 1543 } |
1531 | 1544 |
1532 | 1545 |
1533 void ParsedDicomFile::ChangeEncoding(Encoding target) | 1546 void ParsedDicomFile::ChangeEncoding(Encoding target) |
1534 { | 1547 { |
1535 Encoding source = GetEncoding(); | 1548 bool hasCodeExtensions; |
1549 Encoding source = DetectEncoding(hasCodeExtensions); | |
1536 | 1550 |
1537 if (source != target) // Avoid unnecessary conversion | 1551 if (source != target) // Avoid unnecessary conversion |
1538 { | 1552 { |
1539 ReplacePlainString(DICOM_TAG_SPECIFIC_CHARACTER_SET, GetDicomSpecificCharacterSet(target)); | 1553 ReplacePlainString(DICOM_TAG_SPECIFIC_CHARACTER_SET, GetDicomSpecificCharacterSet(target)); |
1540 FromDcmtkBridge::ChangeStringEncoding(*pimpl_->file_->getDataset(), source, target); | 1554 FromDcmtkBridge::ChangeStringEncoding(*pimpl_->file_->getDataset(), source, hasCodeExtensions, target); |
1541 } | 1555 } |
1542 } | 1556 } |
1543 | 1557 |
1544 | 1558 |
1545 void ParsedDicomFile::ExtractDicomSummary(DicomMap& target) const | 1559 void ParsedDicomFile::ExtractDicomSummary(DicomMap& target) const |