@@ -14,22 +14,30 @@ public enum DataContentFormat
14
14
Uint32
15
15
}
16
16
17
+ public enum Endianness
18
+ {
19
+ LittleEndian ,
20
+ BigEndian
21
+ }
22
+
17
23
public class RawDatasetImporter : DatasetImporterBase
18
24
{
19
25
string filePath ;
20
26
private int dimX ;
21
27
private int dimY ;
22
28
private int dimZ ;
23
29
private DataContentFormat contentFormat ;
24
- int skipBytes ;
30
+ private Endianness endianness ;
31
+ private int skipBytes ;
25
32
26
- public RawDatasetImporter ( string filePath , int dimX , int dimY , int dimZ , DataContentFormat contentFormat , int skipBytes )
33
+ public RawDatasetImporter ( string filePath , int dimX , int dimY , int dimZ , DataContentFormat contentFormat , Endianness endianness , int skipBytes )
27
34
{
28
35
this . filePath = filePath ;
29
36
this . dimX = dimX ;
30
37
this . dimY = dimY ;
31
38
this . dimZ = dimZ ;
32
39
this . contentFormat = contentFormat ;
40
+ this . endianness = endianness ;
33
41
this . skipBytes = skipBytes ;
34
42
}
35
43
@@ -68,31 +76,9 @@ public override VolumeDataset Import()
68
76
dataset . data = new int [ uDimension ] ;
69
77
70
78
// Read the data/sample values
71
- int val = 0 ;
72
79
for ( int i = 0 ; i < uDimension ; i ++ )
73
80
{
74
- switch ( contentFormat )
75
- {
76
- case DataContentFormat . Int8 :
77
- val = ( int ) reader . ReadSByte ( ) ;
78
- break ;
79
- case DataContentFormat . Int16 :
80
- val = ( int ) reader . ReadInt16 ( ) ;
81
- break ;
82
- case DataContentFormat . Int32 :
83
- val = ( int ) reader . ReadInt32 ( ) ;
84
- break ;
85
- case DataContentFormat . Uint8 :
86
- val = ( int ) reader . ReadByte ( ) ;
87
- break ;
88
- case DataContentFormat . Uint16 :
89
- val = ( int ) reader . ReadUInt16 ( ) ;
90
- break ;
91
- case DataContentFormat . Uint32 :
92
- val = ( int ) reader . ReadUInt32 ( ) ;
93
- break ;
94
- }
95
- dataset . data [ i ] = val ;
81
+ dataset . data [ i ] = ReadDataValue ( reader ) ;
96
82
}
97
83
Debug . Log ( "Loaded dataset in range: " + dataset . GetMinDataValue ( ) + " - " + dataset . GetMaxDataValue ( ) ) ;
98
84
@@ -101,6 +87,68 @@ public override VolumeDataset Import()
101
87
return dataset ;
102
88
}
103
89
90
+ private int ReadDataValue ( BinaryReader reader )
91
+ {
92
+ switch ( contentFormat )
93
+ {
94
+ case DataContentFormat . Int8 :
95
+ {
96
+ sbyte dataval = reader . ReadSByte ( ) ;
97
+ return ( int ) dataval ;
98
+ }
99
+ case DataContentFormat . Int16 :
100
+ {
101
+ short dataval = reader . ReadInt16 ( ) ;
102
+ if ( endianness == Endianness . BigEndian )
103
+ {
104
+ byte [ ] bytes = BitConverter . GetBytes ( dataval ) ;
105
+ Array . Reverse ( bytes , 0 , bytes . Length ) ;
106
+ dataval = BitConverter . ToInt16 ( bytes , 0 ) ;
107
+ }
108
+ return ( int ) dataval ;
109
+ }
110
+ case DataContentFormat . Int32 :
111
+ {
112
+ int dataval = reader . ReadInt32 ( ) ;
113
+ if ( endianness == Endianness . BigEndian )
114
+ {
115
+ byte [ ] bytes = BitConverter . GetBytes ( dataval ) ;
116
+ Array . Reverse ( bytes , 0 , bytes . Length ) ;
117
+ dataval = BitConverter . ToInt32 ( bytes , 0 ) ;
118
+ }
119
+ return ( int ) dataval ;
120
+ }
121
+ case DataContentFormat . Uint8 :
122
+ {
123
+ return ( int ) reader . ReadByte ( ) ;
124
+ }
125
+ case DataContentFormat . Uint16 :
126
+ {
127
+ ushort dataval = reader . ReadUInt16 ( ) ;
128
+ if ( endianness == Endianness . BigEndian )
129
+ {
130
+ byte [ ] bytes = BitConverter . GetBytes ( dataval ) ;
131
+ Array . Reverse ( bytes , 0 , bytes . Length ) ;
132
+ dataval = BitConverter . ToUInt16 ( bytes , 0 ) ;
133
+ }
134
+ return ( int ) dataval ;
135
+ }
136
+ case DataContentFormat . Uint32 :
137
+ {
138
+ uint dataval = reader . ReadUInt32 ( ) ;
139
+ if ( endianness == Endianness . BigEndian )
140
+ {
141
+ byte [ ] bytes = BitConverter . GetBytes ( dataval ) ;
142
+ Array . Reverse ( bytes , 0 , bytes . Length ) ;
143
+ dataval = BitConverter . ToUInt32 ( bytes , 0 ) ;
144
+ }
145
+ return ( int ) dataval ;
146
+ }
147
+ default :
148
+ throw new NotImplementedException ( "Unimplemented data content format" ) ;
149
+ }
150
+ }
151
+
104
152
private int GetSampleFormatSize ( DataContentFormat format )
105
153
{
106
154
switch ( format )
0 commit comments