Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void image::read(const std::string &name_input_file) {
- std::ifstream input_file(name_input_file, std::ios_base::binary);
- if (!input_file.is_open()) {
- throw unable_open_file(name_input_file);
- }
- input_file.read(reinterpret_cast<char *>(&file_header),
- sizeof(file_header));
- if (file_header.file_type != 0x4D42) {
- throw invalid_version_file_type(std::to_string(bmp_info_header.size));
- }
- input_file.read(reinterpret_cast<char *>(&bmp_info_header),
- sizeof(bmp_info_header));
- if (bmp_info_header.height <= 0) {
- throw bad_height(std::to_string(bmp_info_header.height));
- }
- if (bmp_info_header.bit_count != 24) {
- throw bad_bit_count(std::to_string(bmp_info_header.bit_count));
- }
- input_file.seekg(file_header.offset_data, std::ifstream::beg);
- auto byte_count_per_row =
- bmp_info_header.width * bmp_info_header.bit_count / 8;
- unsigned long padding_byte_count_per_row =
- calculate_padding(byte_count_per_row);
- data.resize((byte_count_per_row + padding_byte_count_per_row) *
- bmp_info_header.height);
- input_file.read(reinterpret_cast<char *>(data.data()),
- static_cast<std::streamsize>(data.size()));
- input_file.close();
- }
- void image::write(const std::string &name_output_file) {
- std::ofstream output_file(name_output_file, std::ios_base::binary);
- output_file.write(reinterpret_cast<char *>(&file_header),
- sizeof(file_header));
- output_file.write(reinterpret_cast<char *>(&bmp_info_header),
- sizeof(bmp_info_header));
- output_file.write(reinterpret_cast<char *>(data.data()),
- static_cast<std::streamsize>(data.size()));
- output_file.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement