Compare commits

..

2 commits

Author SHA1 Message Date
0acf6bac7b
oops, didnt update readme/cargo 2023-10-11 17:41:32 -07:00
aadf5602f1
improve rendering speeds 100 fold /srs 2023-10-11 17:40:33 -07:00
5 changed files with 13 additions and 17 deletions

2
Cargo.lock generated
View file

@ -192,7 +192,7 @@ dependencies = [
[[package]] [[package]]
name = "gd-icon-renderer" name = "gd-icon-renderer"
version = "1.0.2" version = "1.1.0"
dependencies = [ dependencies = [
"image", "image",
"imageproc", "imageproc",

View file

@ -1,7 +1,7 @@
[package] [package]
name = "gd-icon-renderer" name = "gd-icon-renderer"
description = "A tool to render Geometry Dash icons." description = "A tool to render Geometry Dash icons."
version = "1.0.2" version = "1.1.0"
edition = "2021" edition = "2021"
license-file = "LICENSE" license-file = "LICENSE"
repository = "https://git.reidlab.online/reidlab/gd-icon-renderer" repository = "https://git.reidlab.online/reidlab/gd-icon-renderer"

View file

@ -42,7 +42,5 @@ Provide your `GJ_GameSheet02-uhd`, `GJ_GameSheetGlow-uhd`, `Robot_AnimDesc2`, an
## Todo ## Todo
- Add examples to the repo. - Add examples to the repo.
- Swap to a custom `plist` parser. Current one is kinda slow.
- Stop the fucking cloning. Majority of speed lost from cloning is @ [`./src/renderer.rs:178`](./src/renderer.rs)
- Trim extra alpha space on the final result. - Trim extra alpha space on the final result.
- I think theres some weird shifting and offsets going on, please investigate 🥺. Really big on `spider_16` for some reason?? Related issue on the inspired project [here](https://github.com/oatmealine/gd-icon-renderer/issues/2). - I think theres some weird shifting and offsets going on, please investigate 🥺. Really big on `spider_16` for some reason?? Related issue on the inspired project [here](https://github.com/oatmealine/gd-icon-renderer/issues/2).

View file

@ -2,6 +2,7 @@ use plist;
use std::collections::HashMap; use std::collections::HashMap;
use image::GenericImageView;
use image::DynamicImage; use image::DynamicImage;
/// "{1,2}" -> `(1, 2)` /// "{1,2}" -> `(1, 2)`
@ -195,11 +196,9 @@ pub fn load_animations(path: &str) -> Animations {
} }
/// Trims out a sprite from an image according to a .plist spritesheet. /// Trims out a sprite from an image according to a .plist spritesheet.
pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> { pub fn get_sprite(spritesheet: Spritesheet, img: &DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> {
let sprite = spritesheet.sprites.get(&key); let sprite = spritesheet.sprites.get(&key);
let mut canvas = img;
if sprite.is_none() { if sprite.is_none() {
return None; return None;
} }
@ -212,7 +211,7 @@ pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> O
(left, top, width, height) = (left, top, height, width); (left, top, width, height) = (left, top, height, width);
} }
canvas = canvas.crop(left as u32, top as u32, width as u32, height as u32); let mut canvas: DynamicImage = image::DynamicImage::ImageRgba8(img.view(left as u32, top as u32, width as u32, height as u32).to_image());
if sprite.rotated { if sprite.rotated {
canvas = canvas.rotate270(); canvas = canvas.rotate270();
@ -225,8 +224,7 @@ pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> O
} }
/// Trims out a sprite from an image according to a LoadedSpritesheet object. /// Trims out a sprite from an image according to a LoadedSpritesheet object.
pub fn get_sprite_from_loaded(spritesheet: LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> { pub fn get_sprite_from_loaded(spritesheet: &LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> {
let texture = spritesheet.texture; let sprite = get_sprite(spritesheet.spritesheet.clone(), &spritesheet.texture, key);
let sprite = get_sprite(spritesheet.spritesheet, texture, key);
return sprite; return sprite;
} }

View file

@ -129,14 +129,14 @@ pub fn render_normal(basename: String, col1: [f32; 3], col2: [f32; 3], glow: boo
let layers = vec![ let layers = vec![
(if glow || (is_black(col1) && is_black(col2)) { (if glow || (is_black(col1) && is_black(col2)) {
assets::get_sprite_from_loaded(game_sheet_glow, format!("{}_glow_001.png", basename)) assets::get_sprite_from_loaded(&game_sheet_glow, format!("{}_glow_001.png", basename))
} else { } else {
None None
}), }),
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_2_001.png", basename)), assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_2_001.png", basename)),
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_3_001.png", basename)), assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_3_001.png", basename)),
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_001.png", basename)), assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_001.png", basename)),
assets::get_sprite_from_loaded(game_sheet_02, format!("{}_extra_001.png", basename)) assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_extra_001.png", basename))
]; ];
let colors: Vec<Option<[f32; 3]>> = vec![ let colors: Vec<Option<[f32; 3]>> = vec![
@ -203,7 +203,7 @@ pub fn render_zany(basename: String, col1: [f32; 3], col2: [f32; 3], glow: bool,
layers.extend(names.iter().enumerate().map(|(i, v)| { layers.extend(names.iter().enumerate().map(|(i, v)| {
( (
assets::get_sprite_from_loaded(game_sheet_02.clone(), v.clone()), assets::get_sprite_from_loaded(&game_sheet_02, v.clone()),
a.position, a.position,
flip(a.scale, a.flipped), flip(a.scale, a.flipped),
a.rotation, a.rotation,