diff --git a/Code/IO/otbGDALImageIO.cxx b/Code/IO/otbGDALImageIO.cxx index c98384313260189c9534f0510410360f8ca9358d..180ea641add47cdee13498275cfd24a1ba848f46 100644 --- a/Code/IO/otbGDALImageIO.cxx +++ b/Code/IO/otbGDALImageIO.cxx @@ -131,9 +131,6 @@ bool GDALImageIO::CanReadFile(const char* file) } else { - -std::cout<<"CanReadFile !!!!!!!!!!"<<std::endl; - GDALClose(m_poDataset); m_poDataset = NULL; GDALDestroyDriverManager(); @@ -161,38 +158,22 @@ void GDALImageIO::ReadVolume(void*) void GDALImageIO::Read(void* buffer) { std::streamoff step = static_cast<std::streamoff>(this->GetNumberOfComponents()); -std::cout<< " PASSE DANS READ !!"<<std::endl; -std::cout<< "step : "<<step<<std::endl; unsigned char * p = static_cast<unsigned char *>(buffer); if (p==NULL) { itkExceptionMacro(<<"Memory allocation error"); return; } -std::cout<< "buffer : "<< p <<std::endl; + int lNbLines = this->GetIORegion().GetSize()[1]; int lNbColumns = this->GetIORegion().GetSize()[0]; int lFirstLine = this->GetIORegion().GetIndex()[1]; // [1... ] int lFirstColumn = this->GetIORegion().GetIndex()[0]; // [1... ] -// int lNbLines = 1354; -// int lNbColumns = 2030; -// int lFirstLine = 0; // [1... ] -// int lFirstColumn = 0; // [1... ] -// m_NumberOfComponents = 1; - -std::cout<< "Lig "<<lNbLines <<std::endl; -std::cout<< "Col "<<lNbColumns<<std::endl; -std::cout<< "FirstL " <<lFirstLine <<std::endl; -std::cout<< "FirstC " <<lFirstColumn <<std::endl; -std::cout<< "NbOctetPxl "<<m_NbOctetPixel<<std::endl; std::streamoff lNbPixels = (static_cast<std::streamoff>(lNbColumns))*(static_cast<std::streamoff>(lNbLines)); std::streamoff lBufferSize = static_cast<std::streamoff>(m_NbOctetPixel)*lNbPixels; -std::cout<< "lNbPixels "<<lNbPixels<<std::endl; -std::cout<< "lBufferSize "<<lBufferSize<<std::endl; - unsigned char* value = new unsigned char[lBufferSize]; if (value==NULL) { @@ -206,7 +187,6 @@ std::cout<< "lBufferSize "<<lBufferSize<<std::endl; if ( GDALDataTypeIsComplex(m_PxType) ) { -std::cout<<"COMPLEX !!"<<std::endl; lCrGdal = m_poBands[0]->RasterIO( GF_Read,lFirstColumn,lFirstLine,lNbColumns, lNbLines, value , lNbColumns, lNbLines, m_PxType,0, 0 ); if (lCrGdal == CE_Failure) @@ -222,18 +202,12 @@ std::cout<<"COMPLEX !!"<<std::endl; } else { -std::cout<<"NOT COMPLEX !!"<<std::endl; // Mise a jour du step step = step * static_cast<std::streamoff>(m_NbOctetPixel); -m_NumberOfComponents = 1; -std::cout<<"GetNumberOfComponents : "<<this->GetNumberOfComponents()<<std::endl; -std::cout<<"Step : "<<step<<std::endl; for (unsigned int nbComponents = 0; nbComponents < this->GetNumberOfComponents(); ++nbComponents) { -std::cout<<"INFO POUR RasterIO : FC:"<<lFirstColumn<<" FL:"<<lFirstLine<<" nbC:"<<lNbColumns<<" nbL:"<<lNbLines<<" pxltype:"<<m_PxType<<std::endl; lCrGdal = m_poBands[nbComponents]->RasterIO( GF_Read,lFirstColumn,lFirstLine,lNbColumns, lNbLines, value , lNbColumns, lNbLines, m_PxType,0, 0 ); -std::cout<<"lCrGdal : "<<lCrGdal<<std::endl; if (lCrGdal == CE_Failure) { itkExceptionMacro(<< "Error while reading image (GDAL format) " << m_FileName.c_str()<<"."); @@ -242,7 +216,6 @@ std::cout<<"lCrGdal : "<<lCrGdal<<std::endl; cpt = static_cast<std::streamoff>(nbComponents)*static_cast<std::streamoff>(m_NbOctetPixel); for ( std::streamoff i=0; i < lBufferSize; i = i+static_cast<std::streamoff>(m_NbOctetPixel) ) { -//std::cout<<"val:"<<value[i] <<std::endl; memcpy((void*)(&(p[cpt])),(const void*)(&(value[i])),(size_t)(m_NbOctetPixel)); cpt += step; } @@ -263,13 +236,6 @@ void GDALImageIO::InternalReadImageInformation() { int i; -//GDALDatasetH hDataset; -int bSubCall = TRUE; -const char *pszSource=NULL; -int argc; -char ** argv; - - if ( m_FileName.empty() == true ) { itkExceptionMacro(<<"GDAl read : empty image file name file."); @@ -288,16 +254,6 @@ char ** argv; m_poDataset = NULL; } m_poDataset = static_cast<GDALDataset *>( GDALOpen(lFileNameGdal.c_str(), GA_ReadOnly )); - -/* -------------------------------------------------------------------- */ -/* Attempt to open source file. */ -/* -------------------------------------------------------------------- */ - -/// ATTENTION MODIFIE - //hDataset = GDALOpenShared( lFileNameGdal.c_str(), GA_ReadOnly ); - m_poDataset = static_cast<GDALDataset *>( GDALOpenShared(lFileNameGdal.c_str(), GA_ReadOnly )); - - otbMsgDevMacro( <<" GCPCount (original): " << m_poDataset->GetGCPCount()); if (m_poDataset==NULL) { @@ -311,8 +267,6 @@ char ** argv; m_width = m_poDataset->GetRasterXSize(); m_height = m_poDataset->GetRasterYSize(); -printf("W / H : %d %d \n",m_width,m_height); - if ( (m_width==0) || (m_height==0)) { itkExceptionMacro(<<"Dimension is undefined."); @@ -328,77 +282,34 @@ printf("W / H : %d %d \n",m_width,m_height); m_NbBands = m_poDataset->GetRasterCount(); if (m_NbBands==0) { - -// PART OF THE METADATAS -/** papszMetadata avec m_poDataset->GetMetadata */ - char** papszMetadata; - papszMetadata = m_poDataset->GetMetadata("SUBDATASETS"); - - if( CSLCount(papszMetadata) > 0 ) - { - std::string key; - itk::MetaDataDictionary & dict = this->GetMetaDataDictionary(); - for( int cpt = 0; papszMetadata[cpt] != NULL; cpt++ ) - { - std::cout << papszMetadata[cpt] << std::endl; - ::itk::OStringStream lStream; - lStream << MetaDataKey::SubMetadataKey << cpt; - key = lStream.str(); - - itk::EncapsulateMetaData<std::string>(dict, key, - static_cast<std::string>( papszMetadata[cpt] ) ); - } - std::cout << dict[dict.GetKeys()[0]] << std::endl; - std::cout << key << std::endl; - -// PART OF THE SDS -/** papszSubdatasets avec GDALGetMetadata */ - char **papszSubdatasets = GDALGetMetadata(m_poDataset,"SUBDATASETS"); - int cpt2; - for( cpt2 = 0; papszSubdatasets[cpt2] != NULL; cpt2 += 2 ) - { - /* argv[iSrcFileArg] = strstr(papszSubdatasets[i],"=")+1; */ - lFileNameGdal = strstr(papszSubdatasets[cpt2],"=")+1; - - std::cout<< "*--- SDS A LIRE : " << lFileNameGdal <<std::endl; - lFileNameGdal = "HDF4_SDS:EOS_SWATH:/home2/guillaume/ORFEO/OTB-Data/Input/Modis.hdf:MODIS_SWATH_Type_L1B:EV_1KM_RefSB"; - //lFileNameGdal = "HDF4_SDS:MODIS_L1B:/home2/guillaume/ORFEO/OTB-Data/Input/Modis.hdf:1"; - std::cout<< "*--- devient : " <<lFileNameGdal << std::endl; - m_FileName = lFileNameGdal; - - // Read a SDS with GDAL - if (m_poDataset != NULL) - { - GDALClose(m_poDataset); - m_poDataset = NULL; - } - m_poDataset = static_cast<GDALDataset *>( GDALOpenShared(lFileNameGdal.c_str(), GA_ReadOnly )); - // Get image dimensions - m_width = m_poDataset->GetRasterXSize(); - m_height = m_poDataset->GetRasterYSize(); - std::cout<<"-----------W : " << m_width << " H :"<<m_height<<" nbBand : "<< m_NbBands<<std::endl; -/// TRICHE - m_width = 2030; - m_height = 1354; - // Get Number of Bands - m_NbBands = m_poDataset->GetRasterCount(); - std::cout<<"-----------W : " << m_width << " H :"<<m_height<<" nbBand : "<< m_NbBands<<std::endl; - break; - } - } // fin if CSLCount - else - { - itkExceptionMacro(<<"Zero band found in the dataset"); - return; - } - //GDALClose( hDataset ); - this->SetNumberOfComponents(m_NbBands); - } - else - { - this->SetNumberOfComponents(m_NbBands); +//FIXME this happen in the case of a hdf file with SUBDATASETS +// in this situation, at least the first dataset should be open (ideally all in an imagelist) +// char** papszMetadata; +// papszMetadata = m_poDataset->GetMetadata("SUBDATASETS"); +// if( CSLCount(papszMetadata) > 0 ) +// { +// std::string key; +// itk::MetaDataDictionary & dict = this->GetMetaDataDictionary(); +// for( int cpt = 0; papszMetadata[cpt] != NULL; cpt++ ) +// { +// std::cout << papszMetadata[cpt] << std::endl; +// ::itk::OStringStream lStream; +// lStream << MetaDataKey::SubMetadataKey << cpt; +// key = lStream.str(); +// +// itk::EncapsulateMetaData<std::string>(dict, key, +// static_cast<std::string>( papszMetadata[cpt] ) ); +// } +// std::cout << dict[dict.GetKeys()[0]] << std::endl; +// std::cout << key << std::endl; +// } + + itkExceptionMacro(<<"Zero band found in the dataset"); + return; } + this->SetNumberOfComponents(m_NbBands); + // Set the number of dimensions (verify for the dim ) this->SetNumberOfDimensions(2); @@ -414,22 +325,13 @@ printf("W / H : %d %d \n",m_width,m_height); itkExceptionMacro(<<"Memory allocation error for the 'rasterBands'"); return; } - for (i=0; i<m_NbBands; ++i) m_poBands[i] = m_poDataset->GetRasterBand(i+1); // Get Data Type // Consider only the data type given by the first band!!!!! // Maybe be could changed (to check) - -/// MARCHE PAS -//m_poBands[0]->SetRasterDataType(GDT_UInt16); - -/// A DECOMMENTER -// m_PxType = m_poBands[0]->GetRasterDataType(); -std::cout<< " JE TRICHE" <<std::endl; -std::cout<< m_PxType <<std::endl; -m_PxType = GDT_UInt16; + m_PxType = m_poBands[0]->GetRasterDataType(); // Following the data type given by GDAL we set it for ImageIO // BE CAREFUL !!!! At this time the complex data type are regarded @@ -524,12 +426,10 @@ m_PxType = GDT_UInt16; this-> SetNumberOfComponents(m_NbBands); if ( this->GetNumberOfComponents() == 1 ) { -std::cout<<"SCALAAAAAAAAAR" <<std::endl; this->SetPixelType(SCALAR); } else { -std::cout<<"VECTOOOOOOOOOOOOOOR" <<std::endl; this->SetPixelType(VECTOR); } } @@ -544,7 +444,7 @@ std::cout<<"VECTOOOOOOOOOOOOOOR" <<std::endl; /* -------------------------------------------------------------------- */ - /* Get Spacing */ + /* Get Spacing */ /* -------------------------------------------------------------------- */ // Default Spacing @@ -570,7 +470,7 @@ std::cout<<"VECTOOOOOOOOOOOOOOR" <<std::endl; static_cast<std::string>( GDALGetDriverLongName( hDriver ) ) ); /* -------------------------------------------------------------------- */ - /* Get the projection coordinate system of the image : ProjectionRef */ + /* Get the projection coordinate system of the image : ProjectionRef */ /* -------------------------------------------------------------------- */ if ( m_poDataset->GetProjectionRef() != NULL ) diff --git a/Code/IO/otbImageFileReader.txx b/Code/IO/otbImageFileReader.txx index 316fa965d952db31d758aefd62b76c058ea60228..63e3b23c7f4adea132115c4f4eda5cf422e2f944 100644 --- a/Code/IO/otbImageFileReader.txx +++ b/Code/IO/otbImageFileReader.txx @@ -92,14 +92,10 @@ ImageFileReader<TOutputImage> //otbMsgDebugMacro( <<"ImageFileReader<TOutputImage>::GenerateData : "); //otbMsgDebugMacro( <<" output->GetRequestedRegion() : "<<output->GetRequestedRegion()); -std::cout<< "ImageFileReader<TOutputImage>::GenerateData : " <<std::endl; -std::cout<<" output->GetRequestedRegion() : "<<output->GetRequestedRegion() <<std::endl; - // Test if the file exist and if it can be open. // and exception will be thrown otherwise. this->TestFileExistanceAndReadability(); -std::cout<<" FILENAME ?? " << this->m_FileName.c_str()<<std::endl; // Tell the ImageIO to read the file // OutputImagePixelType *buffer = @@ -153,7 +149,7 @@ std::cout<<" FILENAME ?? " << this->m_FileName.c_str()<<std::endl; //otbMsgDebugMacro( <<" Apres ioRegion : "<<ioRegion); -std::cout<< "ioRegion : "<<ioRegion<<std::endl; + this->m_ImageIO->SetIORegion(ioRegion); typedef itk::DefaultConvertPixelTraits< ITK_TYPENAME TOutputImage::IOPixelType > ConvertPixelTraits; @@ -232,7 +228,6 @@ ImageFileReader<TOutputImage> // !!!! Update FileName std::string lFileName; bool found = GetGdalReadImageFileName(this->m_FileName,lFileName); -std::cout<<" GenerateOutputInformation : filename " << lFileName << std::endl; if ( found == false ) { otbMsgDebugMacro( <<"Filename was NOT unknowed. May be reconize by a Image factory ! ");