Bonjour,

Je cherche à créer un programme qui puisse faire du quasi-temps réels. Je veux faire de la conversion Jpeg->Bmp mais que ca se fasse dans la RAM et pas en écriture sur le disque.

Je veux prendre en mémoire un buffer qui contient une image jpg, et resauvegarder dans un nouveau buffer cette image en un bmp
J'ai donc créer une fonction qui effectue cette tache et qui en plus, m'ecris le fichier final pour etre certain que j'ai effectué le bon travail



Code : 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
 
void FI_Test(const char *bufferJpg, const int bufsizeJpg, char *bufferBmp, int *bufsizeBmp)
{
	FIMEMORY *hmem = NULL;
	FREE_IMAGE_FORMAT fif;
	FIBITMAP *check;
 
	BYTE *mem_buffer = NULL;
	DWORD size_in_bytes = 0;
	FILE *stream = NULL;
 
	hmem = FreeImage_OpenMemory(bufferJpg, bufsizeJpg);
	fif = FreeImage_GetFileTypeFromMemory(hmem, 0);	// get the file type
	check = FreeImage_LoadFromMemory(fif, hmem, 0);	// load an image from the memory stream
 
	FreeImage_Save(FIF_BMP, check, "blob.bmp", BMP_DEFAULT);
// le fichier blob.bmp est correctement constitué sur le disque
 
	// save the image to a memory stream
	FreeImage_SaveToMemory(FIF_BMP, check, hmem, BMP_DEFAULT);
 
	FreeImage_AcquireMemory(hmem, &mem_buffer, &size_in_bytes);
	// save the buffer to a file stream
	stream = fopen("test.bmp", "wb");
	if(stream) {
		fwrite(mem_buffer, sizeof(BYTE), size_in_bytes, stream);
		fclose(stream);
	}
 
	// close and free the memory stream
	FreeImage_CloseMemory(hmem);
	FreeImage_Unload(check);
}
A la fin de cette fonction, le problème réside dans test.bmp ou IrfanView me dit que ce n'est pas un bmp mais un jpg.
grâce a la fonction FreeImage_SaveToMemory, je pensais que la conversion Jpg->Bmp serait faite

Pouvez vous me dire ou se situe mes erreurs ? Merci d'avance

Topeur60