diff --git a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx index 54e38669174e69349a7be93759944f2e79410b4d..de88f29bf436077f2e5e34eea2b90ebf8bbe18a4 100644 --- a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx +++ b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx @@ -441,10 +441,10 @@ private: catch ( itk::ExceptionObject & /*err*/ ) { } - - SetParameterInt("rgb.r",metadataInterface->GetDefaultDisplay()[0]); - SetParameterInt("rgb.g",metadataInterface->GetDefaultDisplay()[1]); - SetParameterInt("rgb.b",metadataInterface->GetDefaultDisplay()[2]); + auto rgbVect = metadataInterface->GetDefaultDisplay(); + SetParameterInt("rgb.r",rgbVect[0]); + SetParameterInt("rgb.g",rgbVect[1]); + SetParameterInt("rgb.b",rgbVect[2]); ossOutput << std::endl << "Image default RGB composition:" << std::endl; ossOutput << "\t[R, G, B] = [" << GetParameterInt("rgb.r") << "," << GetParameterInt("rgb.g") << "," << GetParameterInt("rgb.b") << "]" << std::endl; diff --git a/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx b/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx index 2d6ba2c4775e596123d18c3019a853fe2b7c10a7..4eda669a8db48701c26ab857f28d2ab8ce2a7405 100644 --- a/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx +++ b/Modules/Core/Metadata/src/otbPleiadesImageMetadataInterface.cxx @@ -937,19 +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; } + const std::string & rgbOrder = + imageKeywordlist.GetMetadataByKey( "support_data.band_name_list" ); - std::vector<unsigned int> rgb(3); + std::vector<std::string> bandList; + boost::split(bandList, rgbOrder, boost::is_any_of(" ")); - rgb[0] = 0; - rgb[1] = 1; - rgb[2] = 2; + if (bandList[0] == "P") + { + rgb[1] = 0; + rgb[2] = 0; + return rgb; + } + + if (bandList.size() >= 3) + { + for (int i = 0 ; i < 3 ; i++ ) + { + std::string band = bandList[i]; + if (band[0] == 'B') + { + rgb[i] = lexical_cast<unsigned int>(band.c_str() + 1); + } + } + } return rgb; }