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?