Bonjour,
j'aimerais convertir easyexif::EXIFInfo result, comment dois-je procéder ?
Merci d'avance.
Bonjour,
j'aimerais convertir easyexif::EXIFInfo result, comment dois-je procéder ?
Merci d'avance.
Bonjour,
Le plus simple sera de choisir une bibliothèque JSON. Ou bien, à la main (mais je déconseille) et d'écrire un fichier JSON à partir des données de la structure que vous avez.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Cela dépend de la finalité de la conversion
Si c'est pour transmettre des données entre différentes parties d'1 programme (en mémoire donc), 1 bibliothèque est le mieux.
Mais pour l'écriture d'1 fichier ou la mise dans 1 base de données, souvent le "quick and dirty" est le + simple, le + rapide et le + efficace.
et pour cela printf est très largement supérieur à cout.
1 exemple, même si les noms des champs ne sont pas terribles pour 1 recherche :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 printf("{ \"manufacturer name\": \"%s\", \"model\": \"%s\", \"software used\": \"%s\", \"image\": { \"description\": \"%s\", \"width\": %d, \"height\": %d, \"description\": \"%s\", \"orientation\": %d, \"copyright\": \"%s\" }, \"date/time\": { \"image date/time\": \"%s\", \"original date/time\": \"%s\", \"digitize date/time\": \"%s\", \"subsecond time\": \"%s\", \"exposure time\": %d }, \"take\": { \"F-stop\": %.1f, \"exposure program\": %d, \"ISO speed\": %d, \"subject distance\": %f, \"exposure bias\": %f, \"flash used?\": %d, \"flash returned light\": %d, \"flash mode\": %d, \"metering mode\": %d }, \"focal length\": { \"lens\": %f, \"35mm\": %u }, \"GPS\": { \"latitude\": \"%f deg (%f deg, %f min, %f sec %c)\", \"longitude\": \"%f deg (%f deg, %f min, %f sec %c)\", \"altitude\": %f, \"precision\": %f }, \"lens\": { \"min focal length\": %f, \"max focal length\": %f, \"f-stop min\": %.1f, \"f-stop max\": %.1f, \"make\": \"%s\", \"model\": \"%s\" }, \"focal plane\": { \"XRes\": %f, \"YRes\": %f } }", result.Make.c_str(), result.Model.c_str(), result.Software.c_str(), result.ImageDescription.c_str(), result.ImageWidth, result.ImageHeight, result.ImageDescription.c_str(), result.Orientation, result.Copyright.c_str(), result.DateTime.c_str(), result.DateTimeOriginal.c_str(), result.DateTimeDigitized.c_str(), result.SubSecTimeOriginal.c_str(), (unsigned)(1.0 / result.ExposureTime)), result.FNumber, result.ExposureProgram, result.ISOSpeedRatings, result.SubjectDistance, result.ExposureBiasValue, result.Flash, result.FlashReturnedLight, result.FlashMode, esult.MeteringMode, result.FocalLength, result.FocalLengthIn35mm, result.GeoLocation.Latitude, result.GeoLocation.LatComponents.degrees, result.GeoLocation.LatComponents.minutes, result.GeoLocation.LatComponents.seconds, result.GeoLocation.LatComponents.direction, result.GeoLocation.Longitude, result.GeoLocation.LonComponents.degrees, result.GeoLocation.LonComponents.minutes, result.GeoLocation.LonComponents.seconds, result.GeoLocation.LonComponents.direction, result.GeoLocation.Altitude, result.GeoLocation.DOP, result.LensInfo.FocalLengthMin, result.LensInfo.FocalLengthMax, result.LensInfo.FStopMin, result.LensInfo.FStopMax, result.LensInfo.Make.c_str(), result.LensInfo.Model.c_str(), result.LensInfo.FocalPlaneXResolution, result.LensInfo.FocalPlaneYResolution);
Peut-on placer le printf() dans une variable std::string (de préférence) ou cstring ?
Comme je l'ai dit, cela va dépendre de ta conversion 1 print/ cout c'est pour l'écrire dans 1 fichier.
Si tu veux le stocker dans 1 chaîne de caractère tu peux le faire, mais il faut avoir l'utilité. Et ce n'est plus avec 1 print, mais avec 1 sprintf ou 1 std::ostringstream en C++
std::ostringstream, documentation cplusplus.com en anglais
sprintf, documentation cplusplus.com en anglais
en utilisant "asprintf()" je peux le placer dans une variable.
Merci pour l'aide.
Quand je vois la simplicité pour faire du JSON, ce printf me donne envie de vomir....
Exemple avec : https://github.com/nlohmann/json
Sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <nlohmann/json.hpp> #include <iostream> int main() { nlohmann::json j; j["manufacturer name"] = "some name"; j["model"] = "some model"; j["software used"] = "some software"; const std::string str = j.dump(); std::cout << str << '\n'; }
Pour essayer en ligne : https://godbolt.org/z/jrjc7vWbh{"manufacturer name":"some name","model":"some model","software used":"some software"}
A noter au passage qu'il existe l'excellent bibliothèque https://github.com/fmtlib/fmt pour faire des printf() en mode C++
Typiquement qq chose comme :
deviendrait qq chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 printf("GPS Latitude : %f deg (%f deg, %f min, %f sec %c)\n", result.GeoLocation.Latitude, result.GeoLocation.LatComponents.degrees, result.GeoLocation.LatComponents.minutes, result.GeoLocation.LatComponents.seconds, result.GeoLocation.LatComponents.direction);
Ca évite des erreurs dans les formateurs (on a tous un jour mis un %d à la place d'un %f...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ftm::print("GPS Latitude : {} deg ({} deg, {} min, {} sec {})\n", result.GeoLocation.Latitude, result.GeoLocation.LatComponents.degrees, result.GeoLocation.LatComponents.minutes, result.GeoLocation.LatComponents.seconds, result.GeoLocation.LatComponents.direction);
Partager