use crate::{
error::PdfResult, filter::flate::BitsPerComponent, function::Function, objects::Dictionary,
Resolve,
};
use super::freeform::BitsPerCoordinate;
#[derive(Debug)]
pub struct LatticeformShading {
bits_per_coordinate: BitsPerCoordinate,
bits_per_component: BitsPerComponent,
vertices_per_row: u32,
decode: Vec<f32>,
function: Option<Function>,
}
impl LatticeformShading {
pub fn from_dict(dict: &mut Dictionary, resolver: &mut dyn Resolve) -> PdfResult<Self> {
let bits_per_coordinate =
BitsPerCoordinate::from_integer(dict.expect_integer("BitsPerCoordinate", resolver)?)?;
let bits_per_component =
BitsPerComponent::from_integer(dict.expect_integer("BitsPerComponent", resolver)?)?;
let vertices_per_row = dict.expect_unsigned_integer("BitsPerFlag", resolver)?;
let decode = dict
.expect_arr("Decode", resolver)?
.into_iter()
.map(|obj| resolver.assert_number(obj))
.collect::<PdfResult<Vec<f32>>>()?;
let function = dict.get_function("Function", resolver)?;
Ok(Self {
bits_per_coordinate,
bits_per_component,
vertices_per_row,
decode,
function,
})
}
}