riff-ani

Crates.ioriff-ani
lib.rsriff-ani
version0.1.0
sourcesrc
created_at2020-11-18 16:19:14.818474
updated_at2020-11-18 16:19:14.818474
descriptionGenerating the animated mouse cursor files (.ani) for Windows.
homepage
repository
max_upload_size
id313727
size21,922
Balthild (balthild)

documentation

README

riff-ani

Generating the animated mouse cursor files (.ani) for Windows.

Example

use riff_ani::ico::{IconDir, IconDirEntry, IconImage, ResourceType};
use riff_ani::{Ani, AniHeader};

fn main() {
    let frames = vec![
        "./images/1.png",
        "./images/2.png",
        "./images/3.png",
        "./images/4.png",
    ];

    let out = File::create("./output.ani")
        .unwrap_or_else(|_| panic!("cannot create file {}", dest.to_string_lossy()));

    let ani = Ani {
        header: AniHeader {
            num_frames: frames.len() as u32,
            num_steps: frames.len() as u32,
            width: 48,
            height: 48,
            frame_rate: 2,
        },
        frames: frames.iter().map(create_cur).collect(),
    };

    ani.encode(&out)
        .unwrap_or_else(|_| panic!("cannot write file {}", dest.to_string_lossy()));
}

fn create_cur(path: &str) -> IconDir {
    let mut icon_dir = IconDir::new(ResourceType::Cursor);

    let file = std::fs::File::open(path)
        .unwrap_or_else(|_| panic!("cannot open png {}", path));

    let mut image = IconImage::read_png(file)
        .unwrap_or_else(|_| panic!("cannot read png {}", path));

    image.set_cursor_hotspot(Some((8, 8)));

    let entry = IconDirEntry::encode_as_png(&image)
        .unwrap_or_else(|_| panic!("cannot encode png {}", path));

    icon_dir.add_entry(entry);
    icon_dir
}

See also the docs for crate ico.

Commit count: 0

cargo fmt