From: Jan P. <pa...@us...> - 2004-05-24 12:13:30
|
Update of /cvsroot/libexif/libexif/libexif In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30798 Modified Files: exif-entry.c Log Message: Some rational values are printed as %2.2f and not %i/%i because some cameras and SW tend to write both the numerator and denominator prescaled with some (huge) value (I have several such Photoshop-edited images taken by kodak DX4900). Index: exif-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/exif-entry.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -d -r1.51 -r1.52 --- exif-entry.c 7 May 2004 14:37:53 -0000 1.51 +++ exif-entry.c 24 May 2004 12:13:20 -0000 1.52 @@ -718,16 +718,17 @@ break; case EXIF_FORMAT_RATIONAL: v_rat = exif_get_rational (e->data, o); - snprintf (val, maxlen, "%i/%i", - (int) v_rat.numerator, - (int) v_rat.denominator); + if (v_rat.denominator) { + snprintf (val, maxlen, "%2.2f", (double)v_rat.numerator / v_rat.denominator); + } else { + snprintf (val, maxlen, "%i/%i", v_rat.numerator, v_rat.denominator); + } maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_rat = exif_get_rational ( e->data + 8 * i, o); - snprintf (b, sizeof (b), ", %i/%i", - (int) v_rat.numerator, - (int) v_rat.denominator); + snprintf (b, sizeof (b), ", %2.2f", + (double)v_rat.numerator / v_rat.denominator); strncat (val, b, maxlen); maxlen -= strlen (b); if ((signed)maxlen <= 0) break; @@ -735,16 +736,17 @@ break; case EXIF_FORMAT_SRATIONAL: v_srat = exif_get_srational (e->data, o); - snprintf (val, maxlen, "%i/%i", - (int) v_srat.numerator, - (int) v_srat.denominator); + if (v_srat.denominator) { + snprintf (val, maxlen, "%2.2f", (double)v_srat.numerator / v_srat.denominator); + } else { + snprintf (val, maxlen, "%i/%i", v_srat.numerator, v_srat.denominator); + } maxlen -= strlen (val); for (i = 1; i < e->components; i++) { v_srat = exif_get_srational ( e->data + 8 * i, o); - snprintf (b, sizeof (b), ", %i/%i", - (int) v_srat.numerator, - (int) v_srat.denominator); + snprintf (b, sizeof (b), ", %2.2f", + (double)v_srat.numerator / v_srat.denominator); strncat (val, b, maxlen); maxlen -= strlen (b); if ((signed) maxlen <= 0) break; |