Skip to content
Snippets Groups Projects
Commit a192546b authored by Patrick Imbo's avatar Patrick Imbo
Browse files

No commit message

No commit message
parent 1be957db
No related branches found
No related tags found
No related merge requests found
......@@ -9,20 +9,17 @@
$Id$
=========================================================================*/
#include "itkExceptionObject.h"
#include "itkMacro.h"
#include "otbONERAImageIO.h"
#include "itkByteSwapper.h"
#include <itksys/SystemTools.hxx>
#include <string.h> // for strncpy
#include <iostream.h>
#include <string.h>
#
#include "otbONERAImageIO.h"
#include "itkExceptionObject.h"
#include "otbMacro.h"
#include <sys/types.h>
#include <dirent.h>
#include "itkMacro.h"
#define ONERA_MAGIC_NUMBER 33554433
#define ONERA_HEADER_LENGTH 0
#define ONERA_FILE_ID_OFFSET 0
namespace otb
......@@ -46,20 +43,19 @@ ONERAImageIO::ONERAImageIO()
m_Origin[1] = 0.0;
m_currentfile = NULL;
m_poBands = NULL;
}
ONERAImageIO::~ONERAImageIO()
{
if( m_poBands != NULL ) delete [] m_poBands;
}
bool ONERAImageIO::CanReadFile( const char* filename )
{
// First check the filename extension
std::string fname = filename;
std::ifstream file;
std::string fname(filename);
if ( fname == "" )
{
otbDebugMacro(<< "No filename specified.");
......@@ -134,20 +130,20 @@ void ONERAImageIO::Read(void* buffer)
//read header information file:
this->OpenOneraDataFileForReading(file, m_FileName.c_str());
int HeaderLength = ONERA_HEADER_LENGTH + 4 + 4*2* m_Width;
int HeaderLength = ONERA_HEADER_LENGTH + 4 + 4*2* m_width;
file.seekg(HeaderLength, std::ios::beg);
if( !this->ReadBufferAsBinary( file, buffer, this->GetImageSizeInBytes()) )
{
otbExceptionMacro(<<"Read failed: Wanted " << this->GetImageSizeInBytes()
itkExceptionMacro(<<"Read failed: Wanted " << this->GetImageSizeInBytes()
<< " bytes, but read " << file.gcount() << " bytes.");
}
//byte swapping depending on pixel type:
if(this->GetComponentType() == FLOAT)
{
ByteSwapper<float>::SwapRangeFromSystemToBigEndian(
itk::ByteSwapper<float>::SwapRangeFromSystemToBigEndian(
reinterpret_cast<float *>(buffer),
this->GetImageSizeInComponents() );
}
......@@ -167,7 +163,7 @@ bool ONERAImageIO::OpenOneraDataFileForReading(std::ifstream& os,
// Make sure that we have a file to
if ( filename == "" )
{
otbExceptionMacro(<<"A FileName must be specified.");
itkExceptionMacro(<<"A FileName must be specified.");
return false;
}
......@@ -194,7 +190,9 @@ bool ONERAImageIO::OpenOneraDataFileForReading(std::ifstream& os,
void ONERAImageIO::ReadImageInformation()
{
this->InternalReadImageInformation();
std::ifstream file;
this->InternalReadImageInformation(file);
file.close();
}
......@@ -205,18 +203,13 @@ void ONERAImageIO::InternalReadImageInformation(std::ifstream& file)
//read .ent file (header)
if ( ! this->OpenOneraDataFileForReading(file, m_FileName.c_str()) )
{
otbExceptionMacro(<< "Cannot read requested file");
itkExceptionMacro(<< "Cannot read requested file");
}
// Find info...
float NbCol;
float NbRow
p = &h;
if( sizeof(h) != BIORAD_HEADER_LENGTH )
{
itkExceptionMacro(<< "Problem of alignement on your plateform");
}
float NbRow;
file.seekg(ONERA_FILE_ID_OFFSET + 4, std::ios::beg );
file.read((char*)(&NbCol), 4);
......@@ -225,15 +218,16 @@ void ONERAImageIO::InternalReadImageInformation(std::ifstream& file)
itk::ByteSwapper<float>::SwapFromSystemToBigEndian(&NbRow);
file.seekg(0, std::ios::end);
long gcount = static_cast<long>(file.tellg()) - ONERA_HEADER_LENGTH - 2*4*NbCol;
long gcountHead = static_cast<long>(ONERA_HEADER_LENGTH + 2*4*NbCol);
long gcount = static_cast<long>(file.tellg());
// Set dim X,Y
m_width = static_cast<int> ( NbCol );
m_height = static_cast<int> ( gcount / (4*2) );
m_height = static_cast<int> ( gcount-gcountHead / (4*2) );
if( m_width==0 & m_height==0)
{
otbExceptionMacro(<<"Unknown image dimension");
itkExceptionMacro(<<"Unknown image dimension");
}
else
{
......
......@@ -12,18 +12,8 @@
#ifndef __otbONERAImageIO_h
#define __otbONERAImageIO_h
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif
/* C++ Libraries */
#include <string>
#include "stdlib.h"
/* ITK Libraries */
#include "itkImageIOBase.h"
#include "otbMetaDataKey.h"
#include <fstream>
namespace otb
......@@ -38,8 +28,7 @@ namespace otb
* \ingroup IOFilters
*
*/
class ITK_EXPORT GDALImageIO : public itk::ImageIOBase,
public MetaDataKey
class ITK_EXPORT ONERAImageIO : public itk::ImageIOBase
{
public:
......@@ -99,10 +88,12 @@ protected:
ONERAImageIO();
/** Destructor.*/
~ONERAImageIO();
bool OpenOneraDataFileForReading(std::ifstream& os, const char* filename);
void InternalReadImageInformation(std::ifstream& file);
void PrintSelf(std::ostream& os, itk::Indent indent) const;
/** Read all information on the image*/
void InternalReadImageInformation();
/** Dimension along Ox of the image*/
int m_width;
/** Dimension along Oy of the image*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment