#image #palette #indexed #encode #decode #image-processing

ingris

A lightweight image processing library for small indexed images

2 releases

new 0.1.1 Feb 21, 2025
0.1.0 Feb 21, 2025

#317 in Images

35 downloads per month

MIT/Apache

15KB
307 lines

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

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

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 _,
);

Dependencies

~240KB