commit ca67bb8ed2747277f31442cb3aebb73db4a68f17 Author: Thomas Lindner Date: Thu Dec 28 01:34:23 2023 +0100 initial implementation diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..395c813 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,85 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "fdeflate" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209098dd6dfc4445aa6111f0e98653ac323eaa4dfd212c9ca3931bf9955c31bd" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "pixlers" +version = "0.1.0" +dependencies = [ + "png", +] + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c9e4404 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "pixlers" +version = "0.1.0" +edition = "2021" + +[dependencies] +png = "0.17" diff --git a/nopslide.png b/nopslide.png new file mode 100644 index 0000000..cb11ba9 Binary files /dev/null and b/nopslide.png differ diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..9153bcf --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +use png::{ColorType, Decoder}; +use std::error::Error; +use std::fs::File; +use std::io::{BufWriter, Write}; +use std::net::TcpStream; + +fn main() -> Result<(), Box> { + let decoder = Decoder::new(File::open("nopslide.png")?); + let mut reader = decoder.read_info()?; + let mut buf = vec![0; reader.output_buffer_size()]; + let info = reader.next_frame(&mut buf)?; + + let mut stream = BufWriter::new(TcpStream::connect("151.217.15.79:1337")?); + loop { + for x in 0..info.width { + for y in 0..info.height { + match info.color_type { + ColorType::GrayscaleAlpha => { + let offset = ((x + y * info.width) * 2) as usize; + if buf[offset + 1] != 0 { + write!( + stream, + "PX {} {} {:02x}{:02x}{:02x}\n", + x + 1920 - info.width, + y + 900 - info.height, + buf[offset], + buf[offset], + buf[offset] + )?; + } + } + _ => todo!("Unsupported color type"), + } + } + } + } +}