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}