view scripts/io/Tiff.m @ 31131:7349994f30f8

Tiff: fixed the first test to use a single-pixel image * Tiff.m: modified the test to use an image with one pixel instead of an empty image. * __tiff__.cc: fixed bugs in PlanarConfiguration tag and in type checking for writeEncodedStrip.
author magedrifaat <magedrifaat@gmail.com>
date Mon, 25 Jul 2022 04:15:18 +0200
parents 7851c5b9c950
children c66f7c227e50
line wrap: on
line source

classdef Tiff
    properties (Constant = true)
        TagID = struct(
            "SubFileType", 254,
            "ImageWidth", 256,
            "ImageLength", 257,
            "BitsPerSample", 258,
            "Compression", 259,
            "Photometric", 262,
            "Thresholding", 263,
            "FillOrder", 266,
            "DocumentName", 269,
            "ImageDescription", 270,
            "Make", 271,
            "Model", 272,
            "StripOffsets", 273,
            "Orientation", 274,
            "SamplesPerPixel", 277,
            "RowsPerStrip", 278,
            "StripByteCounts", 279,
            "MinSampleValue", 280,
            "MaxSampleValue", 281,
            "XResolution", 282,
            "YResolution", 283,
            "PlanarConfiguration", 284,
            "PageName", 285,
            "XPosition", 286,
            "YPosition", 287,
            "GrayResponseUnit", 290,
            'GrayResponseCurve', 291,
            "Group3Options", 292,
            "Group4Options", 293,
            "ResolutionUnit", 296,
            "PageNumber", 297,
            "TransferFunction", 301,
            "Software", 305,
            "DateTime", 306,
            "Artist", 315,
            "HostComputer", 316,
            "WhitePoint", 318,
            "PrimaryChromaticities", 319,
            "ColorMap", 320,
            "HalfToneHints", 321,
            "TileWidth", 322,
            "TileLength", 323,
            "TileOffsets", 324,
            "TileByteCounts", 325,
            "SubIFD", 330,
            "InkSet", 332,
            "InkNames", 333,
            "NumberOfInks", 334,
            "DotRange", 336,
            "TargetPrinter", 337,
            "ExtraSamples", 338,
            "SampleFormat", 339,
            "SMinSampleValue", 340,
            "SMaxSampleValue", 341,
            "YCbCrCoefficients", 529,
            "YCbCrSubSampling", 530,
            "YCbCrPositioning", 531,
            "ReferenceBlackWhite", 532,
            "XMP", 700,
            "ImageDepth", 32997,
            "Copyright", 33432,
            "RichTIFFIPTC", 33723,
            "Photoshop", 34377,
            "ICCProfile", 34675,
            "SToNits", 37439,
            "JPEGQuality", 65537,
            "JPEGColorMode", 65538,
            "ZipQuality", 65557,
            "SGILogDataFmt", 65560
        )
    endproperties

    properties (Access = private)
        tiff_handle
    endproperties

    methods
        function t = Tiff (filename, mode="r")
            if (nargin == 0 || nargin > 2)
                % print_usage();
                error("Usage: Tiff(filename[, mode])");
            endif

            t.tiff_handle = __open_tiff__ (filename, mode);
        endfunction

        function close (t)
            __close_tiff__ (t.tiff_handle);
        endfunction

        function tag = getTag (t, tag_name)
            tag = __tiff_get_tag__ (t.tiff_handle, tag_name);
        endfunction

        function setTag (t, tag_name, tag_value)
            __tiff_set_tag__ (t.tiff_handle, tag_name, tag_value);
        endfunction

        function argout = read (t)
            argout = __tiff_read__ (t.tiff_handle);
        endfunction

        function writeEncodedStrip (t, stripNumber, imageData)
            __tiff_write_encoded_strip__ (t.tiff_handle, stripNumber, imageData);
        endfunction

        % TODO(maged): add documentation and make print_usage work
    endmethods
endclassdef

## test one-pixel image
%!testif HAVE_TIFF
%! filename = [tempname() ".tif"];
%! unwind_protect
%!   a = Tiff (filename, "w");
%!   setTag(a, "ImageWidth", 1);
%!   setTag(a, "ImageLength", 1);
%!   setTag(a, "BitsPerSample", 8);
%!   data = uint8([255]);
%!   writeEncodedStrip(a, 1, data);
%!   a.close ();
%!   a = Tiff (filename, "r");
%!   data2 = a.read();
%!   assert (all (size(data) == [1, 1]));
%!   assert (data(1) == 255);
%!   a.close ();
%! unwind_protect_cleanup
%!   unlink (filename);
%! end_unwind_protect