繁体   English   中英

Rust 中的 FLTK:调整图像及其框架的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM