aboutsummaryrefslogtreecommitdiff
path: root/texture-decoder/src/main.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2023-09-17 02:22:54 +0300
committerValentin Popov <valentin@popov.link>2023-09-17 02:22:54 +0300
commita34bd81290b5070801033c1b2c013ebafc34cefa (patch)
treef89971bb89f6d6d1dd85993c85e93ca60dd35662 /texture-decoder/src/main.rs
parent0c095125de8840d09cc825dfc241b3e4d3617335 (diff)
downloadfparkan-a34bd81290b5070801033c1b2c013ebafc34cefa.tar.xz
fparkan-a34bd81290b5070801033c1b2c013ebafc34cefa.zip
Первая версия декоратора текстур
Diffstat (limited to 'texture-decoder/src/main.rs')
-rw-r--r--texture-decoder/src/main.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/texture-decoder/src/main.rs b/texture-decoder/src/main.rs
new file mode 100644
index 0000000..d12d71a
--- /dev/null
+++ b/texture-decoder/src/main.rs
@@ -0,0 +1,41 @@
+use std::io::Read;
+
+use byteorder::ReadBytesExt;
+use image::Rgba;
+
+fn decode_texture(file_path: &str, output_path: &str) -> Result<(), std::io::Error> {
+ // Читаем файл
+ let mut file = std::fs::File::open(file_path)?;
+ let mut buffer: Vec<u8> = Vec::new();
+ file.read_to_end(&mut buffer)?;
+
+ // Декодируем метаданные
+ let mut cursor = std::io::Cursor::new(&buffer[4..]);
+ let img_width = cursor.read_u32::<byteorder::LittleEndian>()?;
+ let img_height = cursor.read_u32::<byteorder::LittleEndian>()?;
+
+ // Пропустить оставшиеся байты метаданных
+ cursor.set_position(20);
+
+ // Извлекаем данные изображения
+ let image_data = buffer[cursor.position() as usize..].to_vec();
+ let img =
+ image::ImageBuffer::<Rgba<u8>, _>::from_raw(img_width, img_height, image_data.to_vec())
+ .expect("Failed to decode image");
+
+ // Сохраняем изображение
+ img.save(output_path).unwrap();
+
+ Ok(())
+}
+
+fn main() {
+ let args: Vec<String> = std::env::args().collect();
+
+ let input = &args[1];
+ let output = &args[2];
+
+ if let Err(err) = decode_texture(&input, &output) {
+ eprintln!("Error: {}", err)
+ }
+}