use {
crate::display::image::source::ImageData,
color_eyre::eyre::{Context, Result},
icy_sixel::EncodeOptions,
};
pub struct SixelEncoder {
options: EncodeOptions,
}
impl SixelEncoder {
pub fn new() -> Self {
Self {
options: EncodeOptions::default(),
}
}
pub fn with_options(options: EncodeOptions) -> Self {
Self { options }
}
pub fn set_options(&mut self, options: EncodeOptions) {
self.options = options;
}
pub fn encode(&self, data: &ImageData) -> Result<String> {
icy_sixel::sixel_encode(&data.rgb_data, data.width, data.height, &self.options)
.context("Failed to encode sixel")
.map(|s| s.to_string())
}
pub fn encode_raw(&self, rgb_data: &[u8], width: usize, height: usize) -> Result<String> {
icy_sixel::sixel_encode(rgb_data, width, height, &self.options)
.context("Failed to encode sixel")
.map(|s| s.to_string())
}
}
impl Default for SixelEncoder {
fn default() -> Self {
Self::new()
}
}