Crate pix

source ·
Expand description

Library for image conversion and compositing.

A raster image can be cheaply converted to and from raw byte buffers, enabling interoperability with other crates.

Many image formats are supported:

  • Bit depth: 8- or 16-bit integer and 32-bit float
  • Alpha: premultiplied or straight
  • Gamma: linear or sRGB
  • Color models:
    • RGB / BGR (red, green, blue)
    • CMY (cyan, magenta, yellow)
    • Gray (luma / relative luminance)
    • HSV (hue, saturation, value)
    • HSL (hue, saturation, lightness)
    • HWB (hue, whiteness, blackness)
    • YCbCr (used by JPEG)
    • Matte (alpha only)
    • Oklab (lightness, green/red, blue/yellow)
    • XYZ (CIE 1931 XYZ)

Compositing with blending operations is supported for premultiplied images with linear gamma.

HWB Color Example

use pix::hwb::SHwb8;
use pix::rgb::SRgb8;
use pix::Raster;

let mut r = Raster::with_clear(256, 256);
for (y, row) in r.rows_mut(()).enumerate() {
    for (x, p) in row.iter_mut().enumerate() {
        let h = ((x + y) >> 1) as u8;
        let w = y.saturating_sub(x) as u8;
        let b = x.saturating_sub(y) as u8;
        *p = SHwb8::new(h, w, b);
// Convert to SRgb8 pixel format
let raster = Raster::<SRgb8>::with_raster(&r);



  • BGR color model and types.
  • Component channels
  • CMY color model and types.
  • Module for pix::el items
  • Gray color model and types.
  • HSL color model and types.
  • HSV color model and types.
  • HWB color model and types.
  • Matte color model and types.
  • Oklab color model and types.
  • Compositing and blending operations.
  • RGB color model and types.
  • CIE 1931 XYZ color model and types.
  • YCbCr color model and types.


  • Color table for use with indexed Rasters.
  • Image arranged as a rectangular array of pixels. Rows are ordered top to bottom, and pixels within rows are left to right.
  • Location / dimensions of pixels relative to a Raster.
  • Iterator of rows in a raster, as slices of pixels.
  • Iterator of rows in a raster, as mutable slices of pixels.