簡體   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