Hey, ich habe mir jetzt eine Funktion zum lesen und zum schreiben von BItmaps selber geschrieben. Als erstes um das ganze zu testen wollte ich die bitmap öffnen, und anschließen in eine 2te datei das selbe wieder schreiben.
Das problem ist jetzt das, das bild das ich schreibe komplett verzerrt ist, obwohl ich genauso schreibe wie ich zuvor eingelesen habe, ich sitze jetzt hier und habe keine idee mehr wo der fehler liegen könnte.
vielleicht sieht ja einer von euch den fehler...
also hier die lesen funktion:
und die funktion die die bitmap dann wieder schreibt:
da das ganze nach dem lesen und im int speichern nicht mehr die richtige form hat wandle ich noch die 48 und 49 in 0 und 1 um, das aber in der main() funktion....
also es kann nicht an der größe der matrix map oder so liegen die sind überall gleich groß ....
hoffe jemand hat die zeit sich das alles mal durchzuschauen und mir vlt den fehler zu zeigen ich bin echt ratlos....
Das problem ist jetzt das, das bild das ich schreibe komplett verzerrt ist, obwohl ich genauso schreibe wie ich zuvor eingelesen habe, ich sitze jetzt hier und habe keine idee mehr wo der fehler liegen könnte.
vielleicht sieht ja einer von euch den fehler...
also hier die lesen funktion:
Code:
int Load_pbm(string filename, int bitmap[402][383], int &Heigth, int &Width)
{
int x, y;
char header[2];
ifstream dat_in;
dat_in.open(filename.c_str(), ios_base::in);
if(!dat_in)
{
cout<<"Fehler!"<<endl<<endl;
}
for(int i = 0; i < 2; ++i)
{
dat_in>>header[i];
}
dat_in>>x;
dat_in>>y;
char matrix[y][x];
for(int i = 1; i < y+1; ++i)
{
for(int j = 1; j < x+1; ++j)
{
dat_in>>matrix[i][j];
}
}
for(int i = 1; i < y+1; ++i)
{
for(int j = 1; j < x+1; ++j)
{
bitmap[i][j] = matrix[i][j];
}
}
dat_in.close();
Heigth = y;
Width = x;
return 0;
}
und die funktion die die bitmap dann wieder schreibt:
Code:
int Save_pbm(string filename, int bitmap[402][383], int Heigth, int Width)
{
int x, y;
y = Heigth;
x = Width;
char header[2];
header[0] = 'P';
header[1] = '1';
ofstream dat_out;
dat_out.open(filename.c_str(), ios_base::out);
if(!dat_out)
{
cout<<"Fehler!"<<endl<<endl;
}
for(int i = 0; i < 2; ++i)
{
dat_out<<header[i];
}
dat_out<<endl;
dat_out<<x;
dat_out<<" ";
dat_out<<y;
dat_out<<endl;
int count = 1;
int max = 70;
for(int i = 1; i < y+1; ++i)
{
for(int j = 1; j < x+1; ++j)
{
dat_out<<bitmap[i][j];
if(count == max)
{
dat_out<<endl;
max += 70;
}
++count;
}
}
dat_out.close();
return 0;
}
da das ganze nach dem lesen und im int speichern nicht mehr die richtige form hat wandle ich noch die 48 und 49 in 0 und 1 um, das aber in der main() funktion....
Code:
int main()
{
Load_pbm("map.pbm", map, y_map, x_map);
for(int i = 1; i <= y_map; ++i)
{
for(int j = 1; j <= x_map; ++j)
{
switch(map[i][j])
{
case 48: map[i][j] = 0;
break;
case 49: map[i][j] = 1;
break;
default: break;
}
}
}
Save_pbm("map2.pbm", map, y_map, x_map);
}
also es kann nicht an der größe der matrix map oder so liegen die sind überall gleich groß ....
hoffe jemand hat die zeit sich das alles mal durchzuschauen und mir vlt den fehler zu zeigen ich bin echt ratlos....