view scripts/io/Tiff.m @ 31116:9b3685afb4e7

Tiff.m added a first test with empty image * Tiff.m: added a test to create and read an empty image with no directories.
author magedrifaat <magedrifaat@gmail.com>
date Sat, 16 Jul 2022 21:02:07 +0200
parents 2daeeff33980
children e8d1cc309bc9
line wrap: on
line source

classdef Tiff
    properties (Constant = true)
        % TODO(maged): Add the remaining fields
        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, tagName)
            tag = __tiff_get_tag__(t.tiff_handle, tagName);
        endfunction

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

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

## test empty image
%!testif HAVE_TIFF
%! filename = [tempname() ".tif"];
%! unwind_protect
%!   a = Tiff (filename, "w");
%!   a.close ();
%!   a = Tiff (filename, "rh");
%!   a.close ();
%! unwind_protect_cleanup
%!   unlink (filename);
%! end_unwind_protect