Zapis tablicy dynamicznej do *.bmp - problem.

0

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ę.

0

A jaki obrazek był na początku, tzn.przed wykonaniem kodu ?

Mam problem z zapisem tablicy dynamicznej do bitmapy.

A po co zapisywać tablicę dynamiczną do bitmapy ?
Bitmapa, to jest tak właściwie taka tablica.

0

A jaki obrazek był na początku, tzn.przed wykonaniem kodu ?

W kodzie tworzę obrazek, nie modyfikuję już istniejącego. Po wykonaniu kodu ma być wypełniony liniami poziomymi na przemian niebieskie i białe.

A po co zapisywać tablicę dynamiczną do bitmapy ?
Bitmapa, to jest tak właściwie taka tablica.

Program ma właśnie za zadanie wygenerować bitmapę :).
Będę wdzięczny za pomoc.

0

Nie sprawdzałem za bardzo, ale czy szerokość jest podzielna przez 4 bez reszty? Jeśli nie, to musisz taką ustawić i na taki rozmiar zaalokować tablice na dane i te dodatkowe bajty muszą się = 0.


Aaaa.. tu:

 BGR[i*w+j*3].. // żle
 BGR[i*w*3+j*3] // dobrze i w kolejnych linijkach tak samo
0

Dzięki wielkie -=mAkAbrAs=-!! Teraz działa :D.

1 użytkowników online, w tym zalogowanych: 0, gości: 1