riff-ani

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

Example

```rust use riffani::ico::{IconDir, IconDirEntry, IconImage, ResourceType}; use riffani::{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 createcur(path: &str) -> IconDir { let mut icondir = 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.