rvimage 0.8.3

A remote image viewer with a labeling tool
Documentation
use image::{DynamicImage, ImageBuffer, Rgb, imageops::FilterType};

use rvimage_domain::RvResult;

use crate::parameters::ParamMap;

pub type ViewImage = ImageBuffer<Rgb<u8>, Vec<u8>>;
pub type ResultImage = RvResult<DynamicImage>;

pub type AsyncResultImage = RvResult<Option<ImageInfoPair>>;

pub struct ImageInfoPair {
    pub im: DynamicImage,
    pub info: String,
}

#[derive(Clone, Debug, Default, PartialEq)]
pub struct ImageMetaPair {
    pub im: DynamicImage,
    pub meta: ImageMeta,
}
impl ImageMetaPair {
    fn resize(&self, w_max: u32, h_max: u32, filter_type: FilterType) -> Self {
        Self {
            im: self.im.resize(w_max, h_max, filter_type),
            meta: self.meta.clone(),
        }
    }
}

#[derive(Clone, Debug, Default, PartialEq)]
pub struct ViewMetaPair {
    pub im: ViewImage,
    pub meta: ImageMeta,
}

#[derive(Clone, Debug, Default, PartialEq)]
pub struct ThumbIms {
    pub prev_ims: Vec<ImageMetaPair>,
    pub im: Option<ImageMetaPair>,
    pub next_ims: Vec<ImageMetaPair>,
}
impl ThumbIms {
    pub fn new(
        prev_ims: Vec<ImageMetaPair>,
        next_ims: Vec<ImageMetaPair>,
        im: Option<&ImageMetaPair>,
        w_max: u32,
        h_max: u32,
    ) -> Self {
        ThumbIms {
            prev_ims: prev_ims
                .iter()
                .map(|im| im.resize(w_max, h_max, FilterType::Lanczos3))
                .collect(),
            im: im.map(|im| im.resize(w_max, h_max, FilterType::Lanczos3)),
            next_ims: next_ims
                .iter()
                .map(|im| im.resize(w_max, h_max, FilterType::Lanczos3))
                .collect(),
        }
    }
}

#[derive(Clone, Debug, Default, PartialEq)]
pub struct ImageMeta {
    pub file_label: String,
    pub attrs: Option<ParamMap>,
}

#[derive(Clone, Debug, Default, PartialEq)]
pub struct ThumbViews {
    pub prev_ims: Vec<ViewMetaPair>,
    pub im: Option<ViewMetaPair>,
    pub next_ims: Vec<ViewMetaPair>,
}