Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
otb
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
David Youssefi
otb
Commits
a4d10783
Commit
a4d10783
authored
18 years ago
by
Thomas Feuvrier
Browse files
Options
Downloads
Patches
Plain Diff
Mise a jour pour gestion Little/Big endian (suite test SunOS)
parent
68a60c3f
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Code/IO/otbONERAImageIO.cxx
+52
-66
52 additions, 66 deletions
Code/IO/otbONERAImageIO.cxx
Code/IO/otbONERAImageIO.h
+19
-3
19 additions, 3 deletions
Code/IO/otbONERAImageIO.h
with
71 additions
and
69 deletions
Code/IO/otbONERAImageIO.cxx
+
52
−
66
View file @
a4d10783
...
...
@@ -51,6 +51,16 @@ ONERAImageIO::ONERAImageIO()
m_FlagWriteImageInformation
=
true
;
if
(
itk
::
ByteSwapper
<
char
>::
SystemIsLittleEndian
()
==
true
)
{
m_ByteOrder
=
LittleEndian
;
}
else
{
m_ByteOrder
=
BigEndian
;
}
m_FileByteOrder
=
BigEndian
;
}
...
...
@@ -66,48 +76,6 @@ ONERAImageIO::~ONERAImageIO()
}
}
// static std::string
// GetHeaderFileName( const std::string & filename )
// {
// std::string ImageFileName = System::GetRootName(filename);
// std::string fileExt = System::GetExtension(filename);
// if(fileExt.compare("ent"))
// {
// ImageFileName += ".ent";
// return( ImageFileName );
// }
// else
// {
// return("");
// }
// }
//Returns the base image filename.
// static std::string GetImageFileName( const std::string& filename )
// {
// std::string fileExt = System::GetExtension(filename);
// std::string ImageFileName = System::GetRootName(filename);
// if(fileExt.compare("dat") )
// {
// ImageFileName += ".dat";
// return( ImageFileName );
// }
// else
// {
// //uiig::Reporter* reporter = uiig::Reporter::getReporter();
// //std::string temp="Error, Can not determine compressed file image name. ";
// //temp+=filename;
// //reporter->setMessage( temp );
// return ("");
// }
// }
bool
ONERAImageIO
::
CanReadFile
(
const
char
*
FileNameToRead
)
{
...
...
@@ -138,14 +106,28 @@ bool ONERAImageIO::CanReadFile( const char* FileNameToRead )
return
false
;
}
this
->
m_ByteOrder
=
LittleEndian
;
// Check magic_number
int
magicNumber
;
m_Datafile
.
seekg
(
0
,
std
::
ios
::
beg
);
m_Datafile
.
read
((
char
*
)(
&
magicNumber
),
4
);
itk
::
ByteSwapper
<
int
>::
SwapFromSystemToLittleEndian
(
&
magicNumber
);
if
(
magicNumber
==
ONERA_MAGIC_NUMBER
)
{
m_FileByteOrder
=
m_ByteOrder
;
}
else
{
if
(
m_ByteOrder
==
LittleEndian
)
{
m_FileByteOrder
=
BigEndian
;
}
else
if
(
m_ByteOrder
==
BigEndian
)
{
m_FileByteOrder
=
LittleEndian
;
}
}
// Swap if necessary
otbSwappFileOrderToSystemOrderMacro
(
int
,
&
magicNumber
,
1
);
m_Headerfile
.
close
();
m_Datafile
.
close
();
...
...
@@ -231,21 +213,11 @@ otbMsgDevMacro( <<" Nb Of Components : "<<this->GetNumberOfComponents());
itkExceptionMacro
(
<<
"ONERAImageIO::Read() Can Read the specified Region"
);
// read failed
}
/* for( unsigned long i=0 ; i < numberOfBytesRead ; i = i+ 2 * m_NbOctetPixel )
{
memcpy((void*)(&(p[cpt])),(const void*)(&(value[i])),(size_t)( 2* m_NbOctetPixel));
cpt += 2*m_NbOctetPixel;
} */
memcpy
((
void
*
)(
&
(
p
[
cpt
])),(
const
void
*
)(
value
),(
size_t
)(
numberOfBytesToBeRead
));
cpt
+=
numberOfBytesToBeRead
;
}
//byte swapping depending on pixel type:
/* if(this->GetComponentType() == FLOAT)
{
itk::ByteSwapper<float>::SwapRangeFromSystemToLittleEndian(
reinterpret_cast<float *>(buffer),cpt);
}*/
unsigned
long
numberOfPixelsPerRegion
=
lNbLignes
*
lNbColonnes
*
2
;
// Swap bytes if necessary
if
(
0
)
{}
...
...
@@ -358,18 +330,35 @@ void ONERAImageIO::InternalReadImageInformation()
itkExceptionMacro
(
<<
"data format not supported by OTB (only 'complex_real_4' is available)"
);
}
// Check magic_number
int
magicNumber
;
m_Datafile
.
seekg
(
0
,
std
::
ios
::
beg
);
m_Datafile
.
read
((
char
*
)(
&
magicNumber
),
4
);
itk
::
ByteSwapper
<
int
>::
SwapFromSystemToLittleEndian
(
&
magicNumber
);
if
(
magicNumber
==
ONERA_MAGIC_NUMBER
)
{
m_FileByteOrder
=
m_ByteOrder
;
}
else
{
if
(
m_ByteOrder
==
LittleEndian
)
{
m_FileByteOrder
=
BigEndian
;
}
else
if
(
m_ByteOrder
==
BigEndian
)
{
m_FileByteOrder
=
LittleEndian
;
}
}
otbSwappFileOrderToSystemOrderMacro
(
int
,
&
magicNumber
,
1
);
// Find info.. : Number of Row , Nb of Columns
short
NbCol
;
m_Datafile
.
seekg
(
ONERA_HEADER_LENGTH
+
2
,
std
::
ios
::
beg
);
m_Datafile
.
read
((
char
*
)(
&
NbCol
),
2
);
itk
::
ByteSwapper
<
short
>::
SwapFromSystemToLittleEndian
(
&
NbCol
);
otbSwappFileOrderToSystemOrderMacro
(
short
,
&
NbCol
,
1
);
m_Datafile
.
seekg
(
0
,
std
::
ios
::
end
);
long
gcountHead
=
static_cast
<
long
>
(
ONERA_HEADER_LENGTH
+
2
*
4
*
NbCol
);
...
...
@@ -400,6 +389,8 @@ otbMsgDebugMacro( <<" ComponentType : "<<this->GetComponentTypeAsSt
otbMsgDebugMacro
(
<<
" ComponentSize : "
<<
this
->
GetComponentSize
());
otbMsgDebugMacro
(
<<
" NumberOfComponents : "
<<
this
->
GetNumberOfComponents
());
otbMsgDebugMacro
(
<<
" NbOctetPixel : "
<<
m_NbOctetPixel
);
otbMsgDebugMacro
(
<<
" Host byte order : "
<<
this
->
GetByteOrderAsString
(
m_ByteOrder
));
otbMsgDebugMacro
(
<<
" File byte order : "
<<
this
->
GetByteOrderAsString
(
m_FileByteOrder
));
}
...
...
@@ -505,7 +496,7 @@ otbMsgDevMacro( <<" Nb Of Components : "<<this->GetNumberOfComponents());
// on commence l'offset � 0 (lorsque que l'on est pas en "Streaming")
if
(
(
lNbLignes
==
m_Dimensions
[
1
])
&&
(
lNbColonnes
==
m_Dimensions
[
0
]))
{
otbMsgDevMacro
(
<<
"Force l'offset de l'IORegion
�
0"
);
otbMsgDevMacro
(
<<
"Force l'offset de l'IORegion
a
0"
);
lPremiereLigne
=
0
;
lPremiereColonne
=
0
;
}
...
...
@@ -518,12 +509,6 @@ otbMsgDevMacro( <<" Nb Of Components : "<<this->GetNumberOfComponents());
char
*
tempmemory
=
new
char
[
numberOfBytesRegion
];
memcpy
(
tempmemory
,
buffer
,
numberOfBytesRegion
);
if
(
this
->
GetComponentType
()
==
FLOAT
)
{
itk
::
ByteSwapper
<
float
>::
SwapRangeFromSystemToLittleEndian
(
reinterpret_cast
<
float
*>
(
tempmemory
),
numberOfComponents
);
}
for
(
unsigned
int
LineNo
=
lPremiereLigne
;
LineNo
<
lPremiereLigne
+
lNbLignes
;
LineNo
++
)
{
char
*
value
=
tempmemory
+
numberOfBytesPerLines
*
(
LineNo
-
lPremiereLigne
);
...
...
@@ -581,7 +566,7 @@ void ONERAImageIO::WriteImageInformation()
short
NbRow
=
static_cast
<
short
>
(
m_Dimensions
[
1
]);
int
ByteSizeCol
=
NbCol
*
4
*
2
;
itk
::
ByteSwapper
<
int
>::
SwapFromSystemToLittleEndian
(
&
magicNumber
);
//
itk::ByteSwapper< int>::SwapFromSystemToLittleEndian(&magicNumber);
m_Datafile
.
seekp
(
0
,
std
::
ios
::
beg
);
m_Datafile
.
write
((
char
*
)(
&
magicNumber
),
4
);
...
...
@@ -593,7 +578,7 @@ void ONERAImageIO::WriteImageInformation()
delete
[]
tab
;
// write number of columns
itk
::
ByteSwapper
<
short
>::
SwapFromSystemToLittleEndian
(
&
NbCol
);
//
itk::ByteSwapper<short>::SwapFromSystemToLittleEndian(&NbCol);
m_Datafile
.
seekp
(
ONERA_HEADER_LENGTH
+
2
,
std
::
ios
::
beg
);
m_Datafile
.
write
((
char
*
)(
&
NbCol
),
2
);
...
...
@@ -605,6 +590,7 @@ otbMsgDebugMacro( <<" Size : "<<m_Dimensions[0]<<","<<m_Di
otbMsgDebugMacro
(
<<
" ComponentType : "
<<
this
->
GetComponentType
()
);
otbMsgDebugMacro
(
<<
" NumberOfComponents : "
<<
this
->
GetNumberOfComponents
());
otbMsgDebugMacro
(
<<
" NbOctetPixel : "
<<
m_NbOctetPixel
);
otbMsgDebugMacro
(
<<
" Host byte order : "
<<
this
->
GetByteOrderAsString
(
m_ByteOrder
));
...
...
This diff is collapsed.
Click to expand it.
Code/IO/otbONERAImageIO.h
+
19
−
3
View file @
a4d10783
...
...
@@ -127,17 +127,33 @@ private:
*/
void
GetOneraImageFileName
(
const
char
*
filename
,
std
::
string
&
OneraFileName
);
#define otbSwappFileOrderToSystemOrderMacro(StrongType, buffer, buffer_size) \
{ \
typedef itk::ByteSwapper< StrongType > InternalByteSwapperType; \
if ( m_ByteOrder != m_FileByteOrder ) \
{ \
if ( m_ByteOrder == LittleEndian ) \
{ \
InternalByteSwapperType::SwapRangeFromSystemToBigEndian( (StrongType *)buffer, buffer_size ); \
} \
else if ( m_ByteOrder == BigEndian ) \
{ \
InternalByteSwapperType::SwapRangeFromSystemToLittleEndian((StrongType *)buffer, buffer_size ); \
} \
} \
}
#define otbSwappFileToSystemMacro(StrongType, WeakType, buffer, buffer_size) \
else if ( this->GetComponentType() == WeakType ) \
{ \
typedef itk::ByteSwapper< StrongType > InternalByteSwapperType; \
InternalByteSwapperType::SwapRangeFromSystemToLittleEndian((StrongType *)buffer, buffer_size ); \
otbSwappFileOrderToSystemOrderMacro( StrongType, buffer, buffer_size )\
}
/** Nombre d'octets par pixel */
int
m_NbOctetPixel
;
bool
m_FlagWriteImageInformation
;
/** File byte order */
itk
::
ImageIOBase
::
ByteOrder
m_FileByteOrder
;
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment