Wyświetlanie BMP
musio
Wiem, że jest już coś takiego w faq, ale sami zobaczcie jak to było napisane.
Jest to mój pierwszy artykuł w ogóle, więc miejcie wyrozumiałość jakby coś było nie tak.
Mam zamiar napisac tu procedure, która wyświetla jakąś 256 kolorową bitmapke o rozdzielczości <=320X200 pixeli (13h) w w wybranym miejscu na ekranie.
A oto ona:
{Wszystko objaśnione jest w komentarzach}
Procedure BMPOpen (ax,ay:word; sciezka:string);
Type
TNaglowek=
Record
bfType : Word;
bfSize : LongInt;
bfReserved : LongInt;
bfOffBits : LongInt;
biSize : LongInt;
biWidth : LongInt;
biHeight : LongInt;
biPlanes : Word;
biBitCount : Word;
biCompression : LongInt;
biSizeImage : LongInt;
biXPelsPerMeter : LongInt;
biYPelsPerMeter : LongInt;
biClrUsed : LongInt;
biClrImportant : LongInt;
End;
Var
PlikNaglowek: file of Tnaglowek;
Naglowek:Tnaglowek;
bitmapa:file of byte;
z,a:byte;
b,g,r:byte;
x,y:integer;
kolor:byte;
begin
assign (PlikNaglowek,sciezka); {skojarzenie z plikiem}
reset (PlikNaglowek); {otwarcie do odczytu}
read (PlikNaglowek,Naglowek); {wczytanie nagłówka }
{-------------------------------------------------------------------}
assign (bitmapa,sciezka);
reset (bitmapa);
asm {włączenie trybu graficznego}
mov ax,13h
int 10h
end;
for x:=1 to 54 do read (bitmapa,z); {pominięcie nagłówka}
for x:=0 to 255 do begin {wczytanie palety kolorów}
read (bitmapa,b,g,r,z); {wczytanie kolorów BGR i pominięcie pustego bajtu(a)}
port[$3c8]:=x; {port $3c8 oczekuje na składowe dla koloru x}
port[$3c9]:=r div 4; {przesyłamy}
port[$3c9]:=g div 4; {te}
port[$3c9]:=b div 4; {składowe}
end; {mamy gotową paletę}
for y:=Naglowek.biHeight-1 downto 0 do {a teraz wczytujemy kolory}
for x:=0 to Naglowek.biWidth do
begin
read (bitmapa,kolor);
mem[$A000:y shl 8+ y shl 6 + x+ay shl 8 +ay shl 6+ax]:=kolor;
end;
readln;
asm {powracamy do normalnego trybu tekstowego}
mov ah,3h
int 10h
end;
end;
Begin
BMPOpen (30,20,'C:\beznazwy.bmp');
readln;
end.
@czubekone: jasne, jak sobie ręcznie samemu pobierzesz (i być może skompilujesz, nie wiem czy jest) FPC dla kilkudziesięcioletniego DOS'a.
a czy mógł ktoś powiedzieć czy takie coś jest do zrobienia w dev-pascal ?
a mam takie pytanko:
w jaki sposob mozna zmienic zeby rozdielczosc byla 640/480??
wiem ze temat jest starawy ale moze ktos odpowie z gory dzieki
Te fragmenty są niepotrzebne:
Wg mnie niepotrzebnie włączasz i wyłączasz tryb graficzny w procedurze. Możesz sobie przerobić to na osobne procedury inicjacji trybów graficznych. Dzięki temu zyskasz większą swobodę w programie.
...a zamiast tego:
proponuję:
Jest to czytelniejsze, szybsze i mamy mniejszą prowizorkę :)
Objaśnienia:
'seek(f: zmienna plikowa; pozycja: longint)' przesuwa wskaźnik plikowy na element pliku 'f' określony zmienną 'pozycja'.
'sizeOf(element): word' zwraca ile bajtów zajmuje dany element
więc...
Zagrożenie usunięte:) Co do linuxa i innych nie windowsowskich oczywiście nie :)
Eroor 100: Disk read error. w lini read(bitmapa,kolor);
Plik gawiczny jest o rozdzielczości takiej jak ma być posiada 256 kolorów jest w fomacie bmp ścieżka jest odpowiednia. Proszę o pomoc
linka jest trefna !!!
Nawet tym posiadającym Linuksa/BSD/etc?
cały kod programu otocz znacznikami <delphi> </delphi>
To jest mój pierwszy artykuł, i nie zabardzo wiem jak zrobić te wcięcia. Dałem wszedzie po trzy spacje ale i tak wyświetla tak jak gdyby ich nie było.
formatowanie kodu! wcięcia!
i popraw błędy ortograficzne!!
wez kod w znacznik Delphi...