Squashed 'third_party/cimg/' content from commit 4b66369

Change-Id: I7454d9107a08dba899fd4659731733049165ae0a
git-subtree-dir: third_party/cimg
git-subtree-split: 4b66369ab4e34a46119d6c43e9adce061bb40f4b
diff --git a/examples/use_cimgIPL.cpp b/examples/use_cimgIPL.cpp
new file mode 100644
index 0000000..821eb3c
--- /dev/null
+++ b/examples/use_cimgIPL.cpp
@@ -0,0 +1,155 @@
+/*
+#
+#  File        : use_cimgIPL.cpp
+#                ( C++ source file )
+#
+#  Description : Example of use for the CImg plugin 'plugins/cimgIPL.h'.
+#                This file is a part of the CImg Library project.
+#                ( http://cimg.eu )
+#
+#  Copyright   : newleft (haibo.zheng@gmail.com)
+#                         newleftist@hotmail.com
+#
+#  License     : CeCILL v2.0
+#                ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html )
+#
+#  This software is governed by the CeCILL  license under French law and
+#  abiding by the rules of distribution of free software.  You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  "http://www.cecill.info".
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  In this respect, the user's attention is drawn to the risks associated
+#  with loading,  using,  modifying and/or developing or reproducing the
+#  software by the user in light of its specific status of free software,
+#  that may mean  that it is complicated to manipulate,  and  that  also
+#  therefore means  that it is reserved for developers  and  experienced
+#  professionals having in-depth computer knowledge. Users are therefore
+#  encouraged to load and test the software's suitability as regards their
+#  requirements in conditions enabling the security of their systems and/or
+#  data to be ensured and,  more generally, to use and operate it in the
+#  same conditions as regards security.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL license and that you accept its terms.
+#
+*/
+
+#include <cv.h>
+#include <highgui.h>
+#include <math.h>
+
+#pragma comment(lib, "cv.lib")
+#pragma comment(lib, "cvaux.lib")
+#pragma comment(lib, "cxcore.lib")
+#pragma comment(lib, "highgui.lib")
+
+#define cimg_plugin1 "plugins\cimgIPL.h"
+#include "CImg.h"
+using namespace cimg_library;
+
+// Main procedure
+//----------------
+int main(int argc, char* argv[]) {
+  int wid = 0;
+  CImg<> cImg(argv[1]);
+  cImg.display("cImg");
+  IplImage* ipl;
+  //ipl = cvLoadImage(argv[1], -1);
+  ipl = cImg.get_IPL();
+
+  IplImage *ipl8;
+  IplImage *ipl16, *ipl32, *ipl64;
+  IplImage *ipl16to8, *ipl32to8, *ipl64to8;
+  cvNamedWindow("origin", wid++);
+  cvNamedWindow("8bit_OK", wid++);
+  cvNamedWindow("16bit", wid++);
+  cvNamedWindow("32bit", wid++);
+  cvNamedWindow("64bit", wid++);
+  cvNamedWindow("16bitto8", wid++);
+  cvNamedWindow("32bitto8", wid++);
+  cvNamedWindow("64bitto8", wid++);
+
+  cvShowImage("origin", ipl);
+
+  ipl8 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_8U, ipl->nChannels);
+  cvConvert(ipl, ipl8);
+
+  ipl16 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_16U, ipl->nChannels);
+  cvConvert(ipl, ipl16);
+
+  ipl32 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_32F, ipl->nChannels);
+  cvConvert(ipl, ipl32);
+
+  ipl64 = cvCreateImage(cvGetSize(ipl), IPL_DEPTH_64F, ipl->nChannels);
+  cvConvert(ipl, ipl64);
+
+  cvShowImage("8bit_OK", ipl8);// this canbe show properly
+  cvShowImage("16bit", ipl16);// maynot display properly, that's bug of cvShowImage
+  cvShowImage("32bit", ipl32);// maynot display properly, that's bug of cvShowImage
+  cvShowImage("64bit", ipl64);// maynot display properly, that's bug of cvShowImage
+
+  // cvShowImage can only display IplImage with IPL_DEPTH_8X, proved by the following codes
+  ipl16to8 = cvCreateImage(cvGetSize(ipl16), IPL_DEPTH_8U, ipl16->nChannels);
+  cvConvert(ipl16, ipl16to8);
+  ipl32to8 = cvCreateImage(cvGetSize(ipl32), IPL_DEPTH_8U, ipl32->nChannels);
+  cvConvert(ipl32, ipl32to8);
+  ipl64to8 = cvCreateImage(cvGetSize(ipl64), IPL_DEPTH_8U, ipl64->nChannels);
+  cvConvert(ipl64, ipl64to8);
+  cvShowImage("16bitto8", ipl16to8);	// diplay ok
+  cvShowImage("32bitto8", ipl32to8);	// diplay ok
+  cvShowImage("64bitto8", ipl64to8);	// diplay ok
+
+  // now, we test ipl8->cImg, ipl16->cImg, ipl32->cImg, ipl64->cImg
+  cImg.assign(ipl8);
+  cImg.display("ipl8->cimg");
+  cImg.assign(ipl16);
+  cImg.display("ipl16->cimg");
+  cImg.assign(ipl32);
+  cImg.display("ipl32->cimg");
+  cImg.assign(ipl64);
+  cImg.display("ipl64->cimg");
+
+  cvWaitKey(0);
+
+  // test another construct
+  CImg<unsigned char> testCImg1(ipl16);
+  testCImg1.display("testCImg1");
+  CImg<unsigned char> testCImg2(ipl32);
+  testCImg2.display("testCImg2");
+  CImg<unsigned char> testCImg3(ipl64);
+  testCImg3.display("testCImg3");
+
+  CImg<double> testCImg4(ipl16);
+  testCImg4.display("testCImg4");
+  CImg<double> testCImg5(ipl32);
+  testCImg5.display("testCImg5");
+  CImg<double> testCImg6(ipl64);
+  testCImg6.display("testCImg6");
+
+  cvReleaseImage(&ipl);
+  cvReleaseImage(&ipl8);
+  cvReleaseImage(&ipl16);
+  cvReleaseImage(&ipl32);
+  cvReleaseImage(&ipl64);
+  cvReleaseImage(&ipl16to8);
+  cvReleaseImage(&ipl32to8);
+  cvReleaseImage(&ipl64to8);
+
+  cvDestroyWindow("origin");
+  cvDestroyWindow("8bit_OK");
+  cvDestroyWindow("16bit");
+  cvDestroyWindow("32bit");
+  cvDestroyWindow("64bit");
+  cvDestroyWindow("16bitto8");
+  cvDestroyWindow("32bitto8");
+  cvDestroyWindow("64bitto8");
+
+  return 0;
+}