Kezdőoldal » Számítástechnika » Programozás » A programom egy bmp bittérképé...

A programom egy bmp bittérképét kéne kiírja, de nem teszi azt. Mivel lehet a probléma?

Figyelt kérdés

#include <iostream>

#include <fstream>


using namespace std;


int main()

{

ifstream ifs;

ofstream ofs;

unsigned long width, height, tmorites, paletteColors;

unsigned short colordepth;


ofs.open("szinkep.txt");

ifs.open("rajz.bmp");


ifs.ignore(18);

ifs.read((char*)&width, 4);

ifs.read((char*)&height, 4);

ifs.ignore(2);

ifs.read((char*)&colordepth, 2);

ifs.read((char*)&tmorites, 4);

ifs.ignore(12);

ifs.read((char*)&paletteColors, 4);

ifs.ignore(4);


unsigned char a;

int i = 0;

int j = 1;

int s = 0;

int k=0;

s = (width * 3) % 4;


char** szinkep = new char*[3*width];

for (i=0;i<3*width;i++)

{

szinkep[i]=new char [height];

}

i=0;

j=1;

if(paletteColors == 0)

{

while(i!=height)

{

ifs>>a;

if (i!=0)

ifs.ignore(s);



while(j%(3*width)!=0)

{

k++;

szinkep[i][j]=(int)a;

if (k==3)

{

ofs <<(unsigned int) szinkep[i][j]<<" ";

k=0;

}

else

ofs <<(unsigned int) szinkep[i][j]<<" ";

j++;

}


j=1;

ofs<<"\n";

i++;


}


}


ifs.close();


cout<<endl<<"I: "<<i<<endl<<"J: "<<j<<endl;

system("pause");

return 0;

}



[link]


A felső linkből olvastam ki, hogy a bmp hogyan tárolja el az adatokat. Eszerint írtam egy c++ programocskát ami nem tudom miért nem működik úgy ahogy kéne.


2012. febr. 26. 17:27
 1/4 anonim ***** válasza:

//binárisban nyisd meg a bmp-t

ifs.open("rajz.bmp",std::ios::binary);


//én így csinálnám a pixel beolvasást:

int s = (width * 3) % 4;

char ***pixels = new char**[height];

for(int y=height-1; y>=0; y--)

{

pixels[y] = new char*[width];

for(int x=0; x<width; x++)

{

pixels[y][x]=new char[3];

ifs.read(pixels[y][x],3);

ofs<<pixels[y][x][0]<<" "; //red

ofs<<pixels[y][x][1]<<" "; //green

ofs<<pixels[y][x][2]<<" "; //blue

}

ifs.ignore(s); //a kiegészítő bájtokat átugorjuk a sor végén

ofs<<"\n";

}

2012. febr. 26. 19:00
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
int s = (4-(width*3)%4))%4;
2012. febr. 26. 19:10
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

Én is binary-val akartam elöbbször viszont valamiért állandóan belekötött a program és hibát jelzett. Ezért használom a chart. Amúgy ez is egy byte-ot olvas ki egyszerre.

A másik gond a wiki szerint, hogy a sorok ki vannak egészítve nullásokkal úgy, hogy négynek a többszöröse legyen a sor mérete.


Köszi a válaszod...a második javaslatod megfontolandó...sőt azt hiszem, hogy úgy is fogom csinálni.

2012. febr. 26. 19:30
 4/4 iostream ***** válasza:
Ha nem binárisan nyitod meg, akkor a 10-es (és/vagy a 13-as) karakternél rosszul fog működni.
2012. febr. 26. 23:01
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!