PDA

Visualizza la versione completa : [C] Funzione farmalloc e funzioni getimage() e putimage()


frarugi87
21-04-2007, 11:34
Apro una nuova discussione perchè ho degli altri problemi sempre con la funzione farmalloc().

Allora, io ho un file (chiamato video.dll) contenente 8 immagini al suo interno. Per poter velocizzare il programma che le visualizza (sono immagini 640x350) ho pensato di rifare il file utilizzando la funzione getimage e poi nel programma di visualizzazione usare la putimage. Però ho bisogno di una zona di memoria allocata; per questo mi serve la funzione farmalloc().

Questi sono i due programmi:


Conversione del video:

#define DIM_IMM 112006
FILE *filein,*fileout;
int i,j,ind;
int driver = VGA, modo = VGAMED;
char far *imm;

main()
{
if ((imm = (char far *)farmalloc(DIM_IMM*2))==NULL) return;
initgraph (&driver,&modo,"");

filein = fopen ("video.dll","rb");
fileout = fopen ("video2.dll","wb");
for (ind=0;ind<8;ind++)
{
for (i=350;i>0;i--)
for (j=0;j<640;j++)
putpixel (j,i-1,fgetc(filein));
getimage (0,0,639,349,imm);
fwrite (imm,DIM_IMM,1,fileout);
getch();
}
fclose (filein);
fclose (fileout);
farfree (imm);
closegraph();
}



Visualizzazione del video:

#define DIM_IMM 112006
FILE *file;
int i,j,ind;
int driver = VGA, modo = VGAMED;
char far *imm;

main()
{
if ((imm = (char far *)farmalloc(DIM_IMM))==NULL) return;
initgraph (&driver,&modo,"");

file = fopen ("video2.dll","rb");
for (ind=0;ind<8;ind++)
{
fread (imm,DIM_IMM,1,file);
putimage (0,0,imm,COPY_PUT);

getch();
}
fclose (file);
farfree (imm);
closegraph();
}






Penso che il problema sia delle funzioni getimage e putimage perchè quando compilo mi dice "Suspicious pointer conversion" per entrambe. Però la farmalloc() non funziona in turboC, bisogna lanciare l'exe. E quindi non riesco a fare il passo passo ed esserne sicuro.
Però:

Il file creato è lungo 364kB (invece di 8*112006B = 876kB)
Se provo a far girare un file creato correttamente (da un altro programma che spezzetta l'immagine in 5 pezzi per usare la malloc() e che funziona) non me lo visualizza lo stesso, anche se alloca la memoria.

Che posso fare?

oregon
21-04-2007, 14:11
Qual e' il prototipo delle funzioni getimage e putimage?

frarugi87
21-04-2007, 14:17
sono:

void far getimage (int left, int top, int right, int bottom, void far *bitmap)
void far putimage (int left, int top, void far *bitmap, int op)

frarugi87
23-04-2007, 19:55
qualche idea sul perchè non funziona?

frarugi87
26-04-2007, 12:49
up

Loading