<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<br><br><div><div id="SkyDrivePlaceholder"></div>&gt; From: cloos@jhcloos.com<br>&gt; To: cairo@cairographics.org<br>&gt; CC: nadeemafana@live.com<br>&gt; Subject: Re: [cairo] TIFF files<br>&gt; Date: Fri, 16 Mar 2012 11:11:59 -0400<br>&gt; <br>&gt; &gt;&gt;&gt;&gt;&gt; "NA" == Nadeem Afana &lt;nadeemafana@live.com&gt; writes:<br>&gt; <br>&gt; NA&gt; How can I generate TIFF files using Cairo and C/C++ in Linux?<br>&gt; <br>&gt; LibTiff.<br>&gt; <br>&gt; Libtiff is well documented (start with &gt;&gt;man libtiff&lt;&lt;.  Each of the<br>&gt; functions listed under LIST OF ROUTINES has its own man page) and comes<br>&gt; with some example apps which help document the api.<br>&gt; <br>&gt; As an example, I added this to a test app to write out said app's<br>&gt; internal CIELAB+Alpha buffer (if cairo had support for colour spaces I<br>&gt; would have used it to write a pdf...):<br>&gt; <br>&gt;     if (labtif) {<br>&gt;         TIFFDefaultStripSize (labtif, height);<br>&gt;         TIFFSetField (labtif, TIFFTAG_IMAGEWIDTH, width);<br>&gt;         TIFFSetField (labtif, TIFFTAG_IMAGELENGTH, height);<br>&gt;         TIFFSetField (labtif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);<br>&gt;         TIFFSetField (labtif, TIFFTAG_SAMPLESPERPIXEL, 4);<br>&gt;         TIFFSetField (labtif, TIFFTAG_BITSPERSAMPLE, TIFFDataWidth(TIFF_DOUBLE) * 8);<br>&gt;         TIFFSetField (labtif, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB);<br>&gt;         TIFFSetField (labtif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);<br>&gt;         TIFFSetField (labtif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_CIELAB);<br>&gt;         TIFFSetField (labtif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);<br>&gt;         TIFFSetField (labtif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);<br>&gt;         TIFFSetField (labtif, TIFFTAG_ROWSPERSTRIP, height );<br>&gt;         if (dpi &gt; 0.) {<br>&gt;                 TIFFSetField (labtif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);<br>&gt;                 TIFFSetField (labtif, TIFFTAG_XRESOLUTION, dpi );<br>&gt;                 TIFFSetField (labtif, TIFFTAG_YRESOLUTION, dpi );<br>&gt;         }<br>&gt;         TIFFWriteRawStrip (labtif, 0, labbuf, len * 4 * sizeof(double));<br>&gt;         TIFFClose (labtif);<br>&gt;     }<br>&gt; <br>&gt; (labtiff is opened with:<br>&gt; <br>&gt;         labtif = TIFFOpen(optarg, "w");<br>&gt; <br>&gt; inside of a getopt_long(3) block)<br>&gt; <br>&gt; For a more portable app you'd want either to base fillorder on the<br>&gt; hosts's endianness or ensure the buffer has matching order.  You also<br>&gt; may want to use some form of compression, etc.<br>&gt; <br>&gt; There are a bunch of fields to set, but the api is straitforward.<br>&gt; <br>&gt; -JimC<br>&gt; -- <br>&gt; James Cloos &lt;cloos@jhcloos.com&gt;         OpenPGP: 1024D/ED7DAEA6<br></div>                                               </div></body>
</html>