Bonjour
J'utilise la librairie mapnik pour générer des cartes géographiques au format png.
Pour sauvegarder les cartes il existe une méthode
void save_to_file(...)
et une méthode
string save_to_string(...)
La gestion derrière est quasiment là même, les 2 appellent une autre méthode
dans le cas du fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template <typename T1, typename T2> void save_as_png(T1 & file , T2 const& image)et dans le cas du string:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::ofstream file (filename.c_str(), std::ios::out| std::ios::trunc|std::ios::binary); if (file) { save_as_png(file,image);jusque là tout va bien mais le code suivant me donne une image illisible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 std::ostringstream ss(std::ios::out|std::ios::binary); //all this should go into image_writer factory save_as_png(ss,image); ... return ss.str();L'appel "save_to_file" fonctionne très bien mais le fichier rempli par la string récupérée par save_to_string est illisible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 save_to_file<ImageData32>(buf.data(), file, "png"); std::ofstream fichier("C:\\test.png", std::ios::out | std::ios::trunc); if(fichier) { std::string data = save_to_string<ImageData32>(buf.data(), "png"); fichier << data; fichier.close(); }
Je ne sais pas à quoi ça peut être dû.
L'idée c'est que j'ai besoin de récupérer le string car je dois l'envoyer en réponse d'une requête http.
Si je compare les tailles des fichiers, il y a une chose étrange:
le fichier lisible :
taille : 374.560 octets
taille sur le disque :376.832 octets
le fichier illisible
taille : 376.075 octets
taille sur le disque :376.832 octets
Soit exactement la même "taille sur le disque" mais pas la même "taille".
Je ne sais pas ce quel est la différence entre ces 2 tailles.
donc voilà je m'en remets à votre savoir![]()
Partager