Ładny brzuch
Mam taki program
{-=| e-mail: krzysiek@gr0g.prv.pl |=-} {-=| http://www.gr0g.prv.pl |=-} program Bmp13h; uses Crt; type THandleBMP =record {Definicja naglowka pliku BMP} bfType:Word; {Sygnatura pliku BMP: 4D42h ("BM")} bfSize:Longint; {Dlugosc calego pliku} bfRes1:Word; {Pisac 0} bfRes2:Word; {Pisac 0} bfOffBits:Longint; {Pozycja rysunku w pliku ( Dlugsc naglowka + Dlugsc palety)} biSize:Longint; {Dlugosc stad do konca naglowka: 40, czasem mniej} biWidth:Longint; {Szerokosc obrazka} biHeight:Longint; {Wysokosc obrazka} biPlanes:Word; {Musi byc 1} biBitCount:Word; {Liczba bitow na piksel (1, 4, 8, 24)} biCompression:Longint; {Algorytm kompresji: 0 = zaden, 1,2 = RLE} biSizeImage:Longint; {Wielkosc rysunku} biXPelsPerMeter:Longint; {Rozdzielczosc pozioma} biYPelsPerMeter:Longint; {Rozdzielczosc pionowa} biClrUsed:Longint; {Liczba kolorow w palecie} biClrImportant:Longint; {Pisac 0} end; TEkran=Array[0..320*200-1] of Byte; {Typ dla ekranu} var Ekran:^TEkran; {Zmienna, ktora bedzie sie miescic w pamieci ekranu} PlikBmp:file; {zmienna plikowa} NaglowekBmp:THandleBMP; {Naglowek pliku BMP} Pal:array[0..4*256-1] of byte; {tablica zawierajaca palete kolorow} NazwaPliku:String; {Zmienna zawierajaca nazwe pliku BMP} b:byte; {Zmienna pomocnicza} procedure SetVga;assembler; {wlaczenie trybu 13h, 320*200*256c} asm mov ax, 13h int 10h end; procedure SetTxt;assembler; {wlaczenie trybu textowego} asm mov ax, 3 int 10h end; begin {Ustalenie nazwy pliku BMP} NazwaPliku:='Test.bmp'; {zaznaczenie pliku...} Assign(PlikBmp,NazwaPliku); {..i otworzenie go do odczytu} Reset(PlikBmp,1); {Odczyt naglowka} BlockRead(PlikBmp,NaglowekBMP,SizeOf(NaglowekBMP)); {Wypisywanie danych z odczytanego naglowka} With NaglowekBMP do begin Writeln('Naglowek BMP pliku "',NazwaPliku,'" :'); Writeln; Writeln('Sygnatura pliku BMP: 4D42h ("BM") : ',bfType); Writeln('Dlugosc calego pliku : ',bfSize); Writeln('Powinno byc 0 : ',bfRes1); Writeln('Powinno byc 0 : ',bfRes2); Writeln('Pozycja rysunku w pliku ( Dlugsc naglowka + Dlugsc palety) : ',bfOffBits); Writeln('Dlugosc stad do konca naglowka 40, czasem mniej : ',biSize); Writeln('Szerokosc obrazka : ',biWidth); Writeln('Wysokosc obrazka : ',biHeight); Writeln('Musi byc 1 : ',biPlanes); Writeln('Liczba bitow na piksel (1, 4, 8, 24) : ',biBitCount); Writeln('Algorytm kompresji 0 = zaden, 1,2 = RLE : ',biCompression); Writeln('Wielkosc rysunku : ',biSizeImage); Writeln('Rozdzielczosc pozioma : ',biXPelsPerMeter); Writeln('Rozdzielczosc pionowa : ',biYPelsPerMeter); Writeln('Liczba kolorow w palecie : ',biClrUsed); Writeln('Powinno byc 0 : ',biClrImportant); Writeln; Writeln('Nacisnij jakis klawisz, aby zobaczyc obrazek...'); Readkey; end; {Wlaczenie trybu graficznego 13h} SetVga; {Odczyt palety} BlockRead(PlikBmp,Pal,SizeOf(Pal)); {Ustawienie palety kolorow, dla obrazka} for b:=0 to 255 do {dla kazdego koloru} begin port[$3c8]:=b; {Numer koloru} port[$3c9]:=Pal[b*4+2] div 4; {Niebieski} port[$3c9]:=Pal[b*4+1] div 4; {Zielony} port[$3c9]:=Pal[b*4] div 4; {Czerwony} end; {Zarezerwowanie pamieci dla zmiennej Ekran} New(Ekran); {Ustawienie jej w miejscu pamieci karty graficznej tak, ze gdy zmienimy wartosc zmiennej Ekran, to zobaczymy to na ekranie monitora} Ekran:=Ptr(SegA000,0); {Odczyt obrazka bezposrednio na ekran (do gory nogami)} BlockRead(PlikBmp, Ekran^, NaglowekBMP.BiSizeImage); {Zamkniecie pliku} Close(PlikBmp); Readkey; {Wlaczenie trybu textowego} SetTxt; end.
Wyswietla on bitmape tyle ze do gory nogami. Co mam zmienic zeby wyswietlil normalnie? Jesli znacie prostsze sposoby wyswietlenia bmp to powiedzcie jakie.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
{-=| e-mail: krzysiek@gr0g.prv.pl |=-} {-=| http://www.gr0g.prv.pl |=-} program Bmp13h; uses Crt; type THandleBMP =record {Definicja naglowka pliku BMP} bfType:Word; {Sygnatura pliku BMP: 4D42h ("BM")} bfSize:Longint; {Dlugosc calego pliku} bfRes1:Word; {Pisac 0} bfRes2:Word; {Pisac 0} bfOffBits:Longint; {Pozycja rysunku w pliku ( Dlugsc naglowka + Dlugsc palety)} biSize:Longint; {Dlugosc stad do konca naglowka: 40, czasem mniej} biWidth:Longint; {Szerokosc obrazka} biHeight:Longint; {Wysokosc obrazka} biPlanes:Word; {Musi byc 1} biBitCount:Word; {Liczba bitow na piksel (1, 4, 8, 24)} biCompression:Longint; {Algorytm kompresji: 0 = zaden, 1,2 = RLE} biSizeImage:Longint; {Wielkosc rysunku} biXPelsPerMeter:Longint; {Rozdzielczosc pozioma} biYPelsPerMeter:Longint; {Rozdzielczosc pionowa} biClrUsed:Longint; {Liczba kolorow w palecie} biClrImportant:Longint; {Pisac 0} end; TEkran=Array[0..320*200-1] of Byte; {Typ dla ekranu} var Ekran:^TEkran; {Zmienna, ktora bedzie sie miescic w pamieci ekranu} PlikBmp:file; {zmienna plikowa} NaglowekBmp:THandleBMP; {Naglowek pliku BMP} Pal:array[0..4*256-1] of byte; {tablica zawierajaca palete kolorow} NazwaPliku:String; {Zmienna zawierajaca nazwe pliku BMP} b:byte; {Zmienna pomocnicza} procedure SetVga;assembler; {wlaczenie trybu 13h, 320*200*256c} asm mov ax, 13h int 10h end; procedure SetTxt;assembler; {wlaczenie trybu textowego} asm mov ax, 3 int 10h end; begin {Ustalenie nazwy pliku BMP} NazwaPliku:='Test.bmp'; {zaznaczenie pliku...} Assign(PlikBmp,NazwaPliku); {..i otworzenie go do odczytu} Reset(PlikBmp,1); {Odczyt naglowka} BlockRead(PlikBmp,NaglowekBMP,SizeOf(NaglowekBMP)); {Wypisywanie danych z odczytanego naglowka} With NaglowekBMP do begin Writeln('Naglowek BMP pliku "',NazwaPliku,'" :'); Writeln; Writeln('Sygnatura pliku BMP: 4D42h ("BM") : ',bfType); Writeln('Dlugosc calego pliku : ',bfSize); Writeln('Powinno byc 0 : ',bfRes1); Writeln('Powinno byc 0 : ',bfRes2); Writeln('Pozycja rysunku w pliku ( Dlugsc naglowka + Dlugsc palety) : ',bfOffBits); Writeln('Dlugosc stad do konca naglowka 40, czasem mniej : ',biSize); Writeln('Szerokosc obrazka : ',biWidth); Writeln('Wysokosc obrazka : ',biHeight); Writeln('Musi byc 1 : ',biPlanes); Writeln('Liczba bitow na piksel (1, 4, 8, 24) : ',biBitCount); Writeln('Algorytm kompresji 0 = zaden, 1,2 = RLE : ',biCompression); Writeln('Wielkosc rysunku : ',biSizeImage); Writeln('Rozdzielczosc pozioma : ',biXPelsPerMeter); Writeln('Rozdzielczosc pionowa : ',biYPelsPerMeter); Writeln('Liczba kolorow w palecie : ',biClrUsed); Writeln('Powinno byc 0 : ',biClrImportant); Writeln; Writeln('Nacisnij jakis klawisz, aby zobaczyc obrazek...'); Readkey; end; {Wlaczenie trybu graficznego 13h} SetVga; {Odczyt palety} BlockRead(PlikBmp,Pal,SizeOf(Pal)); {Ustawienie palety kolorow, dla obrazka} for b:=0 to 255 do {dla kazdego koloru} begin port[$3c8]:=b; {Numer koloru} port[$3c9]:=Pal[b*4+2] div 4; {Niebieski} port[$3c9]:=Pal[b*4+1] div 4; {Zielony} port[$3c9]:=Pal[b*4] div 4; {Czerwony} end; {Zarezerwowanie pamieci dla zmiennej Ekran} New(Ekran); {Ustawienie jej w miejscu pamieci karty graficznej tak, ze gdy zmienimy wartosc zmiennej Ekran, to zobaczymy to na ekranie monitora} Ekran:=Ptr(SegA000,0); {Odczyt obrazka bezposrednio na ekran (do gory nogami)} BlockRead(PlikBmp, Ekran^, NaglowekBMP.BiSizeImage); {Zamkniecie pliku} Close(PlikBmp); Readkey; {Wlaczenie trybu textowego} SetTxt; end.
Wyswietla on bitmape tyle ze do gory nogami. Co mam zmienic zeby wyswietlil normalnie? Jesli znacie prostsze sposoby wyswietlenia bmp to powiedzcie jakie.