view scripts/io/Tiff.m @ 31126:7851c5b9c950

Tiff: implemented writeEncodedStrip function for writing a strip to an image * Tiff.m(writeEncodedStrip): added a method for writing strip to the image. * __tiff__.cc(F__tiff_write_encoded_strip): implemented an internal function to preprocess the wwriteEncodedStrip function call. * __tiff__.cc(write_strip): implemented the logic to write the strip data to the file.
author magedrifaat <magedrifaat@gmail.com>
date Sat, 23 Jul 2022 21:34:47 +0200
parents e8d1cc309bc9
children 7349994f30f8
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, 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 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