mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/utils/image.rs')
-rw-r--r--src/utils/image.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/utils/image.rs b/src/utils/image.rs
index 8254bb7..b968dc6 100644
--- a/src/utils/image.rs
+++ b/src/utils/image.rs
@@ -478,14 +478,20 @@ impl Image<Vec<u8>, 4> {
impl Image<Vec<u8>, 3> {
#[cfg(feature = "bin")]
pub fn save(&self, f: impl AsRef<std::path::Path>) {
- image::save_buffer(
- f,
- &self.buffer,
- self.width(),
- self.height(),
- image::ColorType::Rgb8,
- )
- .unwrap();
+ let p = std::fs::File::create(f).unwrap();
+ let w = &mut std::io::BufWriter::new(p);
+ let mut enc = png::Encoder::new(w, self.width(), self.height());
+ enc.set_color(png::ColorType::Rgb);
+ enc.set_depth(png::BitDepth::Eight);
+ enc.set_source_gamma(png::ScaledFloat::new(1.0 / 2.2));
+ enc.set_source_chromaticities(png::SourceChromaticities::new(
+ (0.31270, 0.32900),
+ (0.64000, 0.33000),
+ (0.30000, 0.60000),
+ (0.15000, 0.06000),
+ ));
+ let mut writer = enc.write_header().unwrap();
+ writer.write_image_data(&self.buffer).unwrap();
}
}