Canvas 漂浮在另一个图像上的图像

Canvas 漂浮在另一个图像上的图像,canvas,gtk,cairo,Canvas,Gtk,Cairo,我希望能够使用Cairo或GTK函数动态地将图像放置在我的应用程序中的另一个图像上。例如,想象一个用户放置鱼类和海洋动物的海洋:它将是这样的 我该怎么做?如果你不知道,但记得任何简单的程序或演示,这将是非常受欢迎的 谢谢大家! 我会使用,对于细节使用杂波示例,它们非常好 编辑: 如果你不能使用杂乱,你可以看看在给定的主页上还有一些简洁的例子,我会使用这些例子,细节使用杂乱的例子,它们非常好 编辑: 如果你不能使用凌乱,你可以看看在给定的主页上也有一些简洁的例子你也可以使用它你也可以使用它你可以使

我希望能够使用Cairo或GTK函数动态地将图像放置在我的应用程序中的另一个图像上。例如,想象一个用户放置鱼类和海洋动物的海洋:它将是这样的

我该怎么做?如果你不知道,但记得任何简单的程序或演示,这将是非常受欢迎的

谢谢大家!

我会使用,对于细节使用杂波示例,它们非常好

编辑:

如果你不能使用杂乱,你可以看看在给定的主页上还有一些简洁的例子,我会使用这些例子,细节使用杂乱的例子,它们非常好

编辑:

如果你不能使用凌乱,你可以看看在给定的主页上也有一些简洁的例子

你也可以使用它

你也可以使用它

你可以使用a,并使用以下方法在上面绘制图像:

例如:

#包括
#包括
开罗海面;
开罗(cairo)水面(t)鱼(fish)水面;;
gboolean on_expose_事件(GtkWidget*小部件、GdkEventExpose*事件、gpointer数据){
//创建cairo实例。
cairo\u t*cr=gdk\u cairo\u create(小部件->窗口);
//绘制海洋背景。
cairo_集_源_面(cr,sea_面,0.0,0.0);
开罗漆(cr);
//画鱼。
cairo_集_源_面(cr、fish_面,50.0、50.0);
开罗漆(cr);
//销毁cairo实例。
开罗大学(cr);
返回FALSE;
}
int main(int argc,char*argv[]){
gtk_init(&argc,&argv);
//加载图像。
sea_surface=cairo_image_surface_create_from_png(“sea.png”);
fish_surface=cairo_image_surface_create_from_png(“fish.png”);
//创建窗口。
GtkWidget*窗口;
窗口=gtk_窗口_新建(gtk_窗口_顶层);
g_信号连接(g_对象(窗口),“销毁”,g_回调(gtk_主退出),NULL);
gtk_窗口设置默认大小(gtk_窗口(窗口),320240);
//创建绘图区域,我们将在其中绘制图像。
GtkWidget*绘图面积=gtk绘图面积新();
g_信号连接(g_对象(绘图区域),“暴露事件”,g_回调(在暴露事件上),NULL);
gtk_容器添加(gtk_容器(窗口),绘图区域);
//显示窗口并启动gtk主循环。
gtk_小部件_全部显示(窗口);
gtk_main();
//清理一下。
开罗(水面)(鱼面);;
开罗(海)面(海);;
返回0;
}
要在linux上编译它,请使用:

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

文件:

示例:


编辑:如果您需要能够从Java执行此操作,您可以使用为GTK和提供绑定的。您可以使用,并使用以下方式在其上绘制图像:

例如:

#包括
#包括
开罗海面;
开罗(cairo)水面(t)鱼(fish)水面;;
gboolean on_expose_事件(GtkWidget*小部件、GdkEventExpose*事件、gpointer数据){
//创建cairo实例。
cairo\u t*cr=gdk\u cairo\u create(小部件->窗口);
//绘制海洋背景。
cairo_集_源_面(cr,sea_面,0.0,0.0);
开罗漆(cr);
//画鱼。
cairo_集_源_面(cr、fish_面,50.0、50.0);
开罗漆(cr);
//销毁cairo实例。
开罗大学(cr);
返回FALSE;
}
int main(int argc,char*argv[]){
gtk_init(&argc,&argv);
//加载图像。
sea_surface=cairo_image_surface_create_from_png(“sea.png”);
fish_surface=cairo_image_surface_create_from_png(“fish.png”);
//创建窗口。
GtkWidget*窗口;
窗口=gtk_窗口_新建(gtk_窗口_顶层);
g_信号连接(g_对象(窗口),“销毁”,g_回调(gtk_主退出),NULL);
gtk_窗口设置默认大小(gtk_窗口(窗口),320240);
//创建绘图区域,我们将在其中绘制图像。
GtkWidget*绘图面积=gtk绘图面积新();
g_信号连接(g_对象(绘图区域),“暴露事件”,g_回调(在暴露事件上),NULL);
gtk_容器添加(gtk_容器(窗口),绘图区域);
//显示窗口并启动gtk主循环。
gtk_小部件_全部显示(窗口);
gtk_main();
//清理一下。
开罗(水面)(鱼面);;
开罗(海)面(海);;
返回0;
}
要在linux上编译它,请使用:

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

文件:

示例:



编辑:如果您需要能够从Java执行此操作,您可以使用它为GTK和提供绑定。

执行此操作的最佳方法是使用类似画布的工具,该工具用于GTK和cairo绘图。但是,目前它只对C++和Python有绑定,所以如果你使用java,你必须找到其他的东西…

最好的方法是使用一个画布,它是用GTK工作的,用开罗绘制。但是,目前它只对C++和Python有绑定,所以如果使用java,你必须找到其他的东西……< /P>杂写是为GTK+写的,或者只是读清楚的部分,在这里清楚地说GTK+嵌入的意思是“纯”GTK,当我使用GTK的Java绑定和Clojure的Java互操作性来编写后一种语言的代码时,现在我看到还有Java绑定到混乱。你知道它们有多完整吗?根据ebassi在#clutter@irc.gnome.org“他们基本上被抛弃了:-/”。感谢您的回答,但我必须用另一种方式来做。Clutter是为Gtk+编写的,或者只是阅读一下关于其中明确表示Gtk+嵌入的部分,我是指“纯”Gtk,因为我使用Gtk的Java绑定和Clojure的Java互操作性来编写后一种语言的代码,但现在我看到有Java绑定到Clutter,也你知道它们有多完整吗?根据ebassi在#clutter@irc.gnome.org“他们基本上被抛弃了:-/”。感谢