diff --git a/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx b/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx index 94f55e0a467af0e593d9d54ab0abd222a5bd283e..4eda669a8db48701c26ab857f28d2ab8ce2a7405 100644 --- a/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx +++ b/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx @@ -937,30 +937,48 @@ PleiadesImageMetadataInterface itkExceptionMacro(<< "Invalid Metadata, no Pleiades Image"); } + std::vector<unsigned int> rgb(3); + + rgb[0] = 0; + rgb[1] = 1; + rgb[2] = 2; + ImageKeywordlistType imageKeywordlist; + if (! dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) + { + return rgb; + } + itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); - if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey)) + if ( !imageKeywordlist.HasKey( "support_data.band_name_list" ) ) { - itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist); + return rgb; } - std::vector<unsigned int> rgb(3); + const std::string & rgbOrder = + imageKeywordlist.GetMetadataByKey( "support_data.band_name_list" ); - rgb[0] = 0; - rgb[1] = 1; - rgb[2] = 2; + std::vector<std::string> bandList; + boost::split(bandList, rgbOrder, boost::is_any_of(" ")); + + if (bandList[0] == "P") + { + rgb[1] = 0; + rgb[2] = 0; + return rgb; + } - if ( imageKeywordlist.HasKey( "support_data.band_name_list" ) ) - { - const std::string & rgbOrder = - imageKeywordlist.GetMetadataByKey( "support_data.band_name_list" ); - auto place = rgbOrder.find("B"); + if (bandList.size() >= 3) + { for (int i = 0 ; i < 3 ; i++ ) { - rgb[i] = rgbOrder[place+1] -'0'; - place = rgbOrder.find("B", place+1 ); + std::string band = bandList[i]; + if (band[0] == 'B') + { + rgb[i] = lexical_cast<unsigned int>(band.c_str() + 1); + } } - } + } return rgb; }