C语言GTK编程:使用Cairo绘制波形图
C语言GTK编程:使用Cairo绘制波形图
本教程将演示如何使用C语言、GTK+图形工具包和Cairo图形库创建一个简单的应用程序,该应用程序可以绘制一个简单的波形图。
1. 代码示例
以下是完整的代码示例:c#include <cairo.h>#include <gtk/gtk.h>#include <math.h>
static gboolean on_draw(GtkWidget *widget, cairo_t *cr, gpointer user_data) { gint width, height; gtk_window_get_size(GTK_WINDOW(widget), &width, &height);
// 设置背景颜色为黑色 cairo_set_source_rgb(cr, 0, 0, 0); cairo_paint(cr);
// 设置线条颜色为白色,线条宽度为2 cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_line_width(cr, 2);
// 绘制波形图 cairo_move_to(cr, 0, height / 2); for (int x = 0; x < width; x++) { double y = height / 4.0 * (1 + sin(x / 20.0)); cairo_line_to(cr, x, height / 2 - y); } cairo_stroke(cr);
return FALSE;}
int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *drawing_area;
gtk_init(&argc, &argv);
// 创建主窗口 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), '波形图'); gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); g_signal_connect(window, 'destroy', G_CALLBACK(gtk_main_quit), NULL);
// 创建绘图区域 drawing_area = gtk_drawing_area_new(); gtk_container_add(GTK_CONTAINER(window), drawing_area); g_signal_connect(G_OBJECT(drawing_area), 'draw', G_CALLBACK(on_draw), NULL);
// 显示窗口和所有子组件 gtk_widget_show_all(window); gtk_main();
return 0;}
2. 代码说明
- 头文件: 代码中包含了
cairo.h、gtk/gtk.h和math.h头文件,分别用于 Cairo 绘图、GTK+ 窗口管理和数学函数。- on_draw 函数: - 此函数在需要重绘窗口时被调用。 - 它首先获取窗口的宽度和高度。 - 然后使用 Cairo 函数设置背景颜色、线条颜色和线条宽度。 - 接下来,使用循环计算并绘制波形图的每个点。 - 最后,调用cairo_stroke函数将绘制的线条显示在窗口上。- main 函数: - 初始化 GTK+ 库。 - 创建主窗口并设置其标题和默认大小。 - 创建绘图区域并将on_draw函数连接到 'draw' 信号,以便在需要重绘时调用on_draw函数。 - 显示窗口和所有子组件。 - 进入 GTK+ 主循环,等待事件发生。
3. 编译和运行
保存代码为 waveform.c,然后使用以下命令编译:bashgcc pkg-config --cflags --libs gtk+-3.0 waveform.c -o waveform -lm
运行程序:bash./waveform
这将打开一个窗口,其中显示一个简单的波形图。
4. 总结
本教程介绍了如何使用C语言、GTK+和Cairo库创建简单的波形图应用程序。您可以根据自己的需求修改此代码,例如更改波形图的颜色、线条样式、频率和振幅等。
原文地址: https://www.cveoy.top/t/topic/bQXU 著作权归作者所有。请勿转载和采集!