Mercurial > octave-libtiff
view libinterp/dldfcn/__tiff__.cc @ 31092:a736190ce738
Added the Tiff classdef files to octave
author | magedrifaat <magedrifaat@gmail.com> |
---|---|
date | Fri, 17 Jun 2022 16:53:43 +0200 |
parents | |
children | e2bed4daae82 |
line wrap: on
line source
#include <string> #include "defun-dld.h" #include "ov.h" #include "ovl.h" #include <tiffio.h> // TODO(maged): Tidy up the formatting to be consistant with octave DEFUN_DLD (__open_tiff__, args, nargout, "Open a Tiff file and return its handle") { int nargin = args.length(); if (nargin == 0 || nargin > 2) { // TODO(maged): return invalid object instead?? error("No filename supplied\n"); } std::string filename = args(0).string_value(); std::string mode = "r"; // TODO(maged): check valid mode if (nargin == 2) mode = args(1).string_value(); TIFF *tif = TIFFOpen(filename.c_str(), mode.c_str()); // TODO(maged): print a better error if (!tif) error("Failed to open Tiff file\n"); octave_value tiff_ov = octave_value((uint64_t)tif); return octave_value_list (tiff_ov); } DEFUN_DLD (__close_tiff__, args, nargout, "Close a tiff file") { int nargin = args.length(); if (nargin == 0) { error("No handle provided\n"); } TIFF *tif = (TIFF *)(args(0).uint64_value()); TIFFClose(tif); return octave_value_list (); } DEFUN_DLD (__tiff_get_tag__, args, nargout, "Get the value of a tag from a tiff image") { int nargin = args.length(); if (nargin == 0) { error("No handle provided\n"); } if (nargin < 2) { error("No tag name provided\n"); } TIFF *tif = (TIFF *)(args(0).uint64_value()); uint32_t tag_ID; if (args(1).type_name() == "string") { std::string tagName = args(1).string_value(); const TIFFField *fip = TIFFFieldWithName(tif, tagName.c_str()); if (!fip) error("Tiff tag not found\n"); tag_ID = TIFFFieldTag(fip); } else { tag_ID = args(1).int_value(); const TIFFField *fip = TIFFFieldWithTag(tif, tag_ID); // TODO(maged): Handle other types of errors if (!fip) error("Tiff tag not found\n"); } // TODO(maged): Handle different data types/ multivalued tags. uint32_t tag_data; TIFFGetField(tif, tag_ID, &tag_data); return octave_value_list (octave_value(tag_data)); }