Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/maciektalaska/tinyppm

tiny Rust library for loading .ppm files
https://github.com/maciektalaska/tinyppm

image library ppm-format ppm-image rust rust-lang rust-language

Last synced: 3 months ago
JSON representation

tiny Rust library for loading .ppm files

Awesome Lists containing this project

README

        

tinyppm
=======

Simple .ppm loader written in Rust.

This is more of a toy project, I have written, to be able to easy reuse it for some of my experiments with 2d graphics in Rust.

Usage
-----

**v.0.20.0 Note:** This version introduces proper error handling. Earlier `tinyppm` was a bit of pain as it exited when something unexpected happened (unrecognized header, unsupported color depth, non-existing/unreadable file specified...).
Currently `tinyppm` returns an error in case some problem occurs. It is responsibility of the consumer to decide if this is critical or not, and take appropriate action.

**Note:** the above change will require some slight modification of code that relies on `tinyppm 0.1.x`.

1. Add `tinyppm` to your `Cargo.toml`
2. Call `read_image_data`:

```rust
extern crate tinyppm;

fn my_function(filename: &String) {
let ppm_image_result = tinyppm::ppm_loader::read_image_data(filename);
let ppm_image = match ppm_image_result {
Ok(image) => image,
_ => panic!("unable to read specified image file!"),
};
// `ppm_image` is now a struct containing image with, height and pixels
}

```

The structure returned is defined as follows:

```rust
pub struct PPMImage {
height: usize,
width: usize,
pixels: Vec,
}
```
and it exposes 3 public methods:

```rust
pub fn height() -> usize {
// returns image height
}

pub fn width() -> usize {
// returns image width
}

pub fn pixels() -> &Vec {
// returns reference to buffer containing pixels
}
```

Details:
--------

- only 'raw ppm' format is supported (the most popular format of ppm. More details: [ppm format specification][ppm] ).

- `tinyppm` supports only True Color images (i.e. 24bits per pixel - 3 color channels & 8 bits per channel). After the image is read it is converted to RGB+A format (32bpp) so that it is ready to be pushed directly to framebuffer.

[ppm]: http://netpbm.sourceforge.net/doc/ppm.html

Additional examples:
--------------------

If you want to check how it works, please have a look at `ppm_viewer` which is simple image viewer written in Rust: https://github.com/MaciekTalaska/2d_effects/tree/master/ppm_viewer

License
-------
This code is released under the MIT license.