Skip to content
Snippets Groups Projects
image.rs 978 B
Newer Older
Finn Bear's avatar
Finn Bear committed
/// Embed an image in the binary and load it at runtime.
Finn Bear's avatar
Finn Bear committed
#[macro_export]
macro_rules! img {
    ($name: literal) => {{
        crate::image::load_image_from_memory(include_bytes!(concat!(
            env!("CARGO_MANIFEST_DIR"),
            "/src/image/",
            $name
        )))
        .expect($name)
    }};
}

Finn Bear's avatar
Finn Bear committed
/// Embed an image in the binary and load it into the [`Context`] at runtime.
Finn Bear's avatar
Finn Bear committed
#[macro_export]
macro_rules! ctx_img {
    ($ctx: expr, $name: literal) => {{
        $ctx.load_texture($name, img!($name))
    }};
}

Finn Bear's avatar
Finn Bear committed
/// Decodes image data.
Finn Bear's avatar
Finn Bear committed
pub fn load_image_from_memory(
    image_data: &[u8],
) -> Result<eframe::egui::ColorImage, image::ImageError> {
    let image = image::load_from_memory(image_data)?;
    let size = [image.width() as _, image.height() as _];
    let image_buffer = image.to_rgba8();
    let pixels = image_buffer.as_flat_samples();
    Ok(eframe::egui::ColorImage::from_rgba_unmultiplied(
        size,
        pixels.as_slice(),
    ))
}