|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.06.2017, 16:23 | #1 |
Новичок
Джуниор
Регистрация: 08.06.2017
Сообщений: 2
|
почему не открывается фаил decod.bmp
#include <vector>
#include <sys/stat.h> #include <algorithm> #include <fstream> #include <iostream> #include <bitset> #include <stdint.h> using namespace std; struct S { char symbol; double frequency; double probability; vector <bool> code_vector; }; vector <S> code(256); void initialization() { for(int i = 0; i < 256; i++) { code[i].symbol = (char)i; code[i].frequency = 0; code[i].probability = 0; code[i].code_vector.clear(); } } bool comp(S s1, S s2) { return(s1.probability > s2.probability); } int find_m(int left, int right) { int l = left; int r = right - 1; if(left == right - 1) { return -1; } else { double l_sum = code[l].probability; double r_sum = code[r].probability; l++; r--; while((l_sum > r_sum) && (l != r)) { if(l_sum < r_sum) { l_sum = l_sum + code[l].probability; l++; } if(l_sum > r_sum) { r_sum = r_sum + code[r].probability; r--; } } } return l; } void devide(int left, int right) { if(left == right - 1) return; else { int m = find_m(left, right); for(int i = left; i < m; i++) { code[i].code_vector.push_back(0); } for(int i = m; i < right; i++) { code[i].code_vector.push_back(1); } devide(left, m); devide(m, right); } } int main(int argc, char* argv[]) { initialization(); remove("code.TXT"); remove("decod.bmp"); ifstream file_in; file_in.open("0005.bmp", /*ios::in | ios::binary*/ ifstream::binary); if(file_in.is_open() == 0) { cout << "файл не может быть открыт" << endl; } else { cout << "файл успешно открыт" << endl; } struct stat size_f; stat ("0005.bmp", &size_f); int fsize = size_f.st_size;cout << size_f.st_size<<endl; char *pMass; pMass = new char[fsize]; file_in.read((char*)pMass,fsize); for(int i = 0; i < fsize; i++) { code[(unsigned char)pMass[i]].frequency++; } delete [] pMass; for(int i = 0; i < 256; i++) { code[i].probability = code[i].frequency/(double)fsize; } sort(code.begin(), code.end(), comp); devide(0, 256); // file_in.clear(); //file_in.seekg(0); ofstream file_out; file_out.open("code.TXT",/* ios:ut*/ ofstream::binary); for(int i = 0; i < 256; i++) { file_out << code[i].frequency << " "; } int count = 0; char buf = 0; file_in.seekg(0, ios :: beg); while(!file_in.eof()) { unsigned char a = file_in.get(); for(int i = 0; i < 256; i++) { if(a == code[i].symbol) { for(int j = 0; j < code[i].code_vector.size(); j++) { buf = buf | code[i].code_vector[j]<<(7-count); count++; if (count==8) { count=0; file_out << buf; buf=0; } } } if(file_in.eof() && count!=0) { file_out << buf; } } } file_in.close(); file_out.close(); struct stat sizef; stat ("code.TXT", &sizef); cout << sizef.st_size << endl; ifstream file_in1; file_in1.open("code.TXT", /*ios::in | ios::binary*/ ifstream::binary); file_in1.seekg(0, ios::end); file_in1.seekg(0, ios :: beg); initialization(); int b; for(int i = 0; i < 256; i++) { file_in1 >> b; code[i].frequency = b; code[i].probability = code[i].frequency/(double)fsize; } devide(0, 256); vector <bool> tmp1; char byte2; byte2 = file_in1.get(); int count1 = 0; ofstream file_out1; file_out1.open("decod.bmp", /*ios:ut*/ ofstream::binary); while(!file_in1.eof()) { bool b = byte2 & (1 << (7-count1)); tmp1.push_back(b); for(int i = 0; i < 256; i++) { if(tmp1 == code[i].code_vector) {file_out1 << code[i].symbol; tmp1.clear();} } count1++; if(count1 == 8) { count1 = 0; byte2 = file_in1.get(); } } file_out1.close(); return 0; } |
12.06.2017, 16:32 | #2 |
Новичок
Джуниор
Регистрация: 08.06.2017
Сообщений: 2
|
при попытке открыть файл decod.bmp выдает ошибку: BMP image has bogus header data
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться почему не открывается файл?! | Foxlin | Помощь студентам | 1 | 17.01.2014 14:14 |
Почему то что я сделал в Delphi 8 не открывается на других компах ? | Anatoluu | Общие вопросы Delphi | 16 | 15.03.2011 09:05 |
почему не открывается сайт! | sunshineeee | Свободное общение | 7 | 21.11.2010 20:19 |
Файл открывается в трёх копиях. Почему? | Tolikv | Microsoft Office Excel | 5 | 24.09.2010 11:28 |
почему у меня формат php не открывается в web browsere? | vagif.ka1995 | PHP | 2 | 11.10.2009 17:00 |