use ranga::blend::{BlendMode, blend_pixel};
use ranga::pixel::{PixelBuffer, PixelFormat};
fn main() {
let w = 4u32;
let h = 4u32;
let pixel_count = (w * h) as usize;
let red_data: Vec<u8> = (0..pixel_count).flat_map(|_| [255, 0, 0, 255]).collect();
let red_buf = PixelBuffer::new(red_data, w, h, PixelFormat::Rgba8).unwrap();
let blue_data: Vec<u8> = (0..pixel_count).flat_map(|_| [0, 0, 255, 255]).collect();
let blue_buf = PixelBuffer::new(blue_data, w, h, PixelFormat::Rgba8).unwrap();
let opacity: u8 = 192; let mut result_data = Vec::with_capacity(pixel_count * 4);
for i in 0..pixel_count {
let si = i * 4;
let src = [
red_buf.data()[si],
red_buf.data()[si + 1],
red_buf.data()[si + 2],
red_buf.data()[si + 3],
];
let dst = [
blue_buf.data()[si],
blue_buf.data()[si + 1],
blue_buf.data()[si + 2],
blue_buf.data()[si + 3],
];
let blended = blend_pixel(src, dst, BlendMode::Normal, opacity);
result_data.extend_from_slice(&blended);
}
println!("Blended red over blue at ~75% opacity (Normal mode):");
for (i, pixel) in result_data.chunks_exact(4).enumerate().take(4) {
println!(
" pixel[{i}]: R={} G={} B={} A={}",
pixel[0], pixel[1], pixel[2], pixel[3]
);
}
}