Crate rawloader [] [src]

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

Example

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

extern crate rawloader;

fn main() {
  let args: Vec<_> = env::args().collect();
  if args.len() != 2 {
    println!("Usage: {} <file>", args[0]);
    std::process::exit(2);
  }
  let file = &args[1];
  let image = rawloader::decode(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();
  f.write_all(&preamble).unwrap();
  for pix in image.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()
  }
}

To do the image decoding decode the image the same way but then do:

// Decode to the largest image that fits in 1080p size. If the original image is
// smaller this will not scale up but otherwise you will get an image that is either
// 1920 pixels wide or 1080 pixels tall and maintains the image ratio.
let decoded = image.to_rgb(1920, 1080).unwrap();

let mut f = BufWriter::new(File::create(format!("{}.ppm",file)).unwrap());
let preamble = format!("P6 {} {} {}\n", decoded.width, decoded.height, 255).into_bytes();
f.write_all(&preamble).unwrap();
for pix in decoded.data {
  let pixel = ((pix.max(0.0)*255.0).min(255.0)) as u8;
  f.write_all(&[pixel]).unwrap();
}

This is useful as a reference output and if all you need is a thumbnail or a preview it will be a decent output that is produced fast (200-300ms for a 500x500 thumbnail of a 24MP image).

Structs

CFA

Representation of the color filter array pattern in raw cameras

RGBImage

A RawImage processed into a full RGB image with levels and gamma

RawImage

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

Functions

decode

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