c - SDL_Surface 进入 GTK 窗口

标签 c image-processing gtk sdl

我目前正在我的 IT 学校做一个项目,我使用 SDL(该项目是图像处理和类似的东西),目前我只是用没有界面(按钮等...)的 SDL 显示图像。我对 GTK 了解一点所以我想知道我是否可以将图像(这里是 SDL_Surface)显示到 GTK 窗口中 我做了一些研究,但没有什么很清楚...... 谢谢!

最佳答案

使用 SDL 绘制小部件

使用 SDL 绘图功能绘制小部件(菜单、按钮等)并通过跟踪事件发生期间的光标位置来处理操作(事件执行时光标位于哪个项目上)。 这变得非常复杂,最好使用带有一些简单技巧的现有 GUI 库。您可以找到绘制按钮的代码示例 here .

将 SDL 表面复制到目标 GUI 小部件

这涉及将 sdl 表面的逐个像素复制(预定义函数可能可用于执行相同的操作,gdk_draw_rgb_image 在 gtk 的情况下)到目标 gui 小部件(在 GTK 的情况下可以是 drawingArea ).

将 SDL 窗口合并到 GUI 小部件中

在 X11 和 win32 系统中,每个窗口都有一个窗口 ID,默认情况下,sdl 和 gtk 会有单独的窗口 ID,从而产生两个不同的窗口,我们可以利用 SDL_CreateWindowFrom 函数为 sdl 使用单个窗口和 gtk,我们将在其中强制两个库使用单个窗口 ID。 你可以找到类似的问题here .

GTK 插头和 socket

Plug 和 Socket 可以将小部件从一个进程嵌入到另一个进程。 GTK 将创建一个套接字并将套接字 ID 传递给 SDL,SDL 将从该套接字 ID 创建窗口。

事件循环处理: 将 SDL 与 GTK 合并后,您可能会发现 gtk 和 sdl 有自己的事件循环,因此处理事件可能与预期不同。要解决该问题,您可以处理 GTK 中的事件并使用 SDL_PushEvent 函数将事件传播到 SDL,反之亦然,以防您使用用户定义的事件。

.
.
static SDL_Event SDLevent;
switch(event->keyval)
{
    case GDK_KEY_m:
       SDLevent.type = SDL_KEYUP;
       SDLevent.key.keysym.sym = SDLK_m;
       SDL_PushEvent(&SDLevent);
       break;
       .
       .
       .

link对上述方法有很好的解释。

关于c - SDL_Surface 进入 GTK 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579967/

相关文章:

c - 我熟悉 Ruby/DL,但不确定如何使用具有返回参数指针的 C 函数调用

python - 在 OpenCV 中实现 Photoshop 高通滤波器 (HPF)

opencv - 如何使用 OpenCV 和 C++ 裁剪网络摄像头画面

image-processing - iOS 8 核心图像通过 Swift 保存图像的一部分

GO-GTK 树莓派交叉编译

c - 在 C 程序中重新声明为不同类型的符号

c - Linux block 设备驱动程序请求排序 - RaW?

c - GtkNoteBook 信号处理问题

C - fgets() - 换行符的长度

python - 在 python 和 Glade 中使用复选框