【发布时间】:2012-02-13 08:08:19
【问题描述】:
我想在 GTK 窗口中显示原始 RGB 图像流(固定大小,无 Alpha 通道,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 中渲染一系列图像的正确方法是什么? 哪些结构应该重复使用,哪些必须重新创建?
【问题讨论】:
-
提示:这已经为 UVC 摄像头完成了:github.com/ufo-kit/libuca,以防万一您正在处理相机。