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 = Vec::new(); file.read_to_end(&mut buffer)?; // Декодируем метаданные let mut cursor = std::io::Cursor::new(&buffer[4..]); let img_width = cursor.read_u32::()?; let img_height = cursor.read_u32::()?; // Пропустить оставшиеся байты метаданных cursor.set_position(20); // Извлекаем данные изображения let image_data = buffer[cursor.position() as usize..].to_vec(); let img = image::ImageBuffer::, _>::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 = std::env::args().collect(); let input = &args[1]; let output = &args[2]; if let Err(err) = decode_texture(input, output) { eprintln!("Error: {}", err) } }