cs_lol55
Messages postés86Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention 5 décembre 2010
-
16 juin 2008 à 15:02
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
19 juin 2008 à 20:37
Bonjour à tous,
Je parviens à l'aide de GDI+ à convertir une image BMP en JPG, PNG et TIF en ayant une image de bonne qualité mais lorsque je tente de la convertir en GIF, la qualité est assez dégradée ! Vous pouvez le voir sur cette image que j'utilise pour tester la conversion : Image GIF. Je souhaiterais améliorer le rendu de l'image lorsqu'elle est convertit en GIF, mais comment faire ? Je bloque sur ce problème depuis plusieurs semaines. Merci beaucoup d'avance pour votre aide !
Voici mon code :
#include <windows.h>
#include <stdio.h>
#include <gdiplus.h>
using namespace Gdiplus;
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid);
int WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance, LPSTR LigneCommande, int Affichage)
{
ULONG_PTR gdiplusPtr;
GdiplusStartupInput gdiplusStart;
if (EtatImage == Ok)
MessageBox(NULL, "Image convertie !", "Conversion", MB_ICONINFORMATION);
else
MessageBox(NULL, "Problème de conversion !", "Conversion", MB_ICONINFORMATION);
delete image;
GdiplusShutdown(gdiplusPtr);
return TRUE;
}
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // nombre d'encodeurs
UINT size = 0; // taille en BYTE
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size); // Récupération du nombre d'encodeurs et leur taille totale.
if (size == 0)
return -1;
pImageCodecInfo = (ImageCodecInfo*) malloc(size); // allocation mémoire pour stoquer les infos sur les codecs (pas de VirtualAlloc sinon erreur avec un objet GDI+
if (pImageCodecInfo == NULL)
return -1;
GetImageEncoders(num, size, pImageCodecInfo); //Récupération des infos des codecs
for (UINT j = 0; j < num; ++j) // On cherche le codec que l'on veux dans la liste
{
if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 16 juin 2008 à 20:57
Salut,
As tu essayé de passer par le type Image à la place de Bitmap et de charger depuis un stream (::FromStream())
Peut etre que l'image aura un meilleur rendu.
cs_lol55
Messages postés86Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention 5 décembre 2010 16 juin 2008 à 21:35
Merci pour ton aide, j'ai remplacé Bitmap par Image de cette façon :
Image *image = new Bitmap(L"image.bmp"); Cela ne change rien à la qualité de l'image obtenue.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 17 juin 2008 à 20:47
Salut,
Il suffit de passer par un conteneur temporaire (qui sert à stocker 10 images par exemple dans le même fichier)
Avec cette fonction, j'obtiens un GIF à partir d'un BMP d'une qualité exceptionnelle !
j'ai enlevé les code d'erreur qu'il faudra remettre (COM)
cs_lol55
Messages postés86Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention 5 décembre 2010 18 juin 2008 à 22:20
Merci énormément pour ce code mais j'obtiens exactement la même qualité !
Je ne comprends vraiment pas pourquoi ! Est-ce lié à la version de la dll ? Je possède la version 5.1.3102.2180; elle se nomme gdiplus.dll.
As-tu une idée !?
Peux-tu me montrer le rendu de qualité que tu obtiens ?
Merci beaucoup ! ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 19 juin 2008 à 20:37
Salut,
Dans tous les cas il est normal de perdre de la qualité,
tu n'as qu'a examiner la taille de l'image source et la taille du gif généré (20% à 30% de compression du au format)
Je ne pense pas que tu puisses obtenir mieux pour du bitmap vers gif.
La seule façon d'avoir une belle qualité est d'utiliser une image source avec 256 couleurs maximum.