Expand description
Image representations for ffi.
§Usage
Imagine you want to offer a very simple ffi interface: The caller provides an image buffer and
your program creates a thumbnail from it and dumps that image as png. This module is designed
to help you transition from raw memory data to Rust representation.
use std::ptr;
use std::slice;
use image::Rgb;
use image::flat::{FlatSamples, SampleLayout};
use image::imageops::thumbnail;
#[no_mangle]
pub extern "C" fn store_rgb8_compressed(
    data: *const u8, len: usize,
    layout: *const SampleLayout
)
    -> bool
{
    let samples = unsafe { slice::from_raw_parts(data, len) };
    let layout = unsafe { ptr::read(layout) };
    let buffer = FlatSamples {
        samples,
        layout,
        color_hint: None,
    };
    let view = match buffer.as_view::<Rgb<u8>>() {
        Err(_) => return false, // Invalid layout.
        Ok(view) => view,
    };
    thumbnail(&view, 64, 64)
        .save("output.png")
        .map(|_| true)
        .unwrap_or_else(|_| false)
}Structs§
- FlatSamples 
- A flat buffer over a (multi channel) image.
- SampleLayout 
- A ffi compatible description of a sample buffer.
- View
- A flat buffer that can be used as an image view.
- ViewMut
- A mutable owning version of a flat buffer.
Enums§
- Error
- Denotes invalid flat sample buffers when trying to convert to stricter types.
- NormalForm 
- Different normal forms of buffers.