From 3778703f08c59bd7c600a010a10181718b8b6e46 Mon Sep 17 00:00:00 2001 From: p6nj Date: Mon, 24 Jun 2024 10:27:09 +0200 Subject: [PATCH] trying things, things don't work --- bent-funny-zone/Cargo.toml | 1 + bent-funny-zone/src/main.rs | 43 +++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/bent-funny-zone/Cargo.toml b/bent-funny-zone/Cargo.toml index 5ee5e55..6a70bfb 100644 --- a/bent-funny-zone/Cargo.toml +++ b/bent-funny-zone/Cargo.toml @@ -13,4 +13,5 @@ keywords.workspace = true [dependencies] anyhow = "1.0.86" bmp = "0.5.0" +dasp_sample = "0.11.0" synfx-dsp = "0.5.6" diff --git a/bent-funny-zone/src/main.rs b/bent-funny-zone/src/main.rs index c6b16b7..3660f2c 100644 --- a/bent-funny-zone/src/main.rs +++ b/bent-funny-zone/src/main.rs @@ -1,10 +1,49 @@ use std::fs::File; use anyhow::Result; -use bmp::open; +use bmp::{open, Pixel}; +use dasp_sample::{FromSample, Sample, ToSample, U24}; fn main() -> Result<()> { - let bmp = open("bmp/sample.bmp")?; + dbg!((45 << 16) + (18 << 8) + 143); + let mut bmp = open("bmp/sample.bmp")?; + for y in 0..bmp.get_height() { + for x in 0..bmp.get_width() { + if x > 100 && x < 300 { + bmp.set_pixel(x, y, Pixel::new(0, 0, 0)); + } + } + } bmp.to_writer(&mut File::create("bmp/out.bmp")?)?; Ok(()) } + +fn rgb_to_sample>(pix: Pixel) -> T { + U24::new(((pix.r as i32) << 16) + ((pix.g as i32) << 8) + (pix.b as i32)) + .unwrap() + .to_sample() +} + +fn sample_to_rgb>(sample: T) -> Pixel { + let rgb: U24 = sample.to_sample(); + let rg = rgb >> 8.try_into().unwrap(); + let r = rg >> 8.try_into().unwrap(); + Pixel::new( + r.inner() as u8, + (rg - r).inner() as u8, + (rgb - rg).inner() as u8, + ) +} + +#[cfg(test)] +mod tests { + use bmp::Pixel; + + use super::{rgb_to_sample, sample_to_rgb}; + + #[test] + fn rgb2s2rgb() { + let pix = Pixel::new(45, 18, 143); + assert_eq!(pix, sample_to_rgb(rgb_to_sample::(pix))); + } +}