source: Sophya/trunk/AddOn/PIPhoto/imgmag_pi.cc@ 3810

Last change on this file since 3810 was 3554, checked in by ansari, 17 years ago

This commit was generated by cvs2svn to compensate for changes in r3553,
which included commits to RCS files with non-trunk default branches.

File size: 6.7 KB
Line 
1#include "imgmag_pi.h"
2// ------------------------------------------------------------------
3// ------------------ Classe ImgMagObj -----------------------
4
5/* --Methode--*/
6ImgMagObj::ImgMagObj(string filename)
7 : Magick::Image()
8{
9 read(filename.c_str());
10}
11
12/* --Methode--*/
13ImgMagObj::ImgMagObj(const unsigned int width, const unsigned int height)
14 : Magick::Image(Magick::Geometry(width, height), Magick::ColorRGB(0., 0., 0.) )
15{
16}
17
18/* --Methode--*/
19ImgMagObj::ImgMagObj(PIPixRGBArray const & rgba)
20 : Magick::Image(Magick::Geometry(rgba.XSize(), rgba.YSize()), Magick::ColorRGB(0., 0., 0.) )
21{
22 for (unsigned int i=0; i<columns(); i++)
23 for (unsigned int j=0; j<rows(); j++) {
24 PIPixRGB rgb = rgba(i,j);
25 Magick::ColorRGB col((double)rgb.red/255., (double)rgb.green/255.,
26 (double)rgb.blue/255.);
27 pixelColor(i,j,col);
28 }
29}
30
31/* --Methode--*/
32void ImgMagObj::FillPIRGBArray(PIPixRGBArray& rgba)
33{
34 rgba.SetSize(XSize(), YSize());
35 for (unsigned int i=0; i<columns(); i++)
36 for (unsigned int j=0; j<rows(); j++) {
37 Magick::ColorRGB col = pixelColor(i,j);
38 PIPixRGB rgb;
39 rgba(i,j).red = (unsigned char)(col.red()*255.);
40 rgba(i,j).green = (unsigned char)(col.green()*255.);
41 rgba(i,j).blue = (unsigned char)(col.blue()*255.);
42 }
43 return;
44}
45
46// ------------------------------------------------------------------
47// ------------------ Classe ImgMagP2DAdaptRGB -----------------------
48
49/* --Methode--*/
50ImgMagP2DAdaptRGB::ImgMagP2DAdaptRGB(Magick::Image * img, bool ad)
51 : P2DArrayAdapter(img->columns(), img->rows() )
52{
53 aDel = ad; mPix = img;
54}
55
56/* --Methode--*/
57ImgMagP2DAdaptRGB::~ImgMagP2DAdaptRGB()
58{
59 if ( (aDel) && (mPix) ) delete mPix;
60}
61
62/* --Methode--*/
63double ImgMagP2DAdaptRGB::Value(int ix, int jy)
64{
65 if ( (ix < 0) || (jy < 0) || (ix >= sX) || (jy >= sY) ) return(0.);
66 Magick::ColorRGB col = mPix->pixelColor(ix,jy);
67 return ( ((col.blue()*256.+col.green())*256.+col.red())*255. );
68}
69
70/* --Methode--*/
71double ImgMagP2DAdaptRGB::MeanVal(int ix1, int ix2, int jy1, int jy2)
72{
73 int ec;
74 if (ix1>ix2) { ec=ix1; ix1=ix2; ix2=ec; }
75 if (jy1>jy2) { ec=jy1; jy1=jy2; jy2=ec; }
76 unsigned long r = 0.;
77 unsigned long g = 0.;
78 unsigned long b = 0.;
79 Magick::ColorRGB rgb;
80 for(int j=jy1; j<=jy2; j++) {
81 for(int i=ix1; i<=ix2; i++) {
82 rgb = mPix->pixelColor(i, j);
83 r += (unsigned long)(rgb.red()*255.);
84 g += (unsigned long)(rgb.green()*255.);
85 b += (unsigned long)(rgb.blue()*255.);
86 }
87 }
88 unsigned long n = (jy2-jy1+1)*(ix2-ix1+1);
89 r /= n; g /= n; b /= n;
90 return ((double)((b*256+g)*256+r));
91/* La meme chose calculee en double ne marche pas !!!!
92 double r = 0.;
93 double g = 0.;
94 double b = 0.;
95 Magick::ColorRGB rgb;
96 for(int j=jy1; j<=jy2; j++) {
97 for(int i=ix1; i<=ix2; i++) {
98 rgb = mPix->pixelColor(i, j);
99 r += rgb.red(); g += rgb.green(); b += rgb.blue();
100 }
101 }
102 double n = (jy2-jy1+1)*(ix2-ix1+1);
103 r /= n; g /= n; b /= n;
104 return ( ((b*256.+g)*256.+r)*255. );
105*/
106}
107
108
109// ------------------------------------------------------------------
110// ------------------ Classe ImgMagP2DAdaptGS -----------------------
111
112/* --Methode--*/
113ImgMagP2DAdaptGS::ImgMagP2DAdaptGS(Magick::Image * img, bool ad)
114 : P2DArrayAdapter(img->columns(), img->rows() )
115{
116 aDel = ad; mPix = img;
117}
118
119/* --Methode--*/
120ImgMagP2DAdaptGS::~ImgMagP2DAdaptGS()
121{
122 if ( (aDel) && (mPix) ) delete mPix;
123}
124
125/* --Methode--*/
126double ImgMagP2DAdaptGS::Value(int ix, int jy)
127{
128 if ( (ix < 0) || (jy < 0) || (ix >= sX) || (jy >= sY) ) return(0.);
129 Magick::ColorGray grey = mPix->pixelColor(ix,jy);
130 return ( grey.shade() );
131}
132
133/* --Methode--*/
134double ImgMagP2DAdaptGS::MeanVal(int ix1, int ix2, int jy1, int jy2)
135{
136 int ec;
137 if (ix1>ix2) { ec=ix1; ix1=ix2; ix2=ec; }
138 if (jy1>jy2) { ec=jy1; jy1=jy2; jy2=ec; }
139 double gr = 0;
140 for(int j=jy1; j<=jy2; j++)
141 for(int i=ix1; i<=ix2; i++) {
142 Magick::ColorGray grey = mPix->pixelColor(i, j);
143 gr += grey.shade();
144 }
145 double n = (jy2-jy1+1)*(ix2-ix1+1);
146 return ( gr/n );
147}
148
149// ------------------------------------------------------------------
150// Adapteur d'objet ImgMagObj pour gestion par NamedObjMgr de piapp
151
152/* --Methode-- */
153NOMAdapter_ImgMag::NOMAdapter_ImgMag(ImgMagObj* o)
154 : NObjMgrAdapter(o)
155{
156mImg = o;
157}
158
159/* --Methode-- */
160NOMAdapter_ImgMag::~NOMAdapter_ImgMag()
161{
162}
163
164/* --Methode-- */
165NObjMgrAdapter* NOMAdapter_ImgMag::Clone(AnyDataObj* o)
166{
167ImgMagObj* img = dynamic_cast<ImgMagObj *>(o);
168if (img) return ( new NOMAdapter_ImgMag(img) );
169return ( new NObjMgrAdapter(o) );
170}
171string NOMAdapter_ImgMag::GetDataObjType()
172{
173 return ("ImgMagObj ");
174}
175
176/* --Methode-- */
177void NOMAdapter_ImgMag::Print(ostream& os, int lev)
178{
179 if (mImg == NULL) return;
180 os << " ImgMagObj - File=" << mImg->fileName() << " Width=" << mImg->columns()
181 << " x Height=" << mImg->rows() << endl;
182// if (lev > 1)
183}
184
185/* --Methode-- */
186P2DArrayAdapter* NOMAdapter_ImgMag::Get2DArray(string& dopt)
187{
188 if (mImg == NULL) return NULL;
189 if (dopt.find("monochrome") < dopt.length()) {
190 dopt = "lut=lin,0.,1. grey128 " + dopt;
191 return new ImgMagP2DAdaptGS(mImg);
192 }
193 else {
194 dopt = "lut=rgb rgb32768cm " + dopt;
195 return new ImgMagP2DAdaptRGB(mImg);
196 }
197}
198
199/* --Methode-- */
200NTupleInterface* NOMAdapter_ImgMag::GetNTupleInterface(bool& adel)
201{
202 if (mImg == NULL) return NULL;
203 adel = true;
204 return( new NTupInt_ImgMag(mImg) );
205}
206
207
208// ---- Class Interface NTuple pour ImgMagObj
209
210/* --Methode-- */
211NTupInt_ImgMag::NTupInt_ImgMag(ImgMagObj* img)
212{
213 mImg = img;
214}
215
216/* --Methode-- */
217NTupInt_ImgMag::~NTupInt_ImgMag()
218{
219}
220
221/* --Methode-- */
222sa_size_t NTupInt_ImgMag::NbLines() const
223{
224 if (mImg) return( mImg->XSize()*mImg->YSize() );
225 else return 0;
226}
227
228/* --Methode-- */
229sa_size_t NTupInt_ImgMag::NbColumns() const
230{
231 return(6);
232}
233
234/* --Methode-- */
235r_8* NTupInt_ImgMag::GetLineD(sa_size_t n) const
236{
237 int i;
238 if ((n < 0) || (n >= (int)(mImg->XSize()*mImg->YSize()) ))
239 for(i=0; i<6; i++) mRet[i] = 0.;
240else {
241 int i = n%mImg->XSize();
242 int j = n/mImg->XSize();
243 Magick::ColorRGB rgb = mImg->pixelColor(i, j);
244 Magick::ColorGray grey = mImg->pixelColor(i, j);
245 mRet[0] = i; mRet[1] = j;
246 mRet[2] = rgb.red();
247 mRet[3] = rgb.green();
248 mRet[4] = rgb.blue();
249 mRet[5] = grey.shade();
250 }
251return(mRet);
252}
253
254/* --Methode-- */
255string NTupInt_ImgMag::VarList_C(const char* nx) const
256{
257string nomx;
258if (nx) nomx = nx;
259else nomx = "_xh_";
260string vardec = "double x,y,i,j,r,g,b,I; \n";
261vardec += "x = " + nomx + "[0]; i = " + nomx + "[0]; \n";
262vardec += "y = " + nomx + "[1]; j = " + nomx + "[1]; \n";
263vardec += "r = " + nomx + "[2]; g = " + nomx + "[3]; \n";
264vardec += "b = " + nomx + "[4]; I = " + nomx + "[5]; \n";
265return(vardec);
266}
267
268
269
Note: See TracBrowser for help on using the repository browser.