首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gtk-rs中的cairo::Context上渲染图像

如何在gtk-rs中的cairo::Context上渲染图像
EN

Stack Overflow用户
提问于 2017-01-12 18:06:55
回答 1查看 746关注 0票数 3

我尝试在gtk-rs中的DrawingArea上渲染一个图像(gif/png)。我可以用Pixbuf读取图像文件

代码语言:javascript
复制
Pixbuf::new_from_file("/path/to/img.gif")

但是我找不到一种将Pixbuf呈现为cairo::Context的方法。我注意到gdk::prelude::ContextExtset_source_pixbuf()

https://docs.rs/crate/gdk/0.1.4/source/src/cairo_interaction.rs

所以我试着用这个:

代码语言:javascript
复制
extern crate gdk;
use gdk::prelude::*;

..。

代码语言:javascript
复制
drawingArea.connect_draw(move |widget, context| {
    context.set_source_pixbuf(&ws.pix, 0f64, 0f64);
    context.stroke();
    return Inhibit(false);
});

但不会渲染任何内容。ContextExt似乎未实现(它似乎为gdk_cairo_set_source_pixbuf的第二个参数指定了null )?

代码语言:javascript
复制
fn set_source_pixbuf(&self, pixbuf: &Pixbuf, x: f64, y: f64) {
    unsafe {
        ffi::gdk_cairo_set_source_pixbuf(self.to_glib_none().0, pixbuf.to_glib_none().0, x, y);
    }
}

有没有其他方法可以在DrawingArea上渲染图像?

EN

回答 1

Stack Overflow用户

发布于 2017-01-13 09:35:15

我需要使用Context.paint()而不是Context.stroke()

代码语言:javascript
复制
context.set_source_pixbuf(&ws.pix, 0f64, 0f64);
context.paint();  // need to call paint() instead of stroke().
return Inhibit(false);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41610274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档