Finish encode function for now
This commit is contained in:
3 files changed
+52
-3
No files matched your search
@@ -6,6 +6,7 @@ edition = "2024"
|
||||
[dependencies]
|
||||
gtk4 = "0.11.0"
|
||||
image = "0.25.10"
|
||||
tempfile = "3.27.0"
|
||||
|
||||
[package.metadata.bundle]
|
||||
name = "VideoStore"
|
||||
|
||||
+50
-2
@@ -1,5 +1,53 @@
|
||||
use image::{ImageBuffer, Rgb};
|
||||
use std::path::PathBuf;
|
||||
use tempfile::TempDir;
|
||||
|
||||
pub async fn encode(path: PathBuf) {
|
||||
println!("{}", path.display());
|
||||
pub fn encode(path: PathBuf) {
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let temp_path = temp_dir.path();
|
||||
let size = 300;
|
||||
|
||||
let file_data = std::fs::read(&path).unwrap();
|
||||
|
||||
let mut frame_num = 0;
|
||||
let mut byte_index = 0;
|
||||
let mut bit_index = 0;
|
||||
|
||||
loop {
|
||||
let mut img = ImageBuffer::<Rgb<u8>, Vec<u8>>::new(size, size);
|
||||
|
||||
for pixel_idx in 0..(size * size) {
|
||||
let x = (pixel_idx % size) as u32;
|
||||
let y = (pixel_idx / size) as u32;
|
||||
|
||||
if byte_index < file_data.len() {
|
||||
let byte = file_data[byte_index];
|
||||
let bit = (byte >> (7 - bit_index)) & 1;
|
||||
|
||||
let color = if bit == 0 {
|
||||
Rgb([255, 0, 0])
|
||||
} else {
|
||||
Rgb([0, 255, 0])
|
||||
};
|
||||
img.put_pixel(x, y, color);
|
||||
|
||||
bit_index += 1;
|
||||
if bit_index == 8 {
|
||||
bit_index = 0;
|
||||
byte_index += 1;
|
||||
}
|
||||
} else {
|
||||
img.put_pixel(x, y, Rgb([0, 0, 255]));
|
||||
}
|
||||
}
|
||||
|
||||
let frame_path = temp_path.join(format!("frame_{}.png", frame_num));
|
||||
img.save(&frame_path).unwrap();
|
||||
|
||||
frame_num += 1;
|
||||
|
||||
if byte_index >= file_data.len() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -43,7 +43,7 @@ fn main() {
|
||||
move |_| {
|
||||
get_user_selected_file(&window, |file_path| {
|
||||
if let Some(path) = file_path {
|
||||
spawn_future_local(encode(path));
|
||||
encode(path);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user