Re: A litle problem with RGB images
- From: Daniel Pekelharing <legendstar gmail com>
- To: oldmarti mail bg
- Cc: gtk-app-devel-list gnome org
- Subject: Re: A litle problem with RGB images
- Date: Sun, 15 May 2005 10:32:37 +0200
Hi,
This is not entirely related, but if you are familiar with OpenGL
you could use GtkGLExt (http://gtkglext.sourceforge.net/) to create
a OpenGL drawable context and then display the images using simple
OpenGL textures or something... Just an idea though.
Daniel
On Sun, 2005-05-15 at 10:50 +0300, oldmarti mail bg wrote:
Hi.
In the past, I wrote a program ( in DOS), to display a
signal collected from ADC. I use 2 video pages - 1 is
visible, second is hidden (to draw), and switch they very
fast. The result is very smooth animated graphic. Now i try
to convert my program on Linux. But the picture isn't very
good. The graphic start blinking. Becouse my program is too
large, I write some little example to show my idea:
#include <gtk/gtk.h>
#define WIDTH 300
#define HEIGHT 300
guchar buf[WIDTH * HEIGHT * 3];
gboolean on_expose(GtkWidget *widget, GdkEventExpose *event,
gpointer user_data)
{
gdk_draw_rgb_image (widget->window,
widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, WIDTH, HEIGHT, GDK_RGB_DITHER_NONE,
buf, WIDTH * 3);
return FALSE;
}
/* In real program this function collect data from ADC */
gint timeout_func(gpointer data)
{
int x, y;
gchar *pos;
int size = WIDTH * 3 * (HEIGHT - 1);
memmove(buf,buf + WIDTH * 3, size); /* move image 1
line up */
pos = buf + (HEIGHT-1) * WIDTH * 3; /* last line start
position */
for(x=0;x<WIDTH;x++) /* fill last line with random */
{
y = rand(); /* simulate ADC
reading - only to test */
*pos++ = y;
*pos++ = y;
*pos++ = y;
}
gtk_widget_queue_draw(GTK_WIDGET(data)); /* draw image on
screen */
return TRUE;
}
int main(int argc, char *argv[])
{
guint handler;
GtkWidget *window;
GtkWidget *draw_area;
gtk_init(&argc, &argv);
gdk_rgb_init();
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_push_visual(gdk_rgb_get_visual());
gtk_widget_push_colormap(gdk_rgb_get_cmap());
draw_area = gtk_drawing_area_new();
gtk_widget_pop_visual();
gtk_widget_pop_colormap();
gtk_drawing_area_size( GTK_DRAWING_AREA(draw_area),
WIDTH, HEIGHT);
gtk_container_add(GTK_CONTAINER (window), draw_area);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_exit), NULL);
gtk_signal_connect(GTK_OBJECT(draw_area), "expose-event",
GTK_SIGNAL_FUNC (on_expose), NULL);
gtk_widget_show_all (window);
/* set timeout function - 20 times per second */
handler = g_timeout_add(1000/20, timeout_func, draw_area);
gtk_main();
g_source_remove(handler);
}
Are someone idea what is wrong? My compter is 1Ghz Epia-M
10000 , and I thing - it's enought powerfull. I can see
movies with totem with no problem (no blinking, no loss
frames). Maybe gdk_draw_rbg_image isn't too fast? Or maybe
there is another way to change a big picture on display?
Thanks
-----------------------------
* ÐÐÐÐÐ ÐÐÐÑÑ ÑÐÐÐ, ÐÐÐÑÐ ÐÑÐÐÑÑ ÐÐÑÐ Ð ÐÑÐÐÐÑÐ? (ÐÐÑÐ, ÐÐÐÑÐ ÐÐÐ ÐÐ ÐÐÐÐÑÐ ÐÐ ÐÐÑÑÐÑÐ)
* ÐÐÐ ÐÐÐ-ÐÑÑÐÐ ÐÐ ÐÑÐÐÑÑÐÐÐ ÑÐÐÑÐ ÑÐ Ð ÐÐÑÐÐÐ ÐÐ ÐÐÑÐ? (ÐÐÐÑÐÐÐÑ ÐÐ ÐÐÐÐÑÑÐÐÐÐÐÑ ÑÐÐÑ)
* ÐÐÐÐÐÐÐ: ÐÐÐÐÐÐÐÐÐÐ ÑÑÐÐÑÐÐ ÐÑÑÑ "ÐÑÐÐÐÐ ÐÐ Ð-ÐÐÐÐÐÑÐ"-ÑÐÑÑ 1 ( 21 ÐÐÐ, ÐÑ.ÐÐÑÐÑ, ÐÐÑÐÐÐÑÐÐÐ ÐÐÑÑÐ)
http://lifeconsult.info/?mbg_m
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]