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