Hmm. Co ja na dzisiaj obiecałem... A już wiem. Miało być o pliku BMP i o wklejaniu go do programów. Jak ja chciałem się tego nauczyć to miałem nie małe problemy. W każdym tekście który znalazłem był opis czegoś co nazywało się nagłówek i tyle. Nigdzie nie pisało jak w końcu ten obrazek wkleić.
Ja więc odejdę od tego klasycznego opisu i postaram się wytłumaczyć wam to tak abyście od razu to zrobili.

Co to jest nagłówek?
Nagłówek jest to takie miejsce na początku pliku w którym są zapisane pewne wiadomości o nim. Szczerze mówiąc to prawie nigdy się nie przydają (mówię o BMP). Tak jak mówiłem nie będę opisywał tu jego. Jak go bardzo chcecie poznać to poszukajcie opisu w sieci (jest tego pełno). 

Jak to się robi?
No to najlepiej jak przedstawię to na kodzie (oczywiście musicie umieć takie rzeczy jak otwarcie czy zamknięcie pliku). Obrazek musi mieć rozdzielczość 320x200 w 256 kolorach.


var f:file of byte;
x,y,d:word;
r1,b1,g1,z,b:byte;

begin
assign(f,'obrazek.bmp'); {tutaj wstawcie nazwę i ścieżkę obrazka}
reset(f);
asm
mov ax, 13h {włączamy tyb graficzny 13h}
int 10h
end;
for d:=1 to 54 do read(f,b); {tutaj możemy odczytać nagłówek, przydaje się tylko wtedy gdy nie znamy rozdzielczości obrazka, ale my go znamy więc zostawiamy w spokoju}

for d:=0 to 255 do {wczytanie palety kolorów}
begin
read(f,b1,g1,r1,z);
port[$3c8]:=d;
port[$3c9]:=r1 div 4;
port[$3c9]:=g1 div 4;
port[$3c9]:=b1 div 4;
end;

for y:=199 downto 0 do for x:=0 to 319 do {i tu wstawiamy obrazek}
begin
read(f,b);
mem[$a000:y*320+x]:=b;
end;

close(f); 
readln; 
asm 
mov ax, 3h {powrot do trybu tekstowego}
int 10h
end;
readln;
end.

No więc przeanalizujmy sobie to.
1. Robimy sobie pętle for która odczyta nagłówek (czyli pierwsze 54 znaki to nagłówek).
2. Teraz pętlą for odczytujemy paletę i od razu wysyłamy ją do karty graficznej.
3. Teraz w końcu wykorzystując 2 pętle for odczytujemy 64000 znaków, których kod to numer koloru.

Jeśli jeszcze nie zrozumiałeś ostatniego punktu to weź sobie taki plik BMP (np. dołączony do programu w downloadzie) i otwórz w notatniku. Przesuń sobie go na sam koniec pliku. Widzisz znaczki. Każdemu z nich przyporządkowany jest jakiś kod (numer), który jest zarazem numerem koloru wyświetlanego na ekranie. Przeanalizujmy:

for y:=199 downto 0 do 
for x:=0 to 319 do
begin
read(f,b); {odczytujemy znak}
mem[$a000:y*320+x]:=b; {i wgrywamy jego numer na ekran tak jakbyśmy stawiali pixel}
end; {i tak w kółko :)}

Pewnie dziwicie się dlaczego jest downto. Piszemy tak dlatego, że w pliku obrazek zapisany jest do góry nogami. Dlaczego? Komuś musiało się nudzić ;).
Do odczytu obrazków (i w ogóle plików) można zamiast read używać blockread i blockwrite.

Za miesiąc wreszcie zrobimy jakiś efekt graficzny. Jeśli jeszcze tego nie zrozumieliście to napiszcie. Chętnie odpowiem. A i jeszcze w downloadzie znajduje się programik do odczytu BMP i obrazek do niego.
No to tyle. Do zobaczenia.

HENIU