use vips::*;
fn main() -> Result<()> {
let _instance = VipsInstance::new("ops_smoke", false)?;
let pixels = vec![64u8; 64 * 64 * 3];
let img = VipsImage::from_memory(pixels, 64, 64, 3, VipsBandFormat::VIPS_FORMAT_UCHAR)?;
let cropped = img.crop(8, 8, 32, 32)?;
assert_eq!(cropped.size(), (32, 32));
let flipped = cropped.fliphor()?.flipver()?;
assert_eq!(flipped.size(), (32, 32));
let rotated = flipped.rot90()?;
assert_eq!(rotated.size(), (32, 32));
let zoomed = cropped.zoom(2, 2)?;
assert_eq!(zoomed.size(), (64, 64));
let band = cropped.extract_band(0)?;
assert_eq!(band.bands(), 1);
let joined = band.bandjoin2(&band)?;
assert_eq!(joined.bands(), 2);
let with_alpha = cropped.bandjoin_const(&[255.0])?;
assert_eq!(with_alpha.bands(), 4);
let bright = cropped.linear1(1.0, 10.0)?;
let inverted = bright.invert()?;
let avg = inverted.avg()?;
assert!(avg.is_finite());
let blurred = cropped.gaussblur(1.5)?;
assert_eq!(blurred.size(), (32, 32));
let cast = cropped.cast(VipsBandFormat::VIPS_FORMAT_USHORT)?;
assert_eq!(cast.size(), (32, 32));
let embedded = cropped.embed(4, 4, 40, 40, Some(VipsExtend::VIPS_EXTEND_WHITE))?;
assert_eq!(embedded.size(), (40, 40));
let point = cropped.getpoint(0, 0)?;
assert_eq!(point.len(), 3);
let jpg = cropped.write_to_buffer(".jpg")?;
assert!(!jpg.is_empty());
let png = cropped.write_to_buffer(".png")?;
assert!(!png.is_empty());
let file_thumb = VipsImage::thumbnail_file(
"./examples/images/kodim01.png",
32,
32,
VipsSize::VIPS_SIZE_BOTH,
)?;
assert!(file_thumb.width() > 0 && file_thumb.width() <= 32);
let buf_thumb = VipsImage::thumbnail_buffer(&png, 16, 16, VipsSize::VIPS_SIZE_BOTH)?;
assert!(buf_thumb.width() > 0 && buf_thumb.width() <= 16);
let via_trait = png.as_slice().thumbnail(16, 16, VipsSize::VIPS_SIZE_BOTH)?;
assert_eq!(via_trait.size(), buf_thumb.size());
let loader = find_load("./examples/images/kodim01.png");
assert!(loader.is_some());
let mask = cropped.less(200.0)?;
assert_eq!(mask.size(), (32, 32));
let selected = mask
.bandand()?
.ifthenelse(&cropped, &cropped.linear1(0.5, 0.0)?)?;
assert_eq!(selected.size(), (32, 32));
let floored = cropped.floor()?.ceil()?.rint()?;
assert_eq!(floored.size(), (32, 32));
let med = cropped.median(3)?;
assert_eq!(med.size(), (32, 32));
let edges = cropped.sobel()?;
assert_eq!(edges.size(), (32, 32));
let black_img = black(8, 8)?;
assert_eq!(black_img.size(), (8, 8));
let coord = xyz(4, 4)?;
assert_eq!(coord.bands(), 2);
let split = cropped.bandsplit()?;
assert_eq!(split.len(), 3);
let d = cropped.deviate()?;
assert!(d.is_finite());
let tiled = cropped.replicate(2, 2)?;
assert_eq!(tiled.size(), (64, 64));
let wrapped = tiled.wrap()?;
assert_eq!(wrapped.size(), (64, 64));
let gamma = cropped.gamma(None)?;
assert_eq!(gamma.size(), (32, 32));
let hist = band.hist_find()?;
assert!(hist.bands() >= 1);
let grey_img = grey(8, 8)?;
assert_eq!(grey_img.size(), (8, 8));
println!(
"ops ok: crop={:?} avg={avg:.3} deviate={d:.3} loader={loader:?} jpg={} png={}",
cropped.size(),
jpg.len(),
png.len()
);
Ok(())
}