[gtk-list] Re: An image viewer on the Gnome::Canvas in perl
- From: dov imagic weizmann ac il
- To: gtk-list redhat com
- CC: etienne isr ist utl pt
- Subject: [gtk-list] Re: An image viewer on the Gnome::Canvas in perl
- Date: Sun, 23 Jan 2000 22:46:00 IST
In his letter Etienne Grossman wrote:
># I wrote the following image viewer with the perl Gnome::Canvas module.
> A first question : What version of Gtk-Perl are you using? I have
>0.6.123, but I cannot do "use Gnome" with it (don't know why, never
>tried it before). I tried 0.7.000 this morning, but then I could not
>do "use Gtk::Gdk::ImlibImage". In fact, the test of Gtk::Gdk::-
>ImlibImage functionality provided with Gtk-Perl fails too, and
>couldn't put it to work (didn't try very hard).
Indeed I used Gtk 0.7000 which is the first that supports images on
the canvas (thanks Lupus!). Note that the Gtk library has a somewhat
unusual installation. You first do perl Makefile.PL; make; make install
in the top directory and then cd to GdkImlib and Gnome respectively
and redo the installation. This is described in the INSTALL file.
># In terms of functionality everything except scrolling works quite well.
># The main work of this pseudo widget is done in the sub view_changed()
># that does the following series of calls:
># $sim = $img->crop_and_clone($x0,$y0,$cw,$ch);
># $sim2 = $sim->clone_scaled_image($sw, $sh);
># $img is the original imlib image
># $x0, $y0 Are the coordinates in the orig image beeing zoomed in.
># $cw, $ch Are the width and the height of the area beeing zoomed in.
># $sw, $sh are the scaled width and height.
># Thus there is a lot of work being done for every scrolling and scaling
> I have a small image display program, using Gtk-Perl
> (no Gnome). Scrolling is not slow at all (maybe it has to
> do with image size (512x768 is ok) and/or machine (PII/350).
> Zooming is ok too, but I only zoom on limited areas (selected
> with crop_and_clone_image()), and once I have zoomed, I can't
> scroll out of the zoomed area.
I'm trying to do something more memory saving, and that is *not* to
precompute the whole zoomed up image, but instead calculate it by
cropping and scaling as the image is moved with the mouse. For my applications
(contourization) I often need to zoom in up to 32 times so you can see the
individual pixels really big. For a reasonably sized (e.g. 256x256) the
memory to store a whole zoomed up image is prohibitive. That is why I
need to go through the contortions outlined above. In contrast to you
I don't have any problem zooming out as I never touch the original image,
but always cut out a piece, and then zoom the cut out piece. The reason
I want to use the canvas is that I want to draw different kinds of
annotations on top of the image. E.g. countours, or the result of
some feature detection. The canvas is really nice for this, but I need
some kind of interactive environment for zooming, panning etc. (Btw,
since it is easy to create an Imlib image from a piddle it should
provide a nice environment for viewing images within PDL).
> # I would also be very thankful if someone could make this pseudo widget
> # into a real widget, or at least point me to documentation of how to
> # do this in perl.
> What do you mean by "real widget" ? (I have Havoc Pennington's
> book around, but I didn't get at it seriously). One possibility is to
> do a "class" (perl package) for an "image viewer" object which you can
> then add to GtkBox'es. Would you like to have a look at my code (which
> does this, in perl)? Warning : I am not sure if I did things right
> (but, in perl, there's more than one way to do it, of course).
What I would like to do is to do a proper subclassing of the canvas
widget so that I can use get and set to extract parameters from the
widget. Currently in my code, I e.g. don't have a way of calling
zoom_reset() except through a callback function.
> I hope I can get "use Gnome" to work, so I can try your app.
So do I. 8-)
] [Thread Prev