gpt4 book ai didi

image - 用镜头更换德鲁伊图像小部件

转载 作者:行者123 更新时间:2023-12-03 11:38:39 25 4
gpt4 key购买 nike

我一直在为最新的项目使用druid,我真的很喜欢模型的简单性。但是,我正在努力将镜头与图像配合使用,但不幸的是,文档中没有包含图像功能的文档。
我当时正在考虑编写自己的镜头,但我不想在解锁后克隆大量数据。我正在使用github依赖路径,因此无论它们当前在使用什么版本。

#[derive(Clone, Default, Lens)]
pub struct State {
pub display_image: Option<Arc<RwLock<ImageBuf>>>,
...
}


...
let image = ViewSwitcher::new(
|data: &State, _env| data.display_image.is_some(),
move |f, data: &State, _env| {
if *f {
Box::new(
//if I don't use Arc<RwLock<?>> here, the compiler complains that Imgbuf doesn't impl Data
//The initial image is shown, but when Imgbuf changes, the widget is not updated
//I would imagine this has to do with it being an Arc<RwLock<?>>, but I'm not sure how to make druid and rust happy at the same time
//Is there a wrapper widget available to give me the option of using a closure to update instead of a lens? Like how Label::dynamic(|data, env|) works?
Image::new(data.display_image.as_ref().unwrap().read().unwrap().clone())
.lens(State::display_image),
)
} else {
//Placeholder svg. Completely static. Works well!
Box::new(Svg::new(svg).fill_mode(FillStrat::Fill))
}
},
);
...
重要链接:
  • Druid github repo
  • Druid docs.rs page
  • Druid book lens chapter
  • 最佳答案

    我使用painter widget“修复”了此问题,缺点是我必须自己处理纵横比并调整大小。我喜欢一个使用Image小部件的答案,因为源代码说它可以处理大小和宽高比。

    let image = ViewSwitcher::new(
    |data: &State, _env| data.base_state.is_some() || !data.wrapper_state.is_empty(),
    move |f, _data: &State, _env| {
    if *f {
    Box::new(Painter::new(|ctx, data: &State, _env| {
    if data.is_changed() {
    let rect = ctx.size().to_rect();
    let img = ImageBuf::from_dynamic_image(
    data.display_image.as_ref().unwrap().read().unwrap().clone(),
    );
    let img = img.to_piet_image(ctx.render_ctx);
    ctx.with_save(|ctx| {
    ctx.draw_image(&img, rect, piet::InterpolationMode::Bilinear);
    });
    data.set_changed(false);
    }
    }))
    } else {
    Box::new(Svg::new(svg.clone()).fill_mode(FillStrat::Fill))
    }
    },
    );

    关于image - 用镜头更换德鲁伊图像小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65138254/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com