Skip to main content

rvlib/
types.rs

1use image::{DynamicImage, ImageBuffer, Rgb, imageops::FilterType};
2
3use rvimage_domain::RvResult;
4
5use crate::tools_data::parameters::ParamMap;
6
7pub type ViewImage = ImageBuffer<Rgb<u8>, Vec<u8>>;
8pub type ResultImage = RvResult<DynamicImage>;
9
10pub type AsyncResultImage = RvResult<Option<ImageInfoPair>>;
11
12pub struct ImageInfoPair {
13    pub im: DynamicImage,
14    pub info: String,
15}
16
17#[derive(Clone, Debug, Default, PartialEq)]
18pub struct ImageMetaPair {
19    pub im: DynamicImage,
20    pub meta: ImageMeta,
21}
22impl ImageMetaPair {
23    fn resize(&self, w_max: u32, h_max: u32, filter_type: FilterType) -> Self {
24        Self {
25            im: self.im.resize(w_max, h_max, filter_type),
26            meta: self.meta.clone(),
27        }
28    }
29}
30
31#[derive(Clone, Debug, Default, PartialEq)]
32pub struct ViewMetaPair {
33    pub im: ViewImage,
34    pub meta: ImageMeta,
35}
36
37#[derive(Clone, Debug, Default, PartialEq)]
38pub struct ThumbIms {
39    pub prev_ims: Vec<ImageMetaPair>,
40    pub im: Option<ImageMetaPair>,
41    pub next_ims: Vec<ImageMetaPair>,
42}
43impl ThumbIms {
44    pub fn new(
45        prev_ims: Vec<ImageMetaPair>,
46        next_ims: Vec<ImageMetaPair>,
47        im: Option<&ImageMetaPair>,
48        w_max: u32,
49        h_max: u32,
50    ) -> Self {
51        ThumbIms {
52            prev_ims: prev_ims
53                .iter()
54                .map(|im| im.resize(w_max, h_max, FilterType::Lanczos3))
55                .collect(),
56            im: im.map(|im| im.resize(w_max, h_max, FilterType::Lanczos3)),
57            next_ims: next_ims
58                .iter()
59                .map(|im| im.resize(w_max, h_max, FilterType::Lanczos3))
60                .collect(),
61        }
62    }
63}
64
65#[derive(Clone, Debug, Default, PartialEq)]
66pub struct ImageMeta {
67    pub file_label: String,
68    pub attrs: Option<ParamMap>,
69}
70
71#[derive(Clone, Debug, Default, PartialEq)]
72pub struct ThumbViews {
73    pub prev_ims: Vec<ViewMetaPair>,
74    pub im: Option<ViewMetaPair>,
75    pub next_ims: Vec<ViewMetaPair>,
76}