<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Overview of LibRaw API (C++)</title>
  </head>

  <body>
    <a href=index.html>[back to Index]</a>
    <h1>Overview of LibRaw API (C++)</h1>
    <h2>General Remarks</h2>
    <ol>
      <li>The entire processing is carried out by an instance of the LibRaw class, which is an image processor.</li>
      <li>One image processor can simultaneously process only one data source file, but consecutive processing of any number of files
is possible.</li>
      <li>There may be several simultaneously working image processors in a software program (e.g., in different threads), although one
should remember that each image processor may require much memory.</li>
      <li>Reading of source data from the RAW file requires virtually no customization (see <a
          href="API-notes.html">API Notes</a> for exceptions to this rule).</li>
      <li>All data extracted from the RAW file are accessible through data fields of the image processor (LibRaw class instance).</li>
      <li>Although LibRaw <b>is not intended for RAW data postprocessing</b>, the library includes calls that enable complete
emulation of the <b>dcraw</b> utility.
      <li>All customization for the processing is performed via data fields of the LibRaw class.</li>
    </ol>
        
    <h2>Brief Demonstration</h2>
    <p> 
      The example below contains no error processing for the sake of brevity.
    </p>
    <pre>
#include "libraw/libraw.h"
int process_image(char *file)
{
        // Let us create an image processor
        LibRaw iProcessor;

        // Open the file and read the metadata
        iProcessor.open_file(file);

        // The metadata are accessible through <a href="API-datastruct.html">data fields of the class</a>
        printf("Image size: %d x %d\n",iProcessor.imgdata.sizes.width,iProcessor.imgdata.sizes.height);

        // Let us unpack the image
        iProcessor.unpack();

        // Convert from imgdata.rawdata to imgdata.image:
        iProcessor.raw2image();

        // And let us print its dump; the data are accessible through <a href="API-datastruct.html">data fields of the class</a>
        for(i = 0;i lt; iProcessor.imgdata.sizes.iwidth *  iProcessor.imgdata.sizes.iheight; i++)
           printf("i=%d R=%d G=%d B=%d G2=%d\n",
                        i,
                        iProcessor.imgdata.image[i][0],
                        iProcessor.imgdata.image[i][1],
                        iProcessor.imgdata.image[i][2],
                        iProcessor.imgdata.image[i][3]
                );

        // Finally, let us free the image processor for work with the next image
        iProcessor.recycle();
}
</pre>


    <a href=index.html>[back to Index]</a>
  </body>
</html>
