# Ingris Image Decoder/Encoder

Image Bibliothek für mein Retro Game Projekt Yinera.
Ingris (de)komprimiert Bilddaten schnell und mit minimalem oberhead.
Die Komprimierung der Daten erfolgt über [miniz_oxide](https://crates.io/crates/miniz_oxide/0.8.4)

# Speichermethode

Ingris Dateien enthalten keine Palette und somit keine Farbinformationen. Es werden nur Index-Informationen gespeichert.
Diese müssen seperat bereitgestellt werden um die Bilder anzeigen zu können.
Der Vorteil hierbei ist, dass nicht unnötig Platz verschwendet wird, wenn jedes Bild seine eigene Palette mitbringt.
Die Index-Daten können wahlweise als 4 oder 8 bit gespeichert werden, wobei im 4bit Modus durch die geteilten bytes nochmals mehr Größe eingespart wird.

# Verwendung

```rust
use ingris::{Ingris, Image, FILE_VERSION};

// erstellen
const IMAGE: &[u8] = &[0, 0, 1, 2,  6, 6, 4, 5,  8, 8, 2, 15,  2, 29, 30, 31];

let image = Image::new(FILE_VERSION, 4, 4, IMAGE.into());
assert_eq!(image.bit_depth(), 8); // Das image hat indizes > 0x0F und somit mehr als 4bit

// schreiben
let path = Path::new("my-image.ing");
Ingris::write(path, &image).unwrap();

// lesen
let image = Ingris::read(path).unwrap();

// Weitere Verwendungsmöglichkeiten z.B. als Opengl Textur
use gl::*
TexImage2D(TEXTURE_2D, 0, R8 as i32,
	image.width as i32,
	image.height as i32,
	0, RED, UNSIGNED_BYTE,
	image.bytes().as_ptr() as *const _,
);
```