gdk_pixbuf_scale() with GDK_INTERP_NEAREST crashes?
- From: Angelo Cano <acano systec com>
- To: gtk-app-devel-list gnome org
- Cc: rings etang com
- Subject: gdk_pixbuf_scale() with GDK_INTERP_NEAREST crashes?
- Date: Sat, 28 Oct 2000 06:45:34 -0500
In the following program, GDK_INTERP_(TILES | BILINEAR | HYPER)
seem to work fine when used with gdk_pixbuf_scale(), but
if GdkInterpType is GDK_INTERP_NEAREST the program crashes :(
Am I doing something wrong?
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
GdkPixbuf *original_pixbuf;
GdkPixbuf *scaled_pixbuf;
GtkWidget *drawing_area;
gint original_width, original_height;
gboolean pixbuf_has_alpha;
gint zoom_in_and_out_of_image (gpointer data)
{
static double scale = 1.0;
static gboolean zoom_in = TRUE;
gint new_width, new_height;
if (zoom_in == TRUE)
scale += 0.1;
else
scale -= 0.1;
if (scale >= 1.5)
zoom_in = FALSE;
if (scale <= 0.5)
zoom_in = TRUE;
gdk_pixbuf_scale (original_pixbuf,
scaled_pixbuf,
0, 0,
original_width, original_height,
0, 0,
scale, scale,
//GDK_INTERP_NEAREST); // <--- this crashes app???
//GDK_INTERP_TILES);
//GDK_INTERP_BILINEAR);
GDK_INTERP_HYPER);
new_width = MIN (original_width, (original_width * scale));
new_height = MIN (original_height, (original_height * scale));
gdk_window_clear (drawing_area->window);
if (pixbuf_has_alpha) {
gdk_pixbuf_render_to_drawable_alpha (scaled_pixbuf,
drawing_area->window,
0, 0,
0, 0,
new_width, new_height,
GDK_PIXBUF_ALPHA_FULL,
0,
GDK_RGB_DITHER_NORMAL,
0, 0);
}
else {
gdk_pixbuf_render_to_drawable (scaled_pixbuf,
drawing_area->window,
drawing_area->style->black_gc,
0, 0,
0, 0,
new_width, new_height,
GDK_RGB_DITHER_NORMAL,
0, 0);
}
return TRUE;
}
int main (int argc, char *argv[])
{
GtkWidget *window;
gchar *filename;
gtk_init (&argc, &argv);
gdk_rgb_init ();
if (argc != 2) {
g_print ("usage: %s <image file>\n", argv[0]);
exit (1);
}
filename = argv[1];
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
drawing_area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (window), drawing_area);
original_pixbuf = gdk_pixbuf_new_from_file (filename);
scaled_pixbuf = gdk_pixbuf_copy (original_pixbuf);
pixbuf_has_alpha = gdk_pixbuf_get_has_alpha (original_pixbuf);
original_width = gdk_pixbuf_get_width (original_pixbuf);
original_height = gdk_pixbuf_get_height (original_pixbuf);
gtk_widget_set_usize (window, original_width, original_height);
gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area),
original_width,
original_height);
gtk_widget_show_all (window);
gtk_timeout_add (500, zoom_in_and_out_of_image, NULL);
gtk_main ();
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]