# HG changeset patch # User magedrifaat # Date 1658861064 -7200 # Node ID b7ffe64e0287310cc71cfee929bdc6e39e802d42 # Parent fc0366e009dda85181cfa26445f4fa272f862c38 Tiff.m: added test for 16- and 32-bit grayscale and RGB images. diff -r fc0366e009dd -r b7ffe64e0287 libinterp/dldfcn/__tiff__.cc --- a/libinterp/dldfcn/__tiff__.cc Tue Jul 26 19:53:35 2022 +0200 +++ b/libinterp/dldfcn/__tiff__.cc Tue Jul 26 20:44:24 2022 +0200 @@ -1144,7 +1144,7 @@ if (sample_format == 3) { - if (false && image_data.bits_per_sample != 32 && image_data.bits_per_sample != 64) + if (image_data.bits_per_sample != 32 && image_data.bits_per_sample != 64) error ("Floating point images are only supported for bit depths of 32 and 64"); } else if (sample_format != 1 && sample_format != 4) diff -r fc0366e009dd -r b7ffe64e0287 scripts/io/Tiff.m --- a/scripts/io/Tiff.m Tue Jul 26 19:53:35 2022 +0200 +++ b/scripts/io/Tiff.m Tue Jul 26 20:44:24 2022 +0200 @@ -204,7 +204,7 @@ %! unlink (filename); %! end_unwind_protect -## test one strip grayscale image +## test failure wrong height of strip %!testif HAVE_TIFF %! filename = [tempname() ".tif"]; %! unwind_protect @@ -217,7 +217,7 @@ %! unlink (filename); %! end_unwind_protect -## test one strip RGB image +## test one strip RGB image chunky planes (RGBRGBRGB) %!testif HAVE_TIFF %! filename = [tempname() ".tif"]; %! unwind_protect @@ -237,7 +237,7 @@ %! unlink (filename); %! end_unwind_protect -## test one strip RGB image +## test failure wrong number of channels %!testif HAVE_TIFF %! filename = [tempname() ".tif"]; %! unwind_protect @@ -251,3 +251,131 @@ %! unwind_protect_cleanup %! unlink (filename); %! end_unwind_protect + +## test one strip RGB image separate planes (RRRGGGBBB) +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 10, 10, 3, 8); +%! setTag(a, "PlanarConfiguration", 2); +%! setTag(a, "PhotometricInterpretation", 2); +%! data = uint8 (randi (intmax ("uint8"), 10, 10, 3)); +%! for i = 1:3 +%! writeEncodedStrip (a, i, data(:,:,i)); +%! endfor +%! a.close (); +%! a = Tiff (filename, "r"); +%! data2 = a.read (); +%! assert (size (data2), [10, 10, 3]); +%! assert (data2, data); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test failure of strip size in separate planes image +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 10, 10, 3, 8); +%! setTag(a, "PlanarConfiguration", 2); +%! setTag(a, "PhotometricInterpretation", 2); +%! data = uint8 (randi (intmax ("uint8"), 10, 10, 3)); +%! fail ("writeEncodedStrip (a, 1, data)", "Size of strip data is different from the expected size of the strip"); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test 16-bit grayscale image +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 20, 20, 1, 16); +%! data = uint16 (randi (intmax ("uint16"), 20, 20)); +%! writeEncodedStrip (a, 1, data); +%! a.close (); +%! a = Tiff (filename, "r"); +%! data2 = a.read (); +%! assert (size (data2), [20, 20]); +%! assert (data2, data); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test 32-bit grayscale image +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 20, 20, 1, 32); +%! data = uint32 (randi (intmax ("uint32"), 20, 20)); +%! writeEncodedStrip (a, 1, data); +%! a.close (); +%! a = Tiff (filename, "r"); +%! data2 = a.read (); +%! assert (size (data2), [20, 20]); +%! assert (data2, data); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test 16-bit RGB image +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 20, 20, 3, 16); +%! setTag(a, "PlanarConfiguration", 1); +%! setTag(a, "PhotometricInterpretation", 2); +%! data = uint16 (randi (intmax ("uint16"), 20, 20, 3)); +%! writeEncodedStrip (a, 1, data); +%! a.close (); +%! a = Tiff (filename, "r"); +%! data2 = a.read (); +%! assert (size (data2), [20, 20, 3]); +%! assert (data2, data); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test 32-bit RGB image +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 20, 20, 3, 32); +%! setTag(a, "PlanarConfiguration", 1); +%! setTag(a, "PhotometricInterpretation", 2); +%! data = uint32 (randi (intmax ("uint32"), 20, 20, 3)); +%! writeEncodedStrip (a, 1, data); +%! a.close (); +%! a = Tiff (filename, "r"); +%! data2 = a.read (); +%! assert (size (data2), [20, 20, 3]); +%! assert (data2, data); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect + +## test failure data-type and bit-depth mismatch +%!testif HAVE_TIFF +%! filename = [tempname() ".tif"]; +%! unwind_protect +%! a = Tiff (filename, "w"); +%! set_configs (a, 20, 20, 3, 16); +%! setTag(a, "PlanarConfiguration", 1); +%! setTag(a, "PhotometricInterpretation", 2); +%! data = uint8 (randi (intmax ("uint8"), 20, 20, 3)); +%! fail ("writeEncodedStrip (a, 1, data)", "Only uint16 and int16 data are allowed for images with bit depth of 16"); +%! a.close (); +%! unwind_protect_cleanup +%! unlink (filename); +%! end_unwind_protect