Mam problem z ustawieniem palety kolorów w trybie 12h (640x480x16). Próbuję wyświetlić plik bmp w rozdzielczości 640x480x16 który wygląda dokładnie tak:
a zamiast tego wyświetla mi się czarno-białe nie wiadomo co, chciałem przechwicić ten obraz ale niestety się nie da, lub wcale się nic nie wyświetla i wyłańcza się za chwile program.
kod źródłowy:
#include <stdio.h>
#include <dos.h>
void initgfxmode(int); // Inicjacja podanego trybu graficznego.
void loadBMP(char *); // Wyswietlanie obrazu z pliku BMP.
FILE *filein; // Pliki BMP wejsciowy i wyjsciowy.
char patchin[] = "daim.bmp"; // Sciezki dostepu do w/w plikow.
main(void) {
initgfxmode(0X12);
loadBMP(patchin); // Wyswietlenie obrazu wejsciowego BMP.
getch();
}
void initgfxmode(int mode) { // Inicjacja trybu graficznego 'mode'.
_AX = mode;
geninterrupt(0X10);
}
void loadBMP(char *patch) { // Wyswietla na ekranie obraz z pliku BMP.
int i, j;
unsigned char red, green, blue;
filein = fopen(patch, "rb"); // Otwarcie pliku "binarnego do czytania".
fseek(filein, 54, SEEK_SET); // Przeskok naglowka pliku BMP.
for (i=0; i<=15; i++) { // Odczytanie z pliku i ustawienie palety
blue = fgetc(filein); // kolorow wykorzystywanej przez obraz.
green = fgetc(filein); // Dokladny opis sposobu zapisu palety
red = fgetc(filein); // kolorow w pliku BMP znajduje sie w
fgetc(filein); // sprawozdaniu zalaczonym do programu.
outp(0X3C8, i);
outp(0X3C9, red / 4);
outp(0X3C9, green / 4);
outp(0X3C9, blue / 4);
}
for (j=479; j>=0; j--) // Wyswietlenie obrazu na ekranie
for (i=0; i<=639; i++)
poke(0XA000, j*320+i, fgetc(filein)); // Zapalenie punktu (i, j)
// kolorem pobranym z pliku.
}
</url>