home *** CD-ROM | disk | FTP | other *** search
- // BMP.H (C) Anubis Software Abril 1994.
- // Esta libreria sirve para poner un BMP de cualquier longitud en la pantalla
- // No se guarda BMP en memória, y además realiza todas las transacciones desde
- // el disco, lo cual puede enlentecer todo el mecanismo.
- //
-
- #ifndef BMP.H
- #define BMP.H
-
- #include <graficos.h>
- #include <dos.h>
- #include <stdio.h>
-
- #ifndef __SGRAPH
- #define putpixel putpunto
- #endif
-
- #ifndef BMPOBJ.H
-
- #ifndef BYTE_WORD_DWORD
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- typedef unsigned long DWORD;
- #endif
-
- typedef struct tagBITMAPFILEHEADER {
- WORD bfType;
- DWORD bfSize;
- WORD bfReserved1;
- WORD bfReserved2;
- DWORD bfOffBits;
- } BITMAPFILEHEADER;
-
- typedef struct {
- DWORD biSize;
- DWORD biWidth;
- DWORD biHeight;
- WORD biPlanes;
- WORD biBitCount;
-
- DWORD biCompression;
- DWORD biSizeImage;
- DWORD biXPelsPerMeter;
- DWORD biYPelsPerMeter;
- DWORD biClrUSED;
- DWORD biClrImportant;
- } W_BITMAPINFOHEADER;
-
- typedef unsigned char BYTE;
-
- typedef struct tagRGBQUAD {
- BYTE rgbBlue;
- BYTE rgbGreen;
- BYTE rgbRed;
- BYTE rgbReserved;
- } RGBQUAD;
- #endif
- void cargar_bmp(char *fichero)
- {
- // Estas son mis variables.
- BITMAPFILEHEADER fheader;
- W_BITMAPINFOHEADER fiheader;
- RGBQUAD Paleta[256];
- FILE *handle; // ESte es el buffer del fichero;
- unsigned long Pixels;
- unsigned short int x=0,y=480;
- char p1,p2,p3,p4;
- int rojo[16];
- int verde[16];
- int azul[16];
-
- // ESTE ES EL APARTADO CORRESPONDIENTE A MI PROGRAMA.
- vga640x480();
-
- parar_pantalla();
- if ((handle = fopen(fichero,"rb")) == NULL)
- {
- perror("Error:");
- exit(1);
- }
- fread(&fheader,sizeof(BITMAPFILEHEADER),1,handle);
- fread(&fiheader,sizeof(W_BITMAPINFOHEADER),1,handle);
- for(int i=0;i<16;i++)
- fread(&Paleta[i],sizeof(RGBQUAD),1,handle);
-
- for (i=0;i<16;i++)
- {
- rojo[i]=Paleta[i].rgbRed >> 2;
- verde[i]=Paleta[i].rgbGreen >> 2;
- azul[i]=Paleta[i].rgbBlue >> 2;
- }
-
- paleta16(rojo,verde,azul);
- #ifndef __SGRAPH
- modo_puntos();
- #endif
-
- while (fread(&Pixels,4,1,handle) != NULL)
- {
- p1 =( (Pixels & 0xFF000000) >> 24);
- p2 =( (Pixels & 0x00FF0000) >> 16);
- p3 =( (Pixels & 0x0000FF00) >> 8);
- p4 = Pixels & 0x000000FF;
- putpixel(x++,y,(p4 & 0xF0) >> 4);
- putpixel(x++,y,(p4 & 0x0F));
- putpixel(x++,y,(p3 & 0xF0) >> 4);
- putpixel(x++,y,(p3 & 0x0F));
- putpixel(x++,y,(p2 & 0xF0) >> 4);
- putpixel(x++,y,(p2 & 0x0F));
- putpixel(x++,y,(p1 & 0xF0) >> 4);
- putpixel(x++,y,(p1 & 0x0F));
- if (x>=fiheader.biWidth)
- {
- x = 0;
- y--;
- }
- }
- #ifndef __SGRAPH
- modo_planos();
- #endif
- activar_pantalla();
- fclose(handle);
- }
- #endif