Expand description

Library to extract the raw data and some metadata from digital camera images. Given an image in a supported format and camera you will be able to get everything needed to process the image


use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::io::BufWriter;

fn main() {
  let args: Vec<_> = env::args().collect();
  if args.len() != 2 {
    println!("Usage: {} <file>", args[0]);
  let file = &args[1];
  let image = rawloader::decode_file(file).unwrap();

  // Write out the image as a grayscale PPM
  let mut f = BufWriter::new(File::create(format!("{}.ppm",file)).unwrap());
  let preamble = format!("P6 {} {} {}\n", image.width, image.height, 65535).into_bytes();
  if let rawloader::RawImageData::Integer(data) = image.data {
    for pix in data {
      // Do an extremely crude "demosaic" by setting R=G=B
      let pixhigh = (pix>>8) as u8;
      let pixlow  = (pix&0x0f) as u8;
      f.write_all(&[pixhigh, pixlow, pixhigh, pixlow, pixhigh, pixlow]).unwrap()
  } else {
    eprintln!("Don't know how to process non-integer raw files");


Representation of the color filter array pattern in raw cameras

All the data needed to process this raw image, including the image data itself as well as all the needed metadata

Error type for any reason for the decode to fail


Possible orientations of an image

The actual image data, after decoding


Take a readable source and return a decoded image or an error

Take a path to a raw file and return a decoded image or an error