00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "NrroImage.h"
00022 #include <iostream>
00023 #include <qstring.h>
00024 #include <qcolor.h>
00025
00026 using namespace std;
00027 using namespace gutz;
00028
00029
00030
00031
00032
00033 QImage *genNrroQImage(const NrroSP n, const vec2d minmax)
00034 {
00035
00036 if(n.isNull())
00037 {
00038 cerr << "genNrroQImage(), null nrro!!" << endl;
00039 return new QImage();
00040 }
00041
00042 if(Nrro::IMAGE != n->getKind())
00043 {
00044 cerr << "genNrroQImage(), kind not image!" << endl;
00045 return new QImage();
00046 }
00047
00048 if((n->getKind() & Nrro::TIME_SERIES))
00049 {
00050 cerr << "genNrroQImage(), cant handle time series images" << endl;
00051 return new QImage();
00052 }
00053
00054
00055 NrroSP imgData = new Nrro(*n);
00056
00057
00058 if(n->dim() != 3)
00059 imgData->forceMultiChannel();
00060
00061 imgData->quantize(8, minmax.x, minmax.y);
00062
00063 Nrro::NrroIter<char> iter = imgData->begin<char>();
00064
00065
00066
00067
00068
00069 QImage *ret = new QImage(imgData->dim(1), imgData->dim(2), 32);
00070
00071
00072
00073 if(imgData->dim(0) == 3)
00074 {
00075 for(int y=0; y<(int)(imgData->dim(2)); ++y)
00076 {
00077 for(int x=0; x<(int)(imgData->dim(1)); ++x)
00078 {
00079 ret->setPixel(x,y,qRgb((int)(iter(0,x,y)),
00080 (int)(iter(1,x,y)),
00081 (int)(iter(2,x,y))));
00082 }
00083 }
00084 }
00085 else if(imgData->dim(0) == 4)
00086 {
00087 for(int y=0; y<int(imgData->dim(2)); ++y)
00088 {
00089 for(int x=0; x<int(imgData->dim(1)); ++x)
00090 {
00091 ret->setPixel(x,y,qRgba((int)iter(0,x,y),
00092 (int)iter(1,x,y),
00093 (int)iter(2,x,y),
00094 (int)iter(3,x,y)));
00095 }
00096 }
00097 }
00098 else if(imgData->dim(0) == 1)
00099 {
00100 for(int y=0; y<int(imgData->dim(2)); ++y)
00101 {
00102 for(int x=0; x<int(imgData->dim(1)); ++x)
00103 {
00104 ret->setPixel(x,y,qRgb((int)iter(0,x,y),
00105 (int)iter(0,x,y),
00106 (int)iter(0,x,y)));
00107 }
00108 }
00109 }
00110
00111 return ret;
00112 }
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 NrroCanvasImg::NrroCanvasImg(QCanvas *canvas)
00127 : CanvasImage(canvas), _n(0)
00128 {
00129
00130 }
00131
00132 void NrroCanvasImg::setNrro(const NrroSP n, const vec2d minmax)
00133 {
00134 _n = n;
00135 if(!_n.isNull())
00136 {
00137 setImage(genNrroQImage(_n,minmax));
00138 }
00139 else
00140 {
00141 setImage(0);
00142 }
00143
00144 }
00145
00146