[英]FLTK in Rust: Resize image along with its frame
我正在尝试编写一个加载图像的程序,并且当用户调整窗口大小时,图像也会调整大小,就好像它在 CSS 术语中具有“高度:100%”,使用 Rust 语言中的 FLTK。
这就是我写的:
use fltk::{frame::Frame, window, app, prelude::*, image::JpegImage};
fn main() {
let app = app::App::default().with_scheme(app::Scheme::Gtk);
let mut main_win = window::Window::default()
.with_size(800, 600)
.center_screen()
.with_label("PhotoTest");
let mut img_frame = Frame::default().size_of_parent();
let img = JpegImage::load("flower.jpg").unwrap();
img_frame.set_image(Some(img));
img_frame.resize_callback(|s,_,_,_,_| {
s.image().unwrap().scale(s.w(), s.h(), true, true);
s.redraw();
});
main_win.make_resizable(true);
main_win.end();
main_win.show();
app.run().unwrap();
}
但是,图像不会改变。 这也适用于其他操作,如inactive()
,就好像图像根本没有改变一样。 事实上,当在回调中使用println,("Frame - {}, Image - {}". s,w(). s.image().unwrap().w())
时, img_frame
得到一个新的大小,虽然图像的大小保持不变,表明回调正在收到它的调用,但它只是无法应用它。
这些操作在图像移入框架之前一直有效,此时它们将被忽略。 我在做一些很愚蠢的事情吗? 请帮忙。
在添加图像之前先定义回调函数怎么样?
1:要有一个停用的图像,你必须自己创建,例如通过复制你的原始图像然后调用去饱和,或者任何你喜欢的样子。 最后,您使用“deimage()”将其分配给小部件。
2:FLTK 不会自动调整图像大小。 您可以覆盖小部件的“draw()”方法,根据需要复制原始图像并调整其大小,使用“imang()”对其进行设置,然后调用原始图像的“draw()”。
请注意,调整图像大小是 FLTK 中相对昂贵的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.