+ }
+
+
+ image->SetOption(wxIMAGE_OPTION_TIFF_PHOTOMETRIC, photometric);
+
+ uint16 compression;
+ /*
+ Copy some baseline TIFF tags which helps when re-saving a TIFF
+ to be similar to the original image.
+ */
+ if (samplesPerPixel)
+ {
+ image->SetOption(wxIMAGE_OPTION_TIFF_SAMPLESPERPIXEL, samplesPerPixel);
+ }
+
+ if (bitsPerSample)
+ {
+ image->SetOption(wxIMAGE_OPTION_TIFF_BITSPERSAMPLE, bitsPerSample);
+ }
+
+ if ( TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &compression) )
+ {
+ image->SetOption(wxIMAGE_OPTION_TIFF_COMPRESSION, compression);
+ }
+
+ // Set the resolution unit.
+ wxImageResolution resUnit = wxIMAGE_RESOLUTION_NONE;
+ uint16 tiffRes;
+ if ( TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &tiffRes) )
+ {
+ switch (tiffRes)
+ {
+ default:
+ wxLogWarning(_("Unknown TIFF resolution unit %d ignored"),
+ tiffRes);
+ // fall through
+
+ case RESUNIT_NONE:
+ resUnit = wxIMAGE_RESOLUTION_NONE;
+ break;
+
+ case RESUNIT_INCH:
+ resUnit = wxIMAGE_RESOLUTION_INCHES;
+ break;
+
+ case RESUNIT_CENTIMETER:
+ resUnit = wxIMAGE_RESOLUTION_CM;
+ break;
+ }
+ }
+
+ image->SetOption(wxIMAGE_OPTION_RESOLUTIONUNIT, resUnit);
+
+ /*
+ Set the image resolution if it's available. Resolution tag is not
+ dependant on RESOLUTIONUNIT != RESUNIT_NONE (according to TIFF spec).
+ */
+ float resX, resY;
+
+ if ( TIFFGetField(tif, TIFFTAG_XRESOLUTION, &resX) )
+ {
+ /*
+ Use a string value to not lose precision.
+ rounding to int as cm and then converting to inch may
+ result in whole integer rounding error, eg. 201 instead of 200 dpi.
+ If an app wants an int, GetOptionInt will convert and round down.
+ */
+ image->SetOption(wxIMAGE_OPTION_RESOLUTIONX,
+ wxString::FromCDouble((double) resX));
+ }
+
+ if ( TIFFGetField(tif, TIFFTAG_YRESOLUTION, &resY) )
+ {
+ image->SetOption(wxIMAGE_OPTION_RESOLUTIONY,
+ wxString::FromCDouble((double) resY));