Advertisement
kolbka_

Untitled

Feb 24th, 2022
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. void image::read(const std::string &name_input_file) {
  2.     std::ifstream input_file(name_input_file, std::ios_base::binary);
  3.     if (!input_file.is_open()) {
  4.         throw unable_open_file(name_input_file);
  5.     }
  6.     input_file.read(reinterpret_cast<char *>(&file_header),
  7.                     sizeof(file_header));
  8.     if (file_header.file_type != 0x4D42) {
  9.         throw invalid_version_file_type(std::to_string(bmp_info_header.size));
  10.     }
  11.     input_file.read(reinterpret_cast<char *>(&bmp_info_header),
  12.                     sizeof(bmp_info_header));
  13.     if (bmp_info_header.height <= 0) {
  14.         throw bad_height(std::to_string(bmp_info_header.height));
  15.     }
  16.     if (bmp_info_header.bit_count != 24) {
  17.         throw bad_bit_count(std::to_string(bmp_info_header.bit_count));
  18.     }
  19.     input_file.seekg(file_header.offset_data, std::ifstream::beg);
  20.     auto byte_count_per_row =
  21.         bmp_info_header.width * bmp_info_header.bit_count / 8;
  22.     unsigned long padding_byte_count_per_row =
  23.         calculate_padding(byte_count_per_row);
  24.     data.resize((byte_count_per_row + padding_byte_count_per_row) *
  25.                 bmp_info_header.height);
  26.  
  27.     input_file.read(reinterpret_cast<char *>(data.data()),
  28.                     static_cast<std::streamsize>(data.size()));
  29.     input_file.close();
  30. }
  31. void image::write(const std::string &name_output_file) {
  32.     std::ofstream output_file(name_output_file, std::ios_base::binary);
  33.     output_file.write(reinterpret_cast<char *>(&file_header),
  34.                       sizeof(file_header));
  35.     output_file.write(reinterpret_cast<char *>(&bmp_info_header),
  36.                       sizeof(bmp_info_header));
  37.     output_file.write(reinterpret_cast<char *>(data.data()),
  38.                       static_cast<std::streamsize>(data.size()));
  39.     output_file.close();
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement