> > Hi Valeri, > > great, that's doing the job. What is the disadvantage of disabling the > double buffering? You do two shoots. First you create an in-memory pixmap then ROOT places it on the screen. This allows avoiding flicking. So it is the recommended (and default) approach. You should regard another one as soon as you are not satisfying with that recommended. Best regards, Valeri > > Thomas. > > On Tue, 4 May 2004, Valeri Fine wrote: > > > O I have realixe a typo in my message > > I wrote > > > > GetWindow > > > > It should be GetWindowID() of course > > > > http://root.cern.ch/root/htmldoc/src/TGX11.cxx.html#TGX11:GetWindowID > > > > It should help. > > > > > > ---- > > Best regards > > Valeri > > > > > > > -----Original Message----- > > > From: Thomas Bretz [mailto:Thomas_Bretz@ph.tum.de] > > > Sent: Tuesday, May 04, 2004 1:27 PM > > > To: Valeri Fine > > > Cc: 'Thomas Bretz'; roottalk@pcroot.cern.ch > > > Subject: RE: [ROOT] gVirtualX->PutImage and TCanvas > > > > > > Hi Valeri, > > > > > > thanks a lot for the fast help, I'll try it and report. However I'll > > > copy my code to this eMail that you can have a look. > > > > > > class MImage2 : public TObject > > > { > > > XImage *fImage; > > > > > > GContext_t fDefGC; > > > > > > Int_t fId; > > > UInt_t fWidth; > > > UInt_t fHeight; > > > > > > void DrawImg24(char *d, char *s, char *e); > > > > > > public: > > > MImage2(UInt_t w, UInt_t h); > > > ~MImage2(); > > > > > > void Paint(Option_t *o); > > > > > > void DrawImg(const byte *buffer); > > > > > > ClassDef(MImage2, 0) > > > }; > > > MImage2::MImage2(UInt_t w, UInt_t h) > > > : fId(gClient->GetRoot()->GetId()), fWidth(w), fHeight(h) > > > { > > > // p = pointer to MainFrame (not owner) > > > // w = width of frame > > > // h = width of frame > > > > > > fDefGC = gVirtualX->CreateGC(fId, 0); > > > fImage = (XImage*)gVirtualX->CreateImage(fWidth, fHeight); > > > > > > cout << "Detected Color Depth: " << gVirtualX->GetDepth() << endl; > > > if (gVirtualX->GetDepth()!=24) > > > cout << "WARNING this class only works with 24bit color > > depth!" << > > > endl; > > > } > > > > > > MImage2::~MImage2() > > > { > > > gVirtualX->DeleteGC(fDefGC); > > > gVirtualX->DeleteImage((Drawable_t)fImage); > > > } > > > > > > void MImage2::Paint(Option_t *o) > > > { > > > gVirtualX->PutImage(fId, fDefGC, (Drawable_t)fImage, 0, 0, 0, 0, > > > fWidth, fHeight); > > > } > > > > > > void MImage2::DrawImg24(char *d, char *s, char *e) > > > { > > > // d=destination, s=source, e=end > > > // rrrrrrrr gggggggg bbbbbbbb aaaaaaaa > > > // > > > while (s<e) > > > { > > > *d++ = *s; > > > *d++ = *s; > > > *d++ = *s++; > > > d++; > > > } > > > } > > > > > > void MImage2::DrawImg(const byte *buffer) > > > { > > > DrawImg24(fImage->data, (char*)buffer, > > > (char*)(buffer+fWidth*fHeight)); > > > } > > > void test() > > > { > > > TCanvas *c=new TCanvas; > > > > > > MImage2 *i = new MImage2(100, 100); > > > > > > byte buf[100*100]; > > > > > > for (int j=0; j<100*100; j++) > > > buf[j]=j; > > > > > > i->DrawImg(buf); > > > i->Draw(); > > > } > > > > > > Thomas,. > > > > > > > > > On Tue, 4 May 2004, > > > Valeri Fine wrote: > > > > > > > > > > > Hello Thomas. > > > > > > > > It is hard to advice without your code and running example. > > > > ( I did not see your source so I am still guessing :-) > > > > > > > > Anyway in your Paint method you may try to do something like this > > > > > > > > void MImage::Paint( . . . ) { > > > > > > > > Window_t fid = gVitualX->GetWindow(gPad->GetPixmaID()); > > > > gVirtualX->PutImage(fid, < . . . other PutImage parameters . . > > . > > > > > ) > > > > > > > > } > > > > If you still need speed you may regard to disable the double > > buffering > > > > to paint the TCanvas screen directly replacing > > > > > > > > gPad->GetPixmapID() > > > > > > > > http://root.cern.ch/root/htmldoc/TPad.html#TPad:GetPixmapID > > > > > > > > with gpad->GetCanvasID(); > > > > > > > > http://root.cern.ch/root/htmldoc/TPad.html#TPad:GetCanvasID > > > > http://root.cern.ch/root/htmldoc/TCanvas.html#TCanvas:GetCanvasID > > > > abd applying > > > > http://root.cern.ch/root/htmldoc/TGX11.html#TGX11:SetDoubleBuffer > > > > method. > > > > > > > > > > > > Hope this helps. > > > > Valeri > > > > > > > > > -----Original Message----- > > > > > From: Thomas Bretz [mailto:Thomas_Bretz@ph.tum.de] > > > > > Sent: Monday, May 03, 2004 10:04 PM > > > > > To: Valeri Fine > > > > > Cc: roottalk@pcroot.cern.ch > > > > > Subject: RE: [ROOT] gVirtualX->PutImage and TCanvas > > > > > > > > > > Hi Valeri, > > > > > > > > > > > Did I understand correctly that you tried to use > > > > > > > > http://root.cern.ch/root/htmldoc/TVirtualX.html#TVirtualX:PutImage > > > > > > method to paint TCanvas ? > > > > > > > > > > Yes, you are right. > > > > > > > > > > > I am afraid this method can not be used to paint TCanvas / TPad > > > > > > To do that you have to provide the "Drawable_t id" for TPad. > > > > > > As soon as I know there is no method to do that. > > > > > > One can get the "Drawable_t" for the parent widget of TCanvas. > > > > > > However it is not the TCanvas itself. > > > > > > > > > > > > With TCanvas the best thing you can do, you can draw the parent > > > > widget > > > > > > using PutImage method, but then ROOT will paint the real and > > empty > > > > > > TCanvas/TPad over. > > > > > > > > > > That exactly seems to be my problem. > > > > > > > > > > > To do what you want you should regard using the TGFrame object > > > > rather > > > > > > TCanvas/TPad. Then you can apply PutImage method to paint it. > > > > > > (see: > > > > > > > > > > > > http://root.cern.ch/root/htmldoc/src/TGColorPick.cxx.html#TGColorPick:Do > > > > > > Redraw > > > > > > for example) > > > > > > > > > > I know. This is exactly where my problem comes from. I have a > > > > > sky-coordinate system grid which is painted using TLine - which > > > > becuase of > > > > > the nice features of TPad is necessary. In a different application > > I > > > > > readout a CCD camera of a sky image and I want to underlay this > > CCD > > > > image > > > > > (768x576x8bit, 25fps) This must be done with less than 1% CPU on a > > > > 1.5GHz > > > > > linux machine. I know that the algorithm (with PutImage) is > > working > > > > very > > > > > fast and well in my TGFrame application, but now I want to have > > both. > > > > The > > > > > nice and fast PutImage and the powerfull class drawing the grid. > > > > > > > > > > > Another way to manage thing is to provide your own > > implementation of > > > > > > TImage abstract ROOT class using the existent TASImage > > > > implementation as > > > > > > a pattern > > > > > > > > > > > > > > > > With the mixed Qt/ROOT env you can just apply the class > > > > > > http://doc.trolltech.com/3.3/qmovie.html to paint the TCanvas > > /TPad > > > > as > > > > > > well. > > > > > > > > > > I have two classes already available which servs for different > > > > > necessarities. I think developing a new class would not make > > sense. > > > > I'm > > > > > just triing to write a simple interface to merge the display of > > both. > > > > > > > > > > Best regards > > > > > Thomas. > > > > > > > > > > > > -----Original Message----- > > > > > > > From: owner-roottalk@pcroot.cern.ch > > > > > > [mailto:owner-roottalk@pcroot.cern.ch] On > > > > > > > Behalf Of Thomas Bretz > > > > > > > Sent: Monday, May 03, 2004 4:36 PM > > > > > > > To: Valeriy Onuchin > > > > > > > Cc: roottalk@pcroot.cern.ch > > > > > > > Subject: Re: [ROOT] gVirtualX->PutImage and TCanvas > > > > > > > > > > > > > > Hi, > > > > > > > sorry, I don't know what happened. I hope this time they are > > > > complete. > > > > > > > Thomas. > > > > > > > On > > > > > > > Mon, 3 May 2004, Valeriy Onuchin wrote: > > > > > > > > Hi Thomas, > > > > > > > > two files in attachment are empty. > > > > > > > > > > > > > > > > Regards. Valeriy > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > > > > From: "Thomas Bretz" <Thomas_Bretz@ph.tum.de> > > > > > > > > To: <roottalk@pcroot.cern.ch> > > > > > > > > Sent: Monday, May 03, 2004 6:45 PM > > > > > > > > Subject: [ROOT] gVirtualX->PutImage and TCanvas > > > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > with the (very simple) attached class I try to display a > > gray > > > > > > scaled > > > > > > > > > bitmap in a canvas. It doesn't work. Can somebody explain > > me, > > > > what > > > > > > I'm > > > > > > > > > doing wrong? > > > > > > > > > > > > > > > > > > (I'm developing this class, because I need a really fast > > > > access to > > > > > > the > > > > > > > > > screen - 25fps - which I think I won't get with the big > > > > overgead > > > > > > of > > > > > > > > > TASImage) > > > > > > > > > > > > > > > > > > Thanks in advance, > > > > > > > > > Thomas. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > ------ > > > > > > > -- > > > > > > > > > > > > > > > > > > > > > > > > > void test() > > > > > > > > > { > > > > > > > > > TCanvas *c=new TCanvas; > > > > > > > > > > > > > > > > > > MImage2 *i = new MImage2(100, 100); > > > > > > > > > > > > > > > > > > byte buf[100*100]; > > > > > > > > > > > > > > > > > > for (int j=0; j<100*100; j++) > > > > > > > > > buf[j]=j; > > > > > > > > > > > > > > > > > > i->DrawImg(buf); > > > > > > > > > i->Draw(); > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > ----- > > > > > > > Würden Sie Windows 95 die Kontrolle eines AKWs überlassen? > > > > > > > Hiroshima '45...! Tschernobyl '86...!! Windows 95...!!! > > > > > > > Unix ist benutzerfreundlich - es ist nur etwas wählerisch..." > > > > (Walter > > > > > > Misar) > > > > > > > Was sagt ein arbeitsloser Physiker zu einem Physiker mit > > Arbeit? > > > > > > > - "Eine Currywurst mit Pommes bitte!" > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ----- > > > > > Würden Sie Windows 95 die Kontrolle eines AKWs überlassen? > > > > > Hiroshima '45...! Tschernobyl '86...!! Windows 95...!!! > > > > > Unix ist benutzerfreundlich - es ist nur etwas wählerisch..." > > (Walter > > > > Misar) > > > > > Was sagt ein arbeitsloser Physiker zu einem Physiker mit Arbeit? > > > > > - "Eine Currywurst mit Pommes bitte!" > > > > > > > > > > > > > > > > > > ----- > > > Würden Sie Windows 95 die Kontrolle eines AKWs überlassen? > > > Hiroshima '45...! Tschernobyl '86...!! Windows 95...!!! > > > Unix ist benutzerfreundlich - es ist nur etwas wählerisch..." (Walter > > Misar) > > > Was sagt ein arbeitsloser Physiker zu einem Physiker mit Arbeit? > > > - "Eine Currywurst mit Pommes bitte!" > > > > > > > > ----- > Würden Sie Windows 95 die Kontrolle eines AKWs überlassen? > Hiroshima '45...! Tschernobyl '86...!! Windows 95...!!! > Unix ist benutzerfreundlich - es ist nur etwas wählerisch..." (Walter Misar) > Was sagt ein arbeitsloser Physiker zu einem Physiker mit Arbeit? > - "Eine Currywurst mit Pommes bitte!"
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET