// OLE2FRAME binary data → presentation RGBA image. // // Extraction (compound-file walk, OlePres header parse, WMFC → EMF // reassembly) lives in acadrust — `extract_presentation` returns the picture // bytes tagged by kind. This module only decodes them: rasters through the // `image` crate, metafiles through the `gdi` player. use acadrust::entities::{extract_presentation, OlePresentation}; use super::gdi; /// Decode the picture for an OLE2FRAME data blob. Returns RGBA + dimensions. pub fn decode(data: &[u8]) -> Option<(Vec, u32, u32)> { match extract_presentation(data)? { OlePresentation::Raster(bytes) => { let img = image::load_from_memory(&bytes).ok()?; let rgba = img.to_rgba8(); let (w, h) = rgba.dimensions(); if w == 0 || h == 0 { return None; } Some((rgba.into_raw(), w, h)) } OlePresentation::Dib(bytes) => gdi::dib::decode_packed(&bytes), OlePresentation::Emf(bytes) => gdi::render_emf(&bytes), OlePresentation::Wmf(bytes) => gdi::render_wmf(&bytes), } }