35 struct ImageInformationRecord
37 static constexpr int TYPE = 1;
40 uint16_t record_length;
42 std::string satellite_name;
43 std::string instrument_name;
45 uint8_t bit_per_pixel;
46 uint16_t columns_count;
48 uint8_t compression_flag;
50 uint8_t channel_number;
51 uint8_t total_segment_count;
52 uint8_t current_segment_number;
53 uint8_t current_segment_pos;
54 uint16_t current_segment_line_pos;
56 uint8_t compressed_info_algo;
57 uint8_t compressed_info_lossless;
58 uint8_t compressed_info_level;
60 ImageInformationRecord(uint8_t *data)
63 record_length = data[1] << 8 | data[2];
64 satellite_name = std::string(&data[3], &data[3 + 9]);
65 instrument_name = std::string(&data[12], &data[12 + 7]);
66 bit_per_pixel = data[19];
67 columns_count = data[20] << 8 | data[21];
68 lines_count = data[22] << 8 | data[23];
69 compression_flag = data[24];
71 channel_number = data[25];
72 total_segment_count = data[26];
73 current_segment_number = data[27];
74 current_segment_pos = data[28];
75 current_segment_line_pos = data[29] << 8 | data[30];
77 compressed_info_algo = data[31] >> 7;
78 compressed_info_lossless = (data[31] >> 6) & 1;
79 compressed_info_level = data[31] & 0b111111;
83 struct ImageNavigationRecord
85 static constexpr int TYPE = 2;
88 uint16_t record_length;
89 std::string projection_name;
90 float column_scaling_factor;
91 float line_scaling_factor;
108 double column_scalar;
111 ImageNavigationRecord(uint8_t *data)
114 record_length = data[1] << 8 | data[2];
115 projection_name = std::string((
char *)&data[3], (
char *)&data[3 + 32]);
117 ((
float *)&column_scaling_factor)[3] = data[35];
118 ((
float *)&column_scaling_factor)[2] = data[36];
119 ((
float *)&column_scaling_factor)[1] = data[37];
120 ((
float *)&column_scaling_factor)[0] = data[38];
122 ((
float *)&line_scaling_factor)[3] = data[39];
123 ((
float *)&line_scaling_factor)[2] = data[40];
124 ((
float *)&line_scaling_factor)[1] = data[41];
125 ((
float *)&line_scaling_factor)[0] = data[42];
127 ((
float *)&column_offset)[3] = data[43];
128 ((
float *)&column_offset)[2] = data[44];
129 ((
float *)&column_offset)[1] = data[45];
130 ((
float *)&column_offset)[0] = data[46];
132 ((
float *)&line_offset)[3] = data[47];
133 ((
float *)&line_offset)[2] = data[48];
134 ((
float *)&line_offset)[1] = data[49];
135 ((
float *)&line_offset)[0] = data[50];
137 column_scalar = line_scalar = 0.0;