Descargarte el programa completo: DESCARGAR
#include <alloc.h>
#include <conio.h>
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char Type[2]; /*Tipo de archivo. establecido en "BM".*/
unsigned long Size; /*Tamano en BYTES del archivo*/
unsigned long Reserved; /*Reservado. establecido en cero*/
unsigned long OffSet; /*Desplazamiento hacia datos*/
unsigned long headsize; /*Tamaño de la cabecera del bitmap. establecido en 40.*/
unsigned long Width; /*Anchura en pixeles.*/
unsigned long Height; /* Altura en pixeles.*/
unsigned int Planes; /*Numero de Planos. establecido en 1.*/
unsigned int BitsPerPixel; /*Numero de Bits por pixeles.*/
unsigned long Compression; /*Compresion. Usually establecido en 0.*/
unsigned long SizeImage; /*Tamano en BYTES del bitmap.*/
unsigned long XPixelsPreMeter; /*Pixeles Horizontales por metro.*/
unsigned long YPixelsPreMeter; /*Pixeles Verticales por metro.*/
unsigned long ColorsUsed; /*Numero de colores utilizados.*/
unsigned long ColorsImportant; /*Numero de colores "Importantes".*/
}BMP;
int muestraBMP(int x, int y, char* NomArchivo);
void main()
{
int color;
int gd , gm ;
gd = VGA ; gm = VGAHI;
initgraph(&gd,&gm,"");
muestraBMP(0,0,"shade.bmp"); /* Ingresa el nombre y direccion del archivo aqui */
getch();
closegraph();
}
int muestraBMP(int x, int y, char* NomArchivo)
{
int b,a;
BMP Obj;
unsigned char* Datas;
int in=0;
unsigned char c=0;
FILE * fp;
fp = fopen(NomArchivo,"rb");
if(!fp){
printf("Error : No se puede abrir el archivo ...");
getch();
exit(0);
}
fread(&Obj, sizeof(Obj), 1, fp);
if(Obj.BitsPerPixel!=4) /* Este NO es un bmp de 16 colores que podamos leer*/
{
fclose(fp);
printf("Error : Formato de archivo no soportado...");
getch();
exit(0);
};
fseek(fp,Obj.OffSet,SEEK_SET);
Datas=(unsigned char*) calloc(Obj.Width/2+1, sizeof(unsigned char));
for(b=Obj.Height;b>=0;b--)
{
fread(Datas, sizeof(unsigned char), Obj.Width/2, fp);
c=0;
in=0;
for(a=0;a<=Obj.Width;a+=2)
{
c = (Datas[in] | 0xF0) & 0x0F;
putpixel(a+1+x,b+y,c);
c = (Datas[in] | 0x00) >>4;
putpixel(a+x,b+y,c);
in++;
}
}
free (Datas);
fclose(fp);
return 1;
}