Hejka, znalazłem kod dotyczący bitmap i srednio go rozumiem. Kod wyglada nastepująco:
#include<iostream>
#include<fstream>
#include<windows.h>
using namespace std;
void przetworzBMP(ifstream &s)
{
BITMAPFILEHEADER bmpFile;
BITMAPINFOHEADER bmpInfo;
if (s.is_open())
{
//pobranie naglowka zajmuje 14 bajtow i 40 bajtow
s.read((char*)&bmpFile, 14);
s.read((char*)&bmpInfo, 40);
//wydobycie informacji o rozmiarze pliku
int szerokosc = bmpInfo.biWidth;
int wysokosc = bmpInfo.biHeight;
//dlugosc kazdego wiersza musi byc podzelna przez 4 - wiersz dopelniany jest zerami :-)
int dopelnienie = 4 - (3 * szerokosc) % 4;
cout << "szer=" << szerokosc << endl;
cout << "dop=" << dopelnienie << endl;
int iloscDanych = bmpFile.bfSize - 14 - 40;
//rezerwuje miejsce na zawartosc mapy bitow
unsigned char* dane = new unsigned char[iloscDanych];
//wczytanie danych
s.read((char*)dane, iloscDanych);
s.close();
//utworzenie nowego pliku ze zmienionym kolorem
ofstream nowy("klon.bmp");
//kopiowani naglowków
nowy.write((char*)&bmpFile, 14);
nowy.write((char*)&bmpInfo, 40);
//transformacja bitow
unsigned char* wsk = dane;
for (int i = 0; i < wysokosc; i++)
{
for (int j = 0; j < szerokosc; j++)
{
if (*wsk == 0 && *(wsk + 1) == 0 && *(wsk + 2) == 0)
{
*wsk = (byte)255;
*(wsk + 1) = (byte)0;
*(wsk + 2) = (byte)100;
}
wsk += 3;
}
wsk += dopelnienie;
}
nowy.write((char*)dane, iloscDanych);
nowy.close();
delete[] dane;
}
}
int main()
{
ifstream bmp("examp.bmp");
przetworzBMP(bmp);
system("PAUSE");
}
I moje pytania są następujące: Czym jest nagłowek? Dlaczego dlugosc wiersza musi być podzielna przez 4 ? Co to znaczy kopiowanie nagłowków? I rowniez nie rozumiem zbytnio transformacji bitów.
unsigned char* wsk = dane;
for (int i = 0; i < wysokosc; i++)
{
for (int j = 0; j < szerokosc; j++)
{
if (*wsk == 0 && *(wsk + 1) == 0 && *(wsk + 2) == 0)
{
*wsk = (byte)255;
*(wsk + 1) = (byte)0;
*(wsk + 2) = (byte)100;
}
wsk += 3;
}
wsk += dopelnienie;
}
Czy mogłby ktoś w stanie jakos postarać się mi to wytlumaczyć, albo przesłac linka do jakiegoś źródła z którego bym mogl sie o tym dowiedziec ? (lecz narazie nie znam podstaw i wgl jak takie cos zachodzi) będę bardzo wdzieczny :)))
W najblizszym czasie chciałbym umiec wykonac takie zadanie:
Napisz program, któryw pliku bmppodzieli obraz na n*m części(dzieląc wysokość nanrównychczęści i szerokość na m równych części), w obrębie każdej części kolor pikseli zamieńwartościami średnimi w obrębie danej częsci