added color to img

This commit is contained in:
Mwa
2026-03-25 09:42:23 +01:00
parent 3525db5299
commit b664538923

View File

@@ -1,3 +1,4 @@
use image::GenericImageView;
use regex::Regex; use regex::Regex;
use std::{borrow::Cow, env::args, process::exit}; use std::{borrow::Cow, env::args, process::exit};
@@ -14,9 +15,10 @@ fn main() {
} }
} }
}; };
let (data, name, width, height) = path_to_img(path.as_str()); let (data, name, width, height, color) = path_to_img(path.as_str());
println!("{name}:"); println!("{name}:");
if !nosize { if !nosize {
println!(" D 0x{:08x}", color);
println!(" D {width}"); println!(" D {width}");
println!(" D {height}"); println!(" D {height}");
} }
@@ -29,9 +31,9 @@ fn remove_non_alphanumeric(input: &str) -> Cow<'_, str> {
re.replace_all(input, "") re.replace_all(input, "")
} }
fn path_to_img(path: &str) -> (Vec<u32>, String, u32, u32) { fn path_to_img(path: &str) -> (Vec<u32>, String, u32, u32, u32) {
let img = match image::open(path) { let (base_img, img) = match image::open(path) {
Ok(img) => img.to_luma8(), Ok(img) => (img.clone(), img.to_luma8()),
Err(e) => panic!("failed to open image {path}: {e}"), Err(e) => panic!("failed to open image {path}: {e}"),
}; };
@@ -41,11 +43,16 @@ fn path_to_img(path: &str) -> (Vec<u32>, String, u32, u32) {
let mut bytes = Vec::new(); let mut bytes = Vec::new();
let mut bit = 0; let mut bit = 0;
let mut byte = 0; let mut byte = 0;
let mut color = None;
for y in 0..height { for y in 0..height {
for x in 0..width { for x in 0..width {
let pix = img.get_pixel(x, y)[0]; let pix = img.get_pixel(x, y)[0];
if pix >= 127 { if pix >= 5 {
byte |= 1 << bit byte |= 1 << bit;
if color == None {
color = Some(base_img.get_pixel(x, y));
}
} }
bit += 1; bit += 1;
if bit == 32 { if bit == 32 {
@@ -64,5 +71,12 @@ fn path_to_img(path: &str) -> (Vec<u32>, String, u32, u32) {
"picture_{}", "picture_{}",
remove_non_alphanumeric(&split[0..split.len() - 1].join("_")).to_lowercase() remove_non_alphanumeric(&split[0..split.len() - 1].join("_")).to_lowercase()
); );
(bytes, name, width, height) let color = color.map_or(0, |c| {
let mut r = 0;
r |= (c[0] as u32) << 24;
r |= (c[1] as u32) << 16;
r |= (c[2] as u32) << 8;
r
});
(bytes, name, width, height, color)
} }