Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/maciektalaska/tinyppm
- Owner: MaciekTalaska
- Created: 2019-06-02T17:28:57.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-08-29T20:23:24.000Z (over 4 years ago)
- Last Synced: 2024-10-12T13:23:35.706Z (3 months ago)
- Topics: image, library, ppm-format, ppm-image, rust, rust-lang, rust-language
- Language: Rust
- Size: 23.4 KB
- Stars: 1
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
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.