Skip to content

Commit ea46efd

Browse files
committed
Remove converter.rs and update related modules for refactoring
Delete src/converter.rs and update references in lib.rs, main.rs, and texture.rs to support codebase refactoring. Prepare for new utility structure under src/utils/.
1 parent 7ccd5ba commit ea46efd

File tree

6 files changed

+571
-182
lines changed

6 files changed

+571
-182
lines changed

src/converter.rs

Lines changed: 0 additions & 144 deletions
This file was deleted.

src/lib.rs

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1-
//! Minecraft 皮肤渲染器库
2-
//!
3-
//! 这个库提供了一个完整的 Minecraft 皮肤渲染解决方案,支持:
4-
//! - 加载和渲染 Minecraft 皮肤
5-
//! - 自定义姿势和视角
6-
//! - 多种输出格式
7-
//! - 离屏渲染
8-
//!
9-
//! # 示例
10-
//!
11-
//! ```rust
12-
//! use skinviewer::{Renderer, Character, Camera};
13-
//!
14-
//! let renderer = Renderer::new();
15-
//! let mut character = Character::new();
16-
//! let camera = Camera::new();
17-
//! // character.load_skin...
18-
//! renderer.render_to_image(&character, &camera, "output.png", (800, 600));
19-
//! ```
1+
/*!
2+
Minecraft 皮肤渲染器库
203
4+
这个库提供了一个完整的 Minecraft 皮肤渲染解决方案,支持:
5+
- 加载和渲染 Minecraft 皮肤
6+
- 自定义姿势和视角
7+
- 多种输出格式
8+
- 离屏渲染
9+
10+
# 示例
11+
12+
```rust
13+
use skinviewer::{Renderer, Character, Camera};
14+
15+
let renderer = Renderer::new();
16+
let mut character = Character::new();
17+
let camera = Camera::new();
18+
// character.load_skin...
19+
renderer.render_to_image(&character, &camera, "output.png", (800, 600));
20+
```
21+
*/
22+
23+
pub mod utils;
2124
pub mod camera;
2225
pub mod character;
2326
pub mod constants;

src/main.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use eidolon::{
66
};
77
use std::path::PathBuf;
88

9-
mod converter;
9+
mod utils;
10+
use utils::converter;
1011

1112
/// Minecraft皮肤工具
1213
#[derive(Parser, Debug)]
@@ -145,17 +146,15 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
145146

146147
Ok(())
147148
}
148-
Command::Convert { input, output } => {
149-
match converter::convert_to_double_layer(&input, &output) {
150-
Ok(_) => {
151-
println!("转换成功!双层皮肤已保存到: {:?}", output);
152-
Ok(())
153-
}
154-
Err(e) => {
155-
eprintln!("转换失败: {}", e);
156-
Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, e)))
157-
}
149+
Command::Convert { input, output } => match converter::single2double(&input, &output) {
150+
Ok(_) => {
151+
println!("转换成功!双层皮肤已保存到: {:?}", output);
152+
Ok(())
158153
}
159-
}
154+
Err(e) => {
155+
eprintln!("转换失败: {}", e);
156+
Err(Box::new(std::io::Error::new(std::io::ErrorKind::Other, e)))
157+
}
158+
},
160159
}
161160
}

src/texture.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
66
use glium::backend::glutin::headless::Headless;
77
use glium::texture::{RawImage2d, Texture2d};
8-
use image::ImageFormat;
8+
use image::{DynamicImage, GenericImageView, ImageBuffer, ImageFormat};
99
use std::fs::File;
1010
use std::io::BufReader;
11+
use crate::utils::converter::single2double_image;
1112

1213
/// 纹理结构体
1314
///
@@ -51,21 +52,43 @@ impl Texture {
5152
path: &str,
5253
) -> Result<Self, Box<dyn std::error::Error>> {
5354
println!("Loading texture: {}", path);
54-
5555
// 加载图像
56-
let image = image::load(BufReader::new(File::open(path)?), ImageFormat::Png)?.to_rgba8();
56+
let file = File::open(path)?;
57+
let reader = BufReader::new(file);
58+
let image = image::load(reader, ImageFormat::Png)?.to_rgba8();
59+
match Self::load_texture(display, &DynamicImage::ImageRgba8(image)) {
60+
Ok(texture) => Ok(texture),
61+
Err(e) => Err(e),
62+
}
63+
}
5764

58-
let image_dimensions = image.dimensions();
65+
fn load_texture(
66+
display: &Headless,
67+
image: &DynamicImage,
68+
) -> Result<Texture, Box<dyn std::error::Error>> {
69+
let (width, height) = image.dimensions();
5970
println!(
6071
"Texture dimensions: {}x{}",
61-
image_dimensions.0, image_dimensions.1
72+
width, height
6273
);
6374

75+
// 判断是否为单层皮肤(宽=高×2),如是则转换为双层
76+
let image = if width == height * 2 {
77+
println!("Single-layer skin detected, converting to double-layer...");
78+
match single2double_image(image) {
79+
Ok(img) => img,
80+
Err(e) => return Err(format!("Failed to convert single-layer to double-layer: {}", e).into()),
81+
}
82+
} else {
83+
image.clone()
84+
};
85+
86+
let image_dimensions = image.dimensions();
6487
// 创建 OpenGL 纹理
65-
let image = RawImage2d::from_raw_rgba_reversed(&image.into_raw(), image_dimensions);
88+
let image_rgba = image.to_rgba8();
89+
let image = RawImage2d::from_raw_rgba_reversed(image_rgba.as_raw(), image_dimensions);
6690
let texture = Texture2d::new(display, image)?;
6791
println!("Texture loaded into GPU");
68-
6992
Ok(Texture { texture })
7093
}
7194
}

0 commit comments

Comments
 (0)