#include <iostream>
#include <qfile.h>
#include <qimage.h>
#include <qmatrix.h>
#include <QSet>
#include <QStringList>
#include <libkdcraw/kdcraw.h>
#include <libkdcraw/rawfiles.h>
#include <iostream>

using namespace std;



int main(int argc, char *argv[])
{
	 KDcrawIface::KDcraw decoder;
	 KDcrawIface::RawDecodingSettings rawDecodingSettings;
	 
	 QImage *img;
	 
	 QString imageFile = "DSC_6323.NEF";
	 
	cout << "processing\n";

	if ( rawDecodingSettings.sixteenBitsImage ) {
		cout << "16 bit not supported yet!\n";
		return 1;
	}

	 QByteArray imageData; /* 3 bytes for each pixel,  */
	 int width, height, rgbmax;
	 if ( !decoder.decodeRAWImage( imageFile, rawDecodingSettings, imageData, width, height, rgbmax ) )
		  return false;

	cout << "we have data!";

	cout << width << " " << height;

	 // Now the funny part, how to turn this fugly QByteArray into an QImage. Yay!
	 *img = QImage(width, height, QImage::Format_RGB32);
	 if (img->isNull())
		  return false;

	cout << "we have image container!\n";

	 uchar* data = img->bits();

	cout << "we have pointer!\n";

	 for ( int i = 0; i < imageData.size(); i += 3, data += 4 ) {
		  data[0] = imageData[i + 2]; // blue
		  data[1] = imageData[i + 1]; // green
		  data[2] = imageData[i];     // red
		  data[3] = 0xff;             // alpha
	 }

	cout << "conversion done\n";
	img->save( imageFile + ".jpg", 0, 95);
	cout << "image saved\n";

	return 0;
}
