bonjour,

j'essai de compresser une image en JPEG avec la lib freeimage,
un probleme se pose dans mon projet : je n'ai pas de fichier image , mais directement un buffer RGB 24.les fonction de la lib freeimage ouvre toute d fichier image avant de les traiter.je ne trouve pas le moyne d'adapter cela , pouvez vous m'indiquer une solution , une méthode ? une voix de recherche ?
Merci.

Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
void acquisition()
{
 
FILE* file;
int width,height,depth,lenght;
char fic[15];
unsigned char * buffer;
struct stat buf;
FIMEMORY *hmem = NULL;
BYTE * mem_buffer=NULL;
DWORD original_size=(width*height*depth/3)*sizeof(BYTE);
DWORD compressed_size;
 
compressed_size=(DWORD)((double)original_size+ (0.1* (double)original_size) +12);
 
	buffer=GrabVideo(&video,&width,&height,&depth);
 
	if(buffer!=NULL)
	{ 
 
	// open and allocate a memory stream
hmem = FreeImage_OpenMemory(0,0);
 
// save the image to a memory stream
FreeImage_SaveToMemory(FIF_JPEG, (FIBITMAP *)buffer, hmem, JPEG_DEFAULT);
FreeImage_Unload((FIBITMAP *)buffer);
 
// get the buffer from the memory stream
BYTE *mem_buffer = NULL;
DWORD size_in_bytes = 0;
FreeImage_AcquireMemory(hmem, &mem_buffer, &size_in_bytes);
// save the buffer to a file stream
FILE *stream = fopen("buffer.jpeg", "wb");
if(stream) {
fwrite(mem_buffer, sizeof(BYTE), size_in_bytes, stream);
fclose(stream);
}
// close and free the memory stream
FreeImage_CloseMemory(hmem);
	envoiepacket((int)compressed_size,(char*)buffer);
 
	}
 
	else 
		printf("erreur grabbing\n");
 
CloseVideo(&video);
exit(0);	
 
}la foncion grab video renvoie une chaine unsigne char *