Witam, piszę program który ma wczytać w trybie binarnym plik w formacie bmp a następnie go odwrócić. W specyfikacji formatu bmp doczytałem że każdy wiersz jest wyrównywany do 4 bajtów. Więc napisałem taki fragment kodu który wczytuje plik:
struct Pixel
{
unsigned char b, g, r;
};
...
ifstream ifs("widok3.bmp", ios::binary);
char* temp = new char[sizeof(BITMAPFILEHEADER)];
ifs.read(temp, sizeof(BITMAPFILEHEADER));
BITMAPFILEHEADER* bfh = (BITMAPFILEHEADER*)(temp);
temp = new char[sizeof(BITMAPINFOHEADER)];
ifs.read(temp, sizeof(BITMAPINFOHEADER));
BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)(temp);
ifs.seekg(bfh->bfOffBits, ios::beg); // bfOffBits wskazuje początek danych obrazka
int width = bih->biWidth;
if(width % 4) width += 4 - (width % 4); // piksele w bitmapie są wyrównywane do 4 bajtów
Pixel** pixs = new Pixel*[bih->biHeight];
for(int i=0; i<bih->biHeight; i++)
{
temp = new char[3*width];
ifs.read(temp, 3*width);
pixs[i] = (Pixel*)(temp);
}
Po takim wczytaniu obrazka o rozdzielczości 77x33 mam tablice 80x33 i wydawało mi się że 0 którymi uzupełniane są wiersze będą znajdować się w tablicy na pozycjach [0-32][77],[78],[79] a tymczasem są one ustawiane na końcu wiersza [31] i w całym wierszu [32]. Czy to jest błąd z wczytywaniem obrazka czy źle zrozumiałem budowę formatu bmp?