Index: /trunk/SophyaPI/PI/pipixutils.cc
===================================================================
--- /trunk/SophyaPI/PI/pipixutils.cc	(revision 3548)
+++ /trunk/SophyaPI/PI/pipixutils.cc	(revision 3549)
@@ -80,10 +80,7 @@
 PIPixRGBArray::PIPixRGBArray(int sx, int sy)
 {
-  if (sx < 0) sx = 0;
-  if (sy < 0) sy = 0;
-  sx_ = sx;  sy_ = sy;	
-  size_t sz = sx_*sy_;
-  if (sz>0) rgbpix_ = new PIPixRGB[sz];
-  else rgbpix_ = NULL;  
+  sx_ = sy_  = 0;
+  rgbpix_ = NULL; 
+  SetSize(sx, sy);
 }
 
@@ -100,5 +97,17 @@
 }
 
-int PIPixRGBArray::SaveToFile(const char * filename)
+void PIPixRGBArray::SetSize(int sx, int sy)
+{
+  if ((sx == sx_)&&(sy == sy_)) return;
+  if (sx < 0) sx = 0;
+  if (sy < 0) sy = 0;
+  if (rgbpix_)  delete[] rgbpix_;
+  sx_ = sx;  sy_ = sy;	
+  size_t sz = sx_*sy_;
+  if (sz>0) rgbpix_ = new PIPixRGB[sz];
+  else rgbpix_ = NULL;  
+}
+
+int PIPixRGBArray::SaveToFile(const char * filename)   const 
 {
   FILE * fip = fopen(filename,"wb");
@@ -121,5 +130,5 @@
 {
   if (rgbpix_) { 
-  	delete[] rgbpix_;	
+    delete[] rgbpix_;	
     sx_ = sy_ = 0;
     rgbpix_ = NULL; 
@@ -139,6 +148,6 @@
   size_t sz = sx_*sy_;
   if (sz>0) { 
-  	rgbpix_ = new PIPixRGB[sz];
-  	fread((void *)rgbpix_, sizeof(PIPixRGB), sx_*sy_, fip);
+    rgbpix_ = new PIPixRGB[sz];
+    fread((void *)rgbpix_, sizeof(PIPixRGB), sx_*sy_, fip);
   }
   else rgbpix_ = NULL;  
Index: /trunk/SophyaPI/PI/pipixutils.h
===================================================================
--- /trunk/SophyaPI/PI/pipixutils.h	(revision 3548)
+++ /trunk/SophyaPI/PI/pipixutils.h	(revision 3549)
@@ -16,6 +16,6 @@
   PIPixColIdx();
   ~PIPixColIdx();
-  inline int XSize() { return sx_; }
-  inline int YSize() { return sy_; }
+  inline int XSize() const { return sx_; }
+  inline int YSize() const { return sy_; }
 
   void AllocateByte(int sx, int sy);
@@ -62,6 +62,8 @@
   ~PIPixRGBArray();
   
-  inline int XSize() { return sx_; }
-  inline int YSize() { return sy_; }
+  void SetSize(int sx, int sy);
+
+  inline int XSize() const { return sx_; }
+  inline int YSize() const { return sy_; }
 
   inline PIPixRGB operator()(int i, int j) const
@@ -70,5 +72,5 @@
     { return rgbpix_[j*sx_+i]; }
  
-  int SaveToFile(const char * filename);
+  int SaveToFile(const char * filename) const ;
   int ReadFrFile(const char * filename);
     
Index: /trunk/SophyaPI/PI/pitherm.cc
===================================================================
--- /trunk/SophyaPI/PI/pitherm.cc	(revision 3548)
+++ /trunk/SophyaPI/PI/pitherm.cc	(revision 3549)
@@ -139,4 +139,5 @@
 void PIThermometer::Draw(PIGraphicGen* g, int /*x0*/, int /*y0*/, int /*dx*/, int /*dy*/)
 {
+  if (!IsVisible())  return;
   double delta = (max_-min_);
   if (delta < 1.e-39) delta = 1.e-39;
Index: /trunk/SophyaPI/PI/piwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdggen.cc	(revision 3548)
+++ /trunk/SophyaPI/PI/piwdggen.cc	(revision 3549)
@@ -57,7 +57,4 @@
 //--
 //++
-// void  PSPrint(PSFile *psf, int ofx=0, int ofy=0)
-//	Méthode virtuelle qui doit être redéfinie pour chacune des classes filles.
-//	produit une représentation graphique de l'objet en Postscript.
 // SetSize(int sx, int sy)
 //	Modifie la taille de l'objet.
@@ -181,4 +178,16 @@
 // int  UserFlag()
 //	Renvoie la valeur "int" user de l'objet.
+//--
+
+//++
+// Titre	Export postscript et format RGB
+//--
+//++
+// void  PSPrint(PSFile *psf, int ofx=0, int ofy=0)
+//	Méthode virtuelle qui doit être redéfinie pour chacune des classes filles.
+//	produit une représentation graphique de l'objet en Postscript.
+// void  ExportToRGB(PIPixRGBArray & rgba)
+//	Méthode virtuelle qui doit être redéfinie pour chaque architecture.
+//	Remplit un tableau PIPixRGBArray le contenu pixels du widget en couleurs RGB. 
 //--
 
@@ -309,4 +318,10 @@
 }
 
+/* --Methode-- */
+void PIWdgGen::ExportToRGB(PIPixRGBArray & rgba)
+{
+return;
+}
+
 //++
 // Titre	Gestion des Draw/Event Handler
Index: /trunk/SophyaPI/PI/piwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/piwdggen.h	(revision 3548)
+++ /trunk/SophyaPI/PI/piwdggen.h	(revision 3549)
@@ -10,4 +10,5 @@
 #include "pimsghandler.h"
 #include "picolist.h"
+#include "pipixutils.h"
 
 #include <string>
@@ -107,6 +108,10 @@
   virtual bool           IfSensitive()=0;
 
+//  Pour exporter le contenu d'un widget (dessin vectoriel) en postscript
   virtual void           PSPrint(PSFile *psf, int ofx=0, int ofy=0,
 				 double scale_x=1., double scale_y=1.);
+// Pour exporter le tableau des pixels du widget en classe  PIPixRGBArray
+// L'implementation par defaut ne fait rien 
+  virtual void           ExportToRGB(PIPixRGBArray & rgba);
 
 //  Gestion de copier-coller
Index: /trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.cc	(revision 3548)
+++ /trunk/SophyaPI/PI/piwdgx.cc	(revision 3549)
@@ -831,4 +831,56 @@
 }
 
+
+// Pour exporter le tableau des pixels du widget en classe  PIPixRGBArray
+inline void _col2_fcol_(unsigned long & col, unsigned long & fcol)
+{
+  if (col > 0x00FFFFFF)  fcol = 0x01000000;
+  else if  (col > 0x0000FFFF)  fcol = 0x000010000;
+  else if (col > 0x000000FF) fcol = 0x00000100;
+  else fcol = 1;  
+}   
+/* --Methode-- */
+void PIWdgX::ExportToRGB(PIPixRGBArray & rgba)
+{
+Display* mdsp = PIXDisplay();
+int scr = XDefaultScreen(mdsp);
+int depth = DefaultDepth(mdsp,scr);
+Window xw = XtWindow(XtWdg());
+unsigned long plane_mask = ~0;  // tous les bits a 1
+XImage * ximg = XGetImage(mdsp, xw, 0, 0, XSize(), YSize(), plane_mask, ZPixmap);
+//DBG  cout << " Resultat XGetImage -> " << hex << ximg << dec << endl;
+if (ximg == NULL)  return;	
+                            
+unsigned long red,green,blue;
+unsigned long fred,fgreen,fblue;
+XColor col;
+Colormap  cmap = XDefaultColormap (mdsp, scr);
+red = 0x000000FF; 
+green = 0x0000FF00;
+blue = 0x00FF0000;
+unsigned short maxrgb = ~0;
+col.red = maxrgb;  col.green = col.blue = 0;
+if (XAllocColor(mdsp, cmap, &col)) red = col.pixel; 
+col.green = maxrgb;  col.red = col.blue = 0;
+if (XAllocColor(mdsp, cmap, &col)) green = col.pixel;      
+col.blue = maxrgb;  col.red = col.green = 0;
+if (XAllocColor(mdsp, cmap, &col)) blue = col.pixel;      
+_col2_fcol_(red, fred);
+_col2_fcol_(green, fgreen);
+_col2_fcol_(blue, fblue);
+rgba.SetSize(XSize(), YSize());
+unsigned long pixel;
+PIPixRGB rgb;
+for(int j=0; j<YSize(); j++)
+  for(int i=0; i<XSize(); i++) {
+    pixel = XGetPixel(ximg, i, j);
+    rgb.red = (pixel&red)/fred;
+    rgb.green = (pixel&green)/fgreen;
+    rgb.blue = (pixel&blue)/fblue;
+    rgba(i,j) = rgb;
+  }
+  XDestroyImage(ximg);
+  return;  
+}
 
 
Index: /trunk/SophyaPI/PI/piwdgx.h
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.h	(revision 3548)
+++ /trunk/SophyaPI/PI/piwdgx.h	(revision 3549)
@@ -63,4 +63,7 @@
   virtual void           SetUnSensitive();
   virtual bool           IfSensitive();
+
+// Pour exporter le tableau des pixels du widget en classe  PIPixRGBArray
+  virtual void           ExportToRGB(PIPixRGBArray & rgba);
 
 //  Gestion de copier-coller
