【发布时间】:2018-03-04 22:00:55
【问题描述】:
大家好,来自 Stackoverflow,我有一些编程知识,但不是很多。我的想法是用 c 编写视频游戏或可视化器之类的东西,为此我制作并处理了一个表示图像的数组,它必须被可视化并始终被刷新,就像视频游戏一样。我已经完成了算法,我需要对其进行优化,我的意思是我知道如何随时创建表示图像的数组,我现在需要的是像动画一样可视化它,然后使用 opencl 进行优化。
我要制作的程序必须执行以下操作:
“创建图像”
“渲染它”,
“创建图像”
“渲染它”,
...
出于这个原因,我知道我可以从一个非常简单的示例轻松开始,而不必学习 GTK 的所有内容。我一直在努力寻找简单的例子并试图理解它是如何工作的,但它没有帮助,我只需要做那个简单的动作,刷新它。某处的命令应该足够了。
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <glib.h>
const int Width = 1200, Height = 800;
char *buffer;
int i = 0;
GdkPixbuf *pixbuf;
GtkWidget *window;
GtkWidget* image;
void delay(int number_of_seconds){
int milli_seconds = 1000 * number_of_seconds;
clock_t start_time = clock();
while (clock() < start_time + milli_seconds);
}
int main (int argc, char *argv[]){
buffer = (char*)malloc(3 * Width * Height);
// CREATE AN IMAGE IN BUFFER SOMEHOW
// buffer = something;
//
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
pixbuf = gdk_pixbuf_new_from_data (buffer, GDK_COLORSPACE_RGB, FALSE, 8, Width, Height, (Width)*3, NULL, NULL);
image = gtk_image_new_from_pixbuf (pixbuf);
gtk_container_add(GTK_CONTAINER (window), image);
gtk_window_set_title (GTK_WINDOW (window), "Visualizador");
gtk_widget_show_all (window);
delay(0.04);
gtk_main ();
free (buffer);
return 0;
}
该程序非常简单,当我在那里创建/加载图像时,它会显示一张图片,但我想把已经编程的函数放在那里,返回一个“缓冲区”,然后刷新显示的图像。
我读到gtk_widget_queue_draw 有事要做,或者gdk_pixbuf_simple_anim_add_frame 或g_timeout_add 但我不知道它们是如何工作的以及在这个程序中放什么。
提前谢谢!
【问题讨论】: