diff --git a/Code/IO/otbJPEG2000ImageIO.cxx b/Code/IO/otbJPEG2000ImageIO.cxx index ccc71c0929e1abb89ced2d64090311cec843f1d6..700c03a0ef56bc218de990593db7a8182a175d7c 100644 --- a/Code/IO/otbJPEG2000ImageIO.cxx +++ b/Code/IO/otbJPEG2000ImageIO.cxx @@ -22,8 +22,7 @@ #include "otbSystem.h" #include "itkTimeProbe.h" - - +#include "itkMacro.h" @@ -60,7 +59,11 @@ class JPEG2000ReaderInternal public: JPEG2000ReaderInternal(); - int Initialize(); + opj_codec_t* GetCodec(){return this->m_Codec;}; + FILE* GetFile(){return this->m_File;}; + opj_image_t* GetImage(){return this->m_Image;}; + opj_stream_t* GetStream(){return this->m_Stream;}; + opj_codestream_info_v2* GetCstrInfo(){return this->m_CstrInfo;}; void Clean(); @@ -68,12 +71,6 @@ public: int Open(const char *filename); - opj_codec_t * m_Codec; - FILE* m_File; - opj_image_t* m_Image; - opj_stream_t* m_Stream; - opj_codestream_info_v2* m_CstrInfo; - bool m_IsOpen; OPJ_CODEC_FORMAT m_CodecFormat; @@ -92,11 +89,19 @@ public: unsigned int m_XNbOfTile; unsigned int m_YNbOfTile; +private: + opj_codec_t * m_Codec; + FILE* m_File; + opj_image_t* m_Image; + opj_stream_t* m_Stream; + opj_codestream_info_v2* m_CstrInfo; + + int Initialize(); + }; int JPEG2000ReaderInternal::Open(const char *filename) { - std::cout << "OPEN" << std::endl; this->Clean(); // Open the file @@ -137,7 +142,6 @@ int JPEG2000ReaderInternal::Open(const char *filename) void JPEG2000ReaderInternal::Clean() { - std::cout << "CLEAN" << std::endl; // Close the byte stream if (this->m_Stream) { @@ -215,8 +219,6 @@ JPEG2000ReaderInternal::JPEG2000ReaderInternal() int JPEG2000ReaderInternal::Initialize() { - std::cout << "INITIALIZE" << std::endl; - if (this->m_File) { // Creating the file stream @@ -266,8 +268,6 @@ int JPEG2000ReaderInternal::Initialize() return 0; } - std::cout << "codestream info ok" << std::endl; - // We can now retrieve the main information of the image and the codestream this->m_Width = this->m_Image->x1 - this->m_Image->x0; this->m_Height = this->m_Image->x1 - this->m_Image->x0; @@ -365,7 +365,7 @@ int JPEG2000ReaderInternal::CanRead() JPEG2000ImageIO::JPEG2000ImageIO() { - m_InternalImage = new JPEG2000ReaderInternal; + m_InternalReader = new JPEG2000ReaderInternal; // By default set number of dimensions to two. this->SetNumberOfDimensions(2); @@ -384,8 +384,8 @@ JPEG2000ImageIO::JPEG2000ImageIO() JPEG2000ImageIO::~JPEG2000ImageIO() { - m_InternalImage->Clean(); - delete m_InternalImage; + m_InternalReader->Clean(); + delete m_InternalReader; } bool JPEG2000ImageIO::CanReadFile(const char* filename) @@ -397,14 +397,12 @@ bool JPEG2000ImageIO::CanReadFile(const char* filename) return false; } - if ( !this->m_InternalImage->Open(filename) ) + if ( !this->m_InternalReader->Open(filename) ) { - this->m_InternalImage->Clean(); + this->m_InternalReader->Clean(); return false; } - std::cout<< "JPEG2000 file can be read and it is open" << std::endl; - return true; } @@ -422,8 +420,6 @@ void JPEG2000ImageIO::ReadVolume(void*) // Read image void JPEG2000ImageIO::Read(void* buffer) { - std::cout<< "ReadImageInformation: START" << std::endl; - // Check if conversion succeed if (buffer == NULL) { @@ -432,7 +428,7 @@ void JPEG2000ImageIO::Read(void* buffer) } // Re-open the file if it was closed - if ( !m_InternalImage->m_IsOpen ) + if ( !m_InternalReader->m_IsOpen ) { if ( !this->CanReadFile( m_FileName.c_str() ) ) { @@ -459,38 +455,35 @@ void JPEG2000ImageIO::Read(void* buffer) itk::TimeProbe chrono; chrono.Start(); - std::cout<< "Try to set decoded area: START" << std::endl; // Set the decoded area - if( !otbopenjpeg_opj_set_decode_area(m_InternalImage->m_Codec, - m_InternalImage->m_Image, + if( !otbopenjpeg_opj_set_decode_area(m_InternalReader->GetCodec(), + m_InternalReader->GetImage(), lFirstColumn, lFirstLine, lFirstColumn + lNbColumns, lFirstLine + lNbLines) ) { itkExceptionMacro(<< "The decoded area is not correct!"); - m_InternalImage->Clean(); + m_InternalReader->Clean(); return; } - std::cout<< "Try to set decoded area: END" << std::endl; - std::cout<< "Try to decode the area: START" << std::endl; - if ( !( otbopenjpeg_opj_decode_v2(m_InternalImage->m_Codec, m_InternalImage->m_Stream, m_InternalImage->m_Image) && - otbopenjpeg_opj_end_decompress(m_InternalImage->m_Codec, m_InternalImage->m_Stream) ) + if ( !( otbopenjpeg_opj_decode_v2(m_InternalReader->GetCodec(), m_InternalReader->GetStream(), m_InternalReader->GetImage()) && + otbopenjpeg_opj_end_decompress(m_InternalReader->GetCodec(), m_InternalReader->GetStream()) ) ) { itkExceptionMacro(<< "Failed to decode the image!"); - m_InternalImage->Clean(); + m_InternalReader->Clean(); return; } - std::cout<< "Try to decode the area: END" << std::endl; - unsigned int nbPixel = (m_InternalImage->m_Image->x1 - m_InternalImage->m_Image->x0) * - (m_InternalImage->m_Image->y1 - m_InternalImage->m_Image->y0); - std::cout<< "NbPixel = " << nbPixel << std::endl; - std::cout<< "NbOfComp = " << m_InternalImage->m_NbOfComponent << std::endl; + + unsigned int nbPixel = (m_InternalReader->GetImage()->x1 - m_InternalReader->GetImage()->x0) * + (m_InternalReader->GetImage()->y1 - m_InternalReader->GetImage()->y0); + //std::cout<< "NbPixel = " << nbPixel << std::endl; + //std::cout<< "NbOfComp = " << m_InternalReader->m_NbOfComponent << std::endl; // Convert buffer from void * to unsigned char * //unsigned char *p = static_cast<unsigned char *>(buffer); @@ -508,11 +501,11 @@ void JPEG2000ImageIO::Read(void* buffer) unsigned short *p = static_cast<unsigned short *>(buffer); for(unsigned int itPixel = 0; itPixel < nbPixel; itPixel++) { - for (unsigned int itComp = 0; itComp < m_InternalImage->m_NbOfComponent; itComp++) + for (unsigned int itComp = 0; itComp < m_InternalReader->m_NbOfComponent; itComp++) { - OPJ_INT32* data = m_InternalImage->m_Image->comps[itComp].data; + OPJ_INT32* data = m_InternalReader->GetImage()->comps[itComp].data; //unsigned short* datashort = reinterpret_cast<unsigned short*>(data); - //OPJ_INT32 value = m_InternalImage->m_Image->comps[itComp].data[itPixel]; + //OPJ_INT32 value = m_InternalReader->m_Image->comps[itComp].data[itPixel]; *p = static_cast<unsigned short>(data[itPixel] & 0xffff); //p += m_BytePerPixel; p++; @@ -527,18 +520,14 @@ void JPEG2000ImageIO::Read(void* buffer) chrono.Stop(); otbMsgDevMacro(<< "JPEG2000ImageIO::Read took " << chrono.GetTotal() << " sec") - m_InternalImage->Clean(); - - - + m_InternalReader->Clean(); } void JPEG2000ImageIO::ReadImageInformation() { - std::cout<< "ReadImageInformation: START" << std::endl; // If the internal image was not open we open it. // This is usually done when the user sets the ImageIO manually - if ( !m_InternalImage->m_IsOpen ) + if ( !m_InternalReader->m_IsOpen ) { if ( !this->CanReadFile( m_FileName.c_str() ) ) { @@ -548,10 +537,10 @@ void JPEG2000ImageIO::ReadImageInformation() } // Check some internal parameters of the JPEG2000 file - if ( !this->m_InternalImage->CanRead()) + if ( !this->m_InternalReader->CanRead()) { itkExceptionMacro(<< "Cannot read this file because some JPEG2000 parameters are not supported!"); - this->m_InternalImage->Clean(); + this->m_InternalReader->Clean(); return; } @@ -559,18 +548,18 @@ void JPEG2000ImageIO::ReadImageInformation() m_Spacing[1] = 1.0; // If we have some spacing information we use it - if ( (m_InternalImage->m_XResolution > 0) && (m_InternalImage->m_YResolution > 0) ) + if ( (m_InternalReader->m_XResolution > 0) && (m_InternalReader->m_YResolution > 0) ) { // We check previously that the X and Y resolution is equal between the components - m_Spacing[0] = m_InternalImage->m_XResolution[0]; - m_Spacing[1] = m_InternalImage->m_YResolution[0]; + m_Spacing[0] = m_InternalReader->m_XResolution[0]; + m_Spacing[1] = m_InternalReader->m_YResolution[0]; } m_Origin[0] = 0.0; m_Origin[1] = 0.0; - m_Dimensions[0] = m_InternalImage->m_Width; - m_Dimensions[1] = m_InternalImage->m_Height; + m_Dimensions[0] = m_InternalReader->m_Width; + m_Dimensions[1] = m_InternalReader->m_Height; this->SetNumberOfDimensions(2); @@ -579,14 +568,14 @@ void JPEG2000ImageIO::ReadImageInformation() itkExceptionMacro(<< "Image size is null."); } - this->SetNumberOfComponents(m_InternalImage->m_NbOfComponent); + this->SetNumberOfComponents(m_InternalReader->m_NbOfComponent); // Automatically set the Type to Binary for JPEG2000 data this->SetFileTypeToBinary(); // We check previously that these values are equal between all components - unsigned int precision = m_InternalImage->m_Precision[0]; - int isSigned = m_InternalImage->m_Signed[0]; + unsigned int precision = m_InternalReader->m_Precision[0]; + int isSigned = m_InternalReader->m_Signed[0]; if (precision <= 8) { @@ -636,10 +625,10 @@ void JPEG2000ImageIO::ReadImageInformation() otbMsgDebugMacro(<< "=========================="); otbMsgDebugMacro(<< "ReadImageInformation: "); - otbMsgDebugMacro(<< "Tile size (WxH): " << m_InternalImage->m_TileWidth << " x " - << m_InternalImage->m_TileHeight); - otbMsgDebugMacro(<< "Number of tiles (Xdim x Ydim) : " << m_InternalImage->m_XNbOfTile - << " x " << m_InternalImage->m_YNbOfTile); + otbMsgDebugMacro(<< "Tile size (WxH): " << m_InternalReader->m_TileWidth << " x " + << m_InternalReader->m_TileHeight); + otbMsgDebugMacro(<< "Number of tiles (Xdim x Ydim) : " << m_InternalReader->m_XNbOfTile + << " x " << m_InternalReader->m_YNbOfTile); otbMsgDebugMacro(<< "Precision: " << precision); otbMsgDebugMacro(<< "Signed: " << isSigned); otbMsgDebugMacro(<< "Number of octet per value: " << m_BytePerPixel); @@ -653,7 +642,6 @@ void JPEG2000ImageIO::ReadImageInformation() otbMsgDebugMacro(<< " ComponentSize : " << this->GetComponentSize()); otbMsgDebugMacro(<< " GetPixelSize : " << this->GetPixelSize()); - std::cout<< "ReadImageInformation: END" << std::endl; } // Not yet implemented diff --git a/Code/IO/otbJPEG2000ImageIO.h b/Code/IO/otbJPEG2000ImageIO.h index 9f8febc5b7044942b84870195879d42a312e4848..1119746fd5d00a8e5e15cfce08ee5fa08b86f601 100644 --- a/Code/IO/otbJPEG2000ImageIO.h +++ b/Code/IO/otbJPEG2000ImageIO.h @@ -107,7 +107,7 @@ protected: void PrintSelf(std::ostream& os, itk::Indent indent) const; - JPEG2000ReaderInternal *m_InternalImage; + JPEG2000ReaderInternal* m_InternalReader; private: JPEG2000ImageIO(const Self &); //purposely not implemented