1

Cairo または GTK 関数を使用して、アプリ内の別の画像の上に画像を動的に配置できるようにしたいと考えています。たとえば、ユーザーが魚や海の動物を配置する海を想像してみてください。

これどうやってするの?それを行う簡単なプログラムやデモを覚えていなくても、それは大歓迎です!

ありがとうございました!

4

4 に答える 4

2

GtkDrawingAreaを使用し、cairoを使用してその上に画像を描画できます。

例:

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

cairo_surface_t * sea_surface;
cairo_surface_t * fish_surface;

gboolean on_expose_event(GtkWidget * widget, GdkEventExpose * event, gpointer data) {
    // Create the cairo instance.
    cairo_t * cr = gdk_cairo_create(widget->window);
    // Draw the sea background.
    cairo_set_source_surface(cr, sea_surface, 0.0, 0.0);
    cairo_paint(cr);
    // Draw the fish.
    cairo_set_source_surface(cr, fish_surface, 50.0, 50.0);
    cairo_paint(cr);
    // Destroy the cairo instance.
    cairo_destroy(cr);
    return FALSE;
}

int main(int argc, char * argv[]) {
    gtk_init(&argc, &argv);

    // Load images.
    sea_surface = cairo_image_surface_create_from_png("sea.png");
    fish_surface = cairo_image_surface_create_from_png("fish.png");

    // Create window.
    GtkWidget * window;
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    gtk_window_set_default_size(GTK_WINDOW(window), 320, 240);  

    // Create drawing area where we're going to draw our images.
    GtkWidget * drawing_area = gtk_drawing_area_new();
    g_signal_connect(G_OBJECT(drawing_area), "expose-event", G_CALLBACK(on_expose_event), NULL);
    gtk_container_add(GTK_CONTAINER(window), drawing_area);

    // Show window and start gtk main loop.
    gtk_widget_show_all(window);
    gtk_main();

    // Clean-up.
    cairo_surface_destroy(fish_surface);
    cairo_surface_destroy(sea_surface);
    return 0;
}

Linux でコンパイルするには:

gcc -Wall -g images.c -o images `pkg-config --cflags --libs gtk+-2.0`

ドキュメンテーション:

例:


編集: Java からこれを実行できるようにする必要がある場合は、GTK とcairoの両方のバインディングを提供するjava-gnomeを使用できます。

于 2011-03-16T14:58:18.720 に答える
1

私はクラッターを使用します、詳細についてはクラッターの例を使用してください、それらはかなりいいです。

編集:

散らかったものを使用できない場合は、カイロをご覧ください。このカイロには、特定のホームページにいくつかの優れた例もあります。

于 2011-03-03T11:47:30.060 に答える
1

Gdk 描画プリミティブでGtkDrawingAreaを使用することもできます

于 2011-03-15T22:09:29.513 に答える
0

これを行う最良の方法は、GTK で動作し、cairo で描画するように作成されたgoocanvasのようなキャンバスを使用することです。ただし、現在は C++ と python のバインディングしかないようです。そのため、Java を使用している場合は、別のものを見つける必要があります...

于 2011-03-18T16:27:16.353 に答える