First commit 16/09/1994
This commit is contained in:
204
PCX.CPP
Normal file
204
PCX.CPP
Normal file
@ -0,0 +1,204 @@
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <graphics.h>
|
||||
|
||||
#define ERROR 1
|
||||
#define OK 1
|
||||
|
||||
typedef unsigned char DacPalette256[256][3];
|
||||
|
||||
void setvgapalette256(DacPalette256 *PalBuf);
|
||||
|
||||
DacPalette256 Palette256;
|
||||
|
||||
void InicializaSVGA(void);
|
||||
extern int far _Cdecl Svga256_fdriver[];
|
||||
int huge DetectVGA256(){ return 2; }
|
||||
|
||||
int MuestraImagen( char *file );
|
||||
int CargaPaleta(char *file );
|
||||
|
||||
void main( void )
|
||||
{
|
||||
int index, salida;
|
||||
|
||||
// Inicializamos el modo SVGA 640*480 256 c. ( VESA )
|
||||
InicializaSVGA();
|
||||
MuestraImagen( "DEMO.PCX" );
|
||||
while( !kbhit() );
|
||||
|
||||
salida = 0;
|
||||
for( ; salida == 0; )
|
||||
{
|
||||
for (index=0; index<256; index++)
|
||||
{
|
||||
// set components
|
||||
if( Palette256[index][0]>0 ) Palette256[index][0]--;
|
||||
if( Palette256[index][1]>0 ) Palette256[index][1] --;
|
||||
if( Palette256[index][2]>0 ) Palette256[index][2] --;
|
||||
if( Palette256[index][0]==0 && Palette256[index][1]==0 && Palette256[index][2]==0 )
|
||||
salida = 1;
|
||||
else
|
||||
salida = 0;
|
||||
} // end for index
|
||||
setvgapalette256( &Palette256 );
|
||||
delay(50);
|
||||
}
|
||||
|
||||
|
||||
closegraph();
|
||||
|
||||
}
|
||||
|
||||
|
||||
#define RES_X 640
|
||||
#define RES_Y 480
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* MuestraImagen *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Descomprime y copia a la pagina indicada un PCX *|
|
||||
|* *|
|
||||
|* Entradas: nombre de la imagen *|
|
||||
|* *|
|
||||
|* *|
|
||||
|* Salidas: OK Todo ha ido bien *|
|
||||
|* ERROR Algo va mal *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
int MuestraImagen( char *file )
|
||||
{
|
||||
int alto, ancho, contador;
|
||||
unsigned char byte;
|
||||
FILE *fp;
|
||||
|
||||
CargaPaleta( file );
|
||||
|
||||
if ( (fp = fopen( file,"rb")) != NULL )
|
||||
{
|
||||
// Saltamos la cabecera
|
||||
fseek( fp, 128, SEEK_SET );
|
||||
|
||||
for(alto=0; alto<RES_Y; alto++)
|
||||
{
|
||||
for(ancho=0; ancho<RES_X; )
|
||||
{
|
||||
byte=getc(fp);
|
||||
if(byte<=0xC0)
|
||||
{
|
||||
putpixel (ancho, alto, byte);
|
||||
ancho++;
|
||||
} else {
|
||||
contador=byte&0x3F; byte=getc(fp);
|
||||
for(; contador>0; contador--)
|
||||
{
|
||||
putpixel (ancho, alto, byte);
|
||||
ancho++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
} else return ERROR;
|
||||
|
||||
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* CargaPaleta *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Carga la paleta con los colores por defecto *|
|
||||
|* *|
|
||||
|* *|
|
||||
|* Entradas: achivo PCX de donde cargar la paleta *|
|
||||
|* *|
|
||||
|* Salidas: OK Todo ha ido bien *|
|
||||
|* ERROR Algo va mal *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
int CargaPaleta(char *file )
|
||||
{
|
||||
int index;
|
||||
FILE *fp;
|
||||
|
||||
if ( (fp=fopen( file, "rb" ) ) == NULL )
|
||||
return ERROR;
|
||||
|
||||
if ( fseek( fp, -768L, SEEK_END ) == 0 )
|
||||
{
|
||||
for (index=0; index<256; index++)
|
||||
{
|
||||
// get the red component
|
||||
// get the green component
|
||||
// get the blue component
|
||||
// set components
|
||||
Palette256[index][0] = (getc(fp) >> 2)*64 / 256;
|
||||
Palette256[index][1] = (getc(fp) >> 2)*64 / 256;
|
||||
Palette256[index][2] = (getc(fp) >> 2)*64 / 256;
|
||||
} // end for index
|
||||
|
||||
}
|
||||
setvgapalette256( &Palette256 );
|
||||
|
||||
|
||||
fclose( fp );
|
||||
return OK;
|
||||
}
|
||||
|
||||
/* Setvgapalette256 sets the entire 256 color palette */
|
||||
/* PalBuf contains RGB values for all 256 colors */
|
||||
/* R,G,B values range from 0 to 63 */
|
||||
/* Usage: */
|
||||
/* DacPalette256 dac256; */
|
||||
/* */
|
||||
/* setvgapalette256(&dac256); */
|
||||
void setvgapalette256(DacPalette256 *PalBuf)
|
||||
{
|
||||
struct REGPACK reg;
|
||||
|
||||
reg.r_ax = 0x1012;
|
||||
reg.r_bx = 0;
|
||||
reg.r_cx = 256;
|
||||
reg.r_es = FP_SEG(PalBuf);
|
||||
reg.r_dx = FP_OFF(PalBuf);
|
||||
intr(0x10,®);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void InicializaSVGA(void) {
|
||||
|
||||
int Gd = DETECT, Gm;
|
||||
int Drv, errorcode;
|
||||
|
||||
installuserdriver("Svga256",DetectVGA256);
|
||||
// registerfarbgidriver(Svga256_fdriver);
|
||||
|
||||
initgraph(&Gd,&Gm,"");
|
||||
|
||||
/* read result of initialization */
|
||||
errorcode = graphresult();
|
||||
|
||||
if (errorcode != grOk) /* an error occurred */
|
||||
{
|
||||
cprintf("Graphics error: %s\n", grapherrormsg(errorcode));
|
||||
cprintf("Presione una tecla para finalizar:");
|
||||
getch();
|
||||
exit(1); /* return with error code */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user