gpt4 book ai didi

C、开罗 : render stream of RGB images

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:36 26 4
gpt4 key购买 nike

我想在 GTK 窗口中显示原始 RGB 图像流(固定大小,没有 alpha channel ,< 60fps)。我 was told在这里使用 cairo。

我的代码可以很好地处理单个图像,并且仍然可以处理大约 1 FPS 的图像流。超过 2 FPS,我的应用程序因 Xorg 错误而崩溃,所以我认为我的 cairo 机制是错误的。

看起来像这样:

unsigned char    *image_data;
cairo_surface_t *image;
GtkWidget *main_window;

void init_window()
{
// (...) all the GTK initialization stuff

image_data = malloc(IMAGE_BYTES);
image = cairo_image_surface_create_for_data(image_data,
CAIRO_FORMAT_RGB24,
IMAGE_W, IMAGE_H,
cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, IMAGE_W));
}

void update_image()
{
cairo_t *cr;

cr = gdk_cairo_create(main_window->window);
cairo_set_source_surface(cr, image, 10, 10);
cairo_paint(cr);

cairo_destroy(cr);
}

int main()
{
// (...)
init_window();

while ((image_data = receive_image()) != NULL)
update_image();
}

在 cairo 中渲染一系列图像的正确方法是什么?哪些结构应该重用,哪些必须重新创建?

最佳答案

这可能是不相关的,但是您在 main 中更新图像的方式不正确。你在哪里调用 gtk_main ?此外,为了响应相机提供的新图像,生成曝光事件以更新您的窗口。

顺便说一句,看起来您是直接在主窗口中绘图,恕我直言,这不是最好的做法。在主窗口中添加一个 GtkDrawingArea,并在其中绘制以响应 expose-event 信号(如果您使用的是 GTK2)或 draw 信号(如果使用 GTK3)。

您还可以使用 GSource 像处理事件源一样处理传入的图像.

关于C、开罗 : render stream of RGB images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8912959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com