pub struct Mosaic {
pub master: Master,
pub tiles: Vec<RgbImage>,
pub grid_size: (u32, u32),
}Fields§
§master: MasterThe Master image to reconstruct.
tiles: Vec<RgbImage>The tile images to use to reconstruct the Master image. The tile images should be the
same size as the Master::cell_size. There should also be at least Master::cells.len()
tiles.
grid_size: (u32, u32)The number of cells horizontally and vertically in the mosaic.
Implementations§
Source§impl Mosaic
Represents a photo mosaic.
impl Mosaic
Represents a photo mosaic.
Sourcepub fn from_file_and_dir<P: AsRef<Path>, Q: AsRef<Path>>(
master_file: P,
tile_dir: Q,
grid_size: (u32, u32),
) -> Result<Self, PhomoError>
pub fn from_file_and_dir<P: AsRef<Path>, Q: AsRef<Path>>( master_file: P, tile_dir: Q, grid_size: (u32, u32), ) -> Result<Self, PhomoError>
Construct a Mosaic from a master image file and a directory of tile images.
§Arguments
master_file: The path to the master image file.tile_dir: The path to the directory containing the tile images.grid_size: The grid size of the mosaic, the number of cells horizontally and vertically.
§Errors
PhomoError::ImageError: An error occurred while reading the master image.PhomoError::MasterError: An error occurred constructing theMasterfrom the master image.PhomoError::IoError: An error occurred while reading the tile images.
Sourcepub fn from_images(
master_img: RgbImage,
tiles: Vec<RgbImage>,
grid_size: (u32, u32),
) -> Result<Self, PhomoError>
pub fn from_images( master_img: RgbImage, tiles: Vec<RgbImage>, grid_size: (u32, u32), ) -> Result<Self, PhomoError>
Construct a Mosaic from RgbImage buffers of the master images and the tile
images.
§Arguments
master_img: The master image buffer.tiles: The tile image buffers.grid_size: The grid size of the mosaic, the number of cells horizontally and vertically.max_tile_occurrences: The maximum number of times a tile can be repeated in the mosaic. Should be greater than 0.
§Errors
PhomoError::MasterError: An error occurred while constructing theMaster.PhomoError::MosaicError: An error occurred while constructing theMosaic.
Sourcepub fn new(
master: Master,
tiles: Vec<RgbImage>,
grid_size: (u32, u32),
) -> Result<Self, PhomoError>
pub fn new( master: Master, tiles: Vec<RgbImage>, grid_size: (u32, u32), ) -> Result<Self, PhomoError>
Sourcepub fn distance_matrix(&self) -> DistanceMatrix
pub fn distance_matrix(&self) -> DistanceMatrix
Compute the DistanceMatrix between the tiles and the master cells, using the
norm_l1 metric.
To use a different distance metric, use the distance_matrix_with_metric method.
The row index is the cell index and the column index is the tile index.
Sourcepub fn distance_matrix_with_metric(
&self,
metric: fn(&RgbImage, &RgbImage) -> i64,
) -> DistanceMatrix
pub fn distance_matrix_with_metric( &self, metric: fn(&RgbImage, &RgbImage) -> i64, ) -> DistanceMatrix
Compute the DistanceMatrix between the tiles and the master cells using the provided
metric function. See phomo::metrics for implemented distance metrics.
The row index is the cell index and the column index is the tile index.
Sourcepub fn render(&self, assignments: Vec<usize>) -> Result<RgbImage, PhomoError>
pub fn render(&self, assignments: Vec<usize>) -> Result<RgbImage, PhomoError>
Render the photo mosaic image using the provided tile assignments.
§Arguments
assignments: The tile index assigned to each master cell. The length of the assignments should be equal to the number of master cells. The tile index should be less than the number of tiles.
§Errors
PhomoError::MosaicError: An error occurred while rendering the mosaic.PhomoError::ImageError: An error occurred while copying the tiles to the mosaic image.
Sourcepub fn build(
&self,
distance_matrix: DistanceMatrix,
config: SolverConfig,
) -> Result<RgbImage, PhomoError>
pub fn build( &self, distance_matrix: DistanceMatrix, config: SolverConfig, ) -> Result<RgbImage, PhomoError>
Compute the tile to master cell assignments using the Hungarian solver
algorithm, and build the photo mosaic image.
§Errors
PhomoError::MosaicError: An error occurred while building the mosaic.PhomoError::SolverError: An error occurred while solving the tile to cell assignments.
Sourcepub fn build_with_solver<S: Solve>(
&self,
distance_matrix: DistanceMatrix,
solver: S,
) -> Result<RgbImage, PhomoError>
pub fn build_with_solver<S: Solve>( &self, distance_matrix: DistanceMatrix, solver: S, ) -> Result<RgbImage, PhomoError>
Compute the tile to master cell assignments using the provided solver algorithm, and build
the photo mosaic image. See phomo::solvers for implemented solvers.
§Arguments
distance_matrix: The distance matrix between the master image and the tiles.solver: The solver algorithm to use for the assignment problem.
§Errors
PhomoError::MosaicError: An error occurred while building the mosaic.PhomoError::SolverError: An error occurred while solving the tile to cell assignments.
Source§impl Mosaic
impl Mosaic
Sourcepub fn build_blueprint(
&self,
distance_matrix: DistanceMatrix,
config: SolverConfig,
) -> Result<Blueprint, PhomoError>
Available on crate feature blueprint only.
pub fn build_blueprint( &self, distance_matrix: DistanceMatrix, config: SolverConfig, ) -> Result<Blueprint, PhomoError>
blueprint only.Compute the tile to master cell assignments, and construct a Blueprint of the mosaic
image.
§Errors
PhomoError::MosaicError: An error occurred while building the mosaic blueprint.PhomoError::SolverError: An error occurred while solving the tile to cell assignments.
Sourcepub fn build_blueprint_with_solver<S: Solve>(
&self,
distance_matrix: DistanceMatrix,
solver: S,
) -> Result<Blueprint, PhomoError>
Available on crate feature blueprint only.
pub fn build_blueprint_with_solver<S: Solve>( &self, distance_matrix: DistanceMatrix, solver: S, ) -> Result<Blueprint, PhomoError>
blueprint only.Compute the tile to master cell assignments using the provided solver algorithm, and
construct a Blueprint of the mosaic image. See phomo::solvers for
implemented solvers.
§Arguments:
distance_matrix: The distance matrix between the master image and the tiles.solver: The solver algorithm to use for the assignment problem.
§Errors
PhomoError::MosaicError: An error occurred while building the mosaic.PhomoError::SolverError: An error occurred while solving the tile to cell assignments.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Mosaic
impl RefUnwindSafe for Mosaic
impl Send for Mosaic
impl Sync for Mosaic
impl Unpin for Mosaic
impl UnwindSafe for Mosaic
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more