1

Cairo コンテキストを使用して動作するペイント関数を取得しました。最終結果は GtkImage になるはずです (中間イメージ作成なし)。gdk_cairo_create 関数を使用しようとしましたが、このコード:

...
GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 22, 22);
GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf);
GdkDrawable *drawable = image->window;
cairo_t *ctx = gdk_cairo_create (drawable);
my_cairo_paint_function (ctx);
...

次のエラーで失敗します:

Gdk-CRITICAL **: IA__gdk_cairo_create: アサーション `GDK_IS_DRAWABLE (drawable)' が失敗しました

単純なものと同じ:

#include <gtk/gtk.h>
#include <cairo.h>

int
main (int argc, char *argv[])
{
  gtk_init(&argc, &argv);
  cairo_t *ctx = gdk_cairo_create (gtk_widget_get_window (gtk_image_new_from_file ("foobar.png")));
  gtk_main();
  return 0;
}

これが失敗する理由がわかりません。どんな助けでも大歓迎です!

4

1 に答える 1

2

GtkImageには がないGdkWindowため、 への呼び出しgtk_widget_get_window()またはアクセスは をwidget->window返しますNULL。を入れてGtkImageGtkEventBoxイベントボックスの に絵を描くことができますGdkWindow

gdk_pixbuf_newただし、(を使用して)描画するための空のスペースを作成しようとしているようです。その場合、GtkImageは必要なウィジェットではありません - を使用してGtkDrawingAreaください。そして、シグナルのハンドラーでペイント関数を呼び出すことを忘れないでくださいevent-expose!

于 2010-12-23T22:11:39.633 に答える