Re: GtkImageViewer
- From: Milosz Derezynski <internalerror gmail com>
- To: Dov Grobgeld <dov grobgeld gmail com>
- Cc: "Eduardo J. Andres" <eduardoj andres gmail com>, Gnome List <gtk-list gnome org>
- Subject: Re: GtkImageViewer
- Date: Sun, 12 Apr 2009 22:27:01 +0200
CAIRO_ARGB32 is the right colorspace
On Sun, Apr 12, 2009 at 10:12 AM, Dov Grobgeld
<dov grobgeld gmail com> wrote:
Regarding the gtk-list subscription, see:
http://mail.gnome.org/mailman/listinfo/gtk-list
for details.
About the strange colors, it is most likely that your pixbuf has an alpha channel, which is different from my tutorial example where I hardcoded the assumption that GtkImageViewer always passes a 24-bit pixbuf in the annotate signal. If you use alpha channel, then you should use cairo_image_surface_create_for_data with CAIRO_FORMAT_ARGB32 instead. I'm not sure whether it is enough for to switch R and B in such a case though. Check the documentation or just check if it works.
Regards,
Dov
2009/4/12 Eduardo J. Andres
<eduardoj andres gmail com>
Hello Dov,
Thanks fo the answer.
I am trying to know how to reply you by the gtk-list, but even I have
done my suscription to it, I do not know yet how to do it, therefore, I
write you again to same "gmail". Would you be able to explain me how to reply you there.
I shall look to the giv code, but in the meantime, I have seen that it
is not an issue with your software/widget, it is the same with
GtkImageView, for example. I would like to note you at that point that
I am doing all my testing under XP.
So, if you have a pixbuf on a widget (whatever the widget may be), and
you make a cairo_surfacet_t from that pixbuf, when you draw with cairo
to the surface, you alway lose the color and get a line or arc with
strange effects.
That´s what I would like to know, why??
Best regards
Eduardo
2009/4/12 Dov Grobgeld
<dov grobgeld gmail com>
Hello Eduardo,
Thanks for the feedback.
Regarding the drawing of polygons, I have had the same problem and the solution I made is outside the GtkImageViewer. Please download my program giv at
giv.sf.net and have a look at the the pair of files giv_backstore.[ch] that provide a way of quickly storing all the information under a line and then restoring it. By tieing it to the button press and motion events it is possible to get a rubberband effect with only minimal flicker. (I'm considering a rewrite that eliminates flicker all together). See giv's use of it for details. (I agree it is also worthy of a tutorial. We'll see if I'll get around to it.)
Once you have a fixed line of the polygon, I add it to the lines drawn by the annotate callback, since update time is no longer an issue.
Regarding why your example doesn't work, I don't know, but it might have to do with the fact that you fix the pixbuf format to RGB24 without checking whether your pixbuf has an alpha channel.
Good luck!
Also, next time, please send the questions to the gtk-list. I take the freedom of CC:ing it.
Regards,
Dov
2009/4/10 Eduardo J. Andres
<eduardoj andres gmail com>
Dear Dov
I have been working with the widget during last days and have had not success to get my requirement.
It is to draw with cairo and the mouse poligons and lines as overlay of the image pixbuf. Poligons will have a lot of points so the best aproach I have seen is to draw them on the pixbuf an draw the new pixbuf to the image. But it is so slow doing it on the "image_annotate" handler.
I have seen a number of issues at that point, for example the idea to get the cairo surface from your tutorial
int img_width = gdk_pixbuf_get_width(pixbuf);
int img_height = gdk_pixbuf_get_height(pixbuf);
cairo_surface_t *surface
= cairo_image_surface_create_for_data(gdk_pixbuf_get_pixels(pixbuf),
CAIRO_FORMAT_RGB24,
img_width,
img_height,
gdk_pixbuf_get_rowstride(pixbuf));
cairo_t *cr = cairo_create (surface);
cairo_translate(cr, -shift_x, -shift_y);
cairo_scale(cr, scale_x, scale_y);
// Now do any cairo commands you want, but you have to swap
// R and B in set_source_rgba() commands because of cairo and
// pixbuf incompabilitities.
cairo_set_source_rgba (cr, 0,0,1.0,0.5);
cairo_arc(cr,
-1, 0,
3, 0.0, 2*G_PI);
cairo_fill(cr);
cairo_set_source_rgba (cr, 1.0,0,0,0.5);
only works when you do inside the image annotate. In any other situation, the cairo drawing does not get the color. I have got, for example, the cairo surface from the pixbuf inside the gtk_image_viewer_new() function and draw directly there , but it gets a wrong color. It doesn´t matter the swapping in betweem the R and B colors. On the attached image, the rect line is has been drawn direcly with the code above, inside the the new() function. The symbol, drawnd on the GtkImageViewer->window, inside gtk_image_viever_expose().
Would you be kind to indicate me any sugesstion how to do it.
Thanks
Eduardo
_______________________________________________
gtk-list mailing list
gtk-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-list
--
Please note that according to the German law on data retention,
information on every electronic information exchange with me is
retained for a period of six months.
[Bitte beachten Sie, dass dem Gesetz zur Vorratsdatenspeicherung zufolge
jeder elektronische Kontakt mit mir sechs Monate lang gespeichert wird.]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]