Skip to content

DMI metadata reading and injection#234

Merged
ZeWaka merged 5 commits intotgstation:masterfrom
Y0SH1M4S73R:dmi_inject_metadata
Jul 26, 2025
Merged

DMI metadata reading and injection#234
ZeWaka merged 5 commits intotgstation:masterfrom
Y0SH1M4S73R:dmi_inject_metadata

Conversation

@Y0SH1M4S73R
Copy link
Copy Markdown
Contributor

@Y0SH1M4S73R Y0SH1M4S73R commented Jul 16, 2025

This PR adds rustg_dmi_read_metadata to read metadata from a DMI, and rustg_dmi_inject_metadata to inject DMI metadata into a PNG-formatted file.

With rustg_dmi_inject_metadata, in conjunction with dmi_create_png's new support for alpha channels, it will now be possible to create arbitrary dmis from user-provided pixel data much faster than with BYOND's own icon operations.

Example Usage:

var/list/pixels = /* Some list containing 4096 rgba strings - 128 rows of 32 pixels, 32 rows per dir. */
rustg_dmi_create_png("output.dmi", "32", "128", pixels)
var/metadata = json_encode(list(\
  "width" = 32,\
  "height" = 32,\
  "states" = list(\
    list(\
      "name" = "",\
      "dirs" = 4,\
    )\
  )\
)
rustg_dmi_inject_metadata("output.dmi", metadata)

Copy link
Copy Markdown
Collaborator

@ZeWaka ZeWaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems a bit strange to add a way to inject without an ability to read

@Y0SH1M4S73R
Copy link
Copy Markdown
Contributor Author

seems a bit strange to add a way to inject without an ability to read

Well if you want a DMI metadata reading function to go with it, I can do that.

@Y0SH1M4S73R Y0SH1M4S73R changed the title DMI metadata injection DMI metadata reading and injection Jul 19, 2025
@ZeWaka ZeWaka merged commit da863cb into tgstation:master Jul 26, 2025
4 checks passed
itsmeow pushed a commit to BeeStation/rust-g that referenced this pull request Feb 26, 2026
itsmeow added a commit to BeeStation/rust-g that referenced this pull request Feb 26, 2026
* fixes the clippy lints on nightly (tgstation#215)

* Adds a new time function, `formatted_timestamp` (tgstation#214)

* dmi_create_png is rgba instead of rgb (tgstation#217)

* add useragent to byond installer

* crate internal updates (tgstation#218)

* v3.9.0 (tgstation#219)

* Enable pathfinder by default (tgstation#220)

* Fix clippy URL lifetime lint (tgstation#223)

* Improve DM test functionality on Windows, fix regressions (tgstation#221)

* Adds `roll_dice`, an advanced xdy dice roller. (tgstation#216)

Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>

* v3.11.0 (tgstation#224)

* Fix TOML dme test failing (tgstation#227)

* hash: optimize file hashing (tgstation#228)

* IconForge: DMI Generation, Code Reorganization, Improved Caching, Cleaner I/O (tgstation#213)

* Adds a new `uuid` module (tgstation#229)

* IconForge: BYOND Parity + Tests, Optimizations, New Transforms (tgstation#230)

* `clippy` lints for tgstation#230 (tgstation#233)

* Adds `http_request_fire_and_forget` (tgstation#232)

* DMI metadata reading and injection (tgstation#234)

* 4.0.0 (tgstation#235)

* dmi: Add QR code generation (tgstation#226)

* Bump `dmi` to 0.5.0, optimize `dmi_read_metadata` (tgstation#238)

* Update CI to target 516.1666 (tgstation#237)

* 4.1.0 (tgstation#239)

* makes `rustg_noise_poisson_map` around 8x faster (tgstation#240)

* IconForge: Headless Icon Generation (tgstation#236)

* `cargo update` & `cargo upgrade` & `png` fix (tgstation#241)

* assorted optimizations to `cellularnoise`, `dbpnoise`, and `worleynoise` (tgstation#243)

* v4.2.0 (tgstation#242)

* Fix attempt for CI

* hash: Adds ChaCha20 CSPRNG functions, updates TOTP generator, adds Base32 (tgstation#225)

* Handle errors in panic hook explicitly (tgstation#245)

* do not store Git information static (tgstation#247)

* Prevent `decode_base64` and `decode_base32` from panicking if given invalid base64 (tgstation#244)

* 4.3.0 (tgstation#249)

* fix iconforge generate_headless on win for bad paths not panicing (tgstation#248)

* 5.0.0 (tgstation#250)

* redo iconforge errors - 5.0.1 (tgstation#252)

* 6.0.0 - drop windows 7 support (tgstation#251)

* fix spritesheet gen on linux (tgstation#255)

* cargo update and clippy (tgstation#253)

* 6.0.1 - and `cargo update` (tgstation#256)

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com>
Co-authored-by: ZeWaka <zewakagamer@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Comrade Niobe <126028983+ComradeNiobe@users.noreply.github.com>
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Co-authored-by: Y0SH1M4S73R <y0sh1m4s73r@gmail.com>
Co-authored-by: Ivy <distributivgesetz93@gmail.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants