Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Груд вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться почему не открывается файл?! 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