Witam.
Mam problem z zapisem tablicy dynamicznej do bitmapy. Plik jest tworzony, ale nieprawidłowo wypełniany. Wygląda to tak, jakby się coś "rozjeżdżało".
Oto kod:
//......
class Color
{
public:
int b, g, r;
//......
Color **pixels;
//......
void saveToBMP(char* fileName)
{
unsigned char *BGR = new unsigned char[w*h*3];
for (int i=0; i<h; i++)
{
for (int j=0; j<w; j++)
{
BGR[i*w+j*3] = (unsigned char)pixels[i][j].b;
BGR[i*w+j*3+1] = (unsigned char)pixels[i][j].g;
BGR[i*w+j*3+2] = (unsigned char)pixels[i][j].r;
}
}
short padding = 0x0000;
short BM = 0x4d42;
HEADER.size_of_file = sizeof(HEADER) + sizeof(BGR) + sizeof(padding) * h + 2;
HEADER.reserve = 0000;
HEADER.offset_of_pixle_data = 54;
HEADER.size_of_header = 40;
HEADER.width = w;
HEADER.hight = h;
HEADER.num_of_colour_plane = 1;
HEADER.num_of_bit_per_pix = 24;
HEADER.compression = 0;
HEADER.size_of_pix_data = sizeof(BGR) + sizeof(padding) * h;
HEADER.h_resolution = 2835;
HEADER.v_resolution = 2835;
HEADER.num_of_colour_in_palette = 0;
HEADER.important_colours = 0;
// write BMP Header ////////////////////////////////////////////////////////////////
std::ofstream file;
file.open (fileName, std::ios::out | std::ios::trunc | std::ios::binary);
file.write ((char*)(&BM), 2);
file.write ((char*)(&HEADER), sizeof(HEADER));
for (int i=h-1; i>=0; --i)
{
for (int j=0; j<w; j++)
{
for (int k=0; k<3; ++k)
{
file.write((char*)&BGR[i*w+j*3+k],sizeof(char));
}
}file.write ((char*)(&padding), 2);
}
file.close();
delete[] BGR;
}
A tu wywołanie:
Color c(255, 0, 0);
Color c1(255,255,255);
for(int i=0; i<cam.h; i++)
{
for(int j=0; j<cam.w; j++)
{
if (i%2==0) cam.pixels[i][j] = c1;
else cam.pixels[i][j] = c;
}
}
cam.saveToBMP("1.bmp");
W załączniku zamieszczam wynikowy obrazek.
Będę bardzo wdzięczny jeśli ktoś wytknie mi błąd :/. Siedziałem już nad tym długo i nie wiem co jest nie tak.
Z góry dziękuję.