Mercurial > octave-libtiff
diff libinterp/corefcn/__tiff__.cc @ 31185:a1145ac2ce9b
Tiff: populated TagID from the C++ map to avoid having two copies
* __tiff__.cc (F__tiff_make_tagid__): implemented internal function as
initializer for TagID.
* Tiff.m: changed the initialization for TagID to use the internal function.
author | magedrifaat <magedrifaat@gmail.com> |
---|---|
date | Thu, 18 Aug 2022 17:23:43 +0200 |
parents | 86f91ea7a642 |
children | 90eccc78d958 |
line wrap: on
line diff
--- a/libinterp/corefcn/__tiff__.cc Thu Aug 18 16:39:56 2022 +0200 +++ b/libinterp/corefcn/__tiff__.cc Thu Aug 18 17:23:43 2022 +0200 @@ -93,12 +93,13 @@ &bits_per_sample)) error ("Failed to read the BitsPerSample tag"); - // TODO(maged): this doesn't really work for writing as LibTIFF will - // refuse to write unless the tag is set if (! TIFFGetField (tif, TIFFTAG_PLANARCONFIG, &planar_configuration)) // LibTIFF has a bug where it incorrectly returns 0 as a default // value for PlanarConfiguration although the default value is 1 + // This doesn't completely solve the issue as LibTIFF will refuse + // to write data to images of the tag is not set. + // see: https://www.asmail.be/msg0054918184.html planar_configuration = 1; is_tiled = TIFFIsTiled(tif); @@ -107,7 +108,6 @@ // A map of tag names supported by matlab, there are some differences // than LibTIFF's names (e.g. Photometric vs PhotometricInerpretation) - // TODO(maged): use this to initialize TagID to avoid having two copies static const std::map<std::string, ttag_t> tag_name_map = { {"SubFileType", 254}, {"ImageWidth", 256}, @@ -1073,6 +1073,7 @@ { // Workaround for a bug in LibTIFF where it incorrectly returns // zero as the default value for PlanaConfiguration + // See: https://www.asmail.be/msg0054918184.html if (! TIFFGetField(tif, tag_id, data_ptr)) *reinterpret_cast<uint16_t *> (data_ptr) = 1; } @@ -3471,4 +3472,12 @@ #endif } + DEFUN (__tiff_make_tagid__, , , + "Create the TagID structure from the internal map") + { + std::map<std::string, octave_value> tag_ov_map; + for (auto it = tag_name_map.cbegin (); it != tag_name_map.cend (); it++) + tag_ov_map[it->first] = octave_value (it->second); + return octave_value_list(octave_scalar_map (tag_ov_map)); + } }