#image #decoder #format #encoding #pixmap #xpm

ez-pixmap

A naive and easy inline pixmap (xpm-like) image decoder

5 releases

0.2.2 Feb 27, 2021
0.2.1 Feb 26, 2021
0.1.3 Feb 24, 2021

#602 in Images

MIT license

36KB
127 lines

ez-pixmap

A naive and easy inline pixmap (xpm-like) image decoder. This is non-compliant with the xpm image format, however it's close enough.

  • Doesn't support monochrome nor symbolics.
  • Supports only 1 character per pixel.

Main use case: Simple icon art.

Usage

[dependencies]
ez-pixmap = "0.2"
extern crate ez_pixmap;

const PXM: &[&str] = &[
    "50 34 4 1", // <width> <height> <num of colors> <chars/pixels>
    "  c black", // <char> c <color>
    "o c #ff9900",
    "@ c white",
    "# c None", 
    // pixels
    "##################################################",
    "###      ##############################       ####",
    "### ooooo  ###########################  ooooo ####",
    "### oo  oo  #########################  oo  oo ####",
    "### oo   oo  #######################  oo   oo ####",
    "### oo    oo  #####################  oo    oo ####",
    "### oo     oo  ###################  oo     oo ####",
    "### oo      oo                     oo      oo ####",
    "### oo       oo  ooooooooooooooo  oo       oo ####",
    "### oo        ooooooooooooooooooooo        oo ####",
    "### oo     ooooooooooooooooooooooooooo    ooo ####",
    "#### oo   ooooooo ooooooooooooo ooooooo   oo #####",
    "####  oo oooooooo ooooooooooooo oooooooo oo  #####",
    "##### oo oooooooo ooooooooooooo oooooooo oo ######",
    "#####  o ooooooooooooooooooooooooooooooo o  ######",
    "###### ooooooooooooooooooooooooooooooooooo #######",
    "##### ooooooooo     ooooooooo     ooooooooo ######",
    "##### oooooooo  @@@  ooooooo  @@@  oooooooo ######",
    "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
    "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
    "##### oooooooo  @@@  ooooooo  @@@  oooooooo ######",
    "##### ooooooooo     ooooooooo     ooooooooo ######",
    "###### oooooooooooooo       oooooooooooooo #######",
    "###### oooooooo@@@@@@@     @@@@@@@oooooooo #######",
    "###### ooooooo@@@@@@@@@   @@@@@@@@@ooooooo #######",
    "####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########",
    "######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########",
    "########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########",
    "########### @@@@@@@     @     @@@@@@@ ############",
    "############  @@@@@@@@@@@@@@@@@@@@@  #############",
    "##############  @@@@@@@@@@@@@@@@@  ###############",
    "################    @@@@@@@@@    #################",
    "####################         #####################",
    "##################################################",
];

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let my_image = ez_pixmap::RgbaImage::from(PXM)?;
    assert_eq!(my_image.width(), 50);
    assert_eq!(my_image.height(), 34);
    assert_eq!(my_image.data().len(), 50 * 34 * 4); // since it's rgba
    Ok(())
}

The list of supported color names can be found here.

Examples

Check the examples directory for an example usage with the minifb and image crates.

$ cargo run --example basic
$ cargo run --example image
$ cargo run --example minifb

alt_test

alt_test

Dependencies

~57KB