aboutsummaryrefslogtreecommitdiff
path: root/src/convert.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/convert.rs')
-rw-r--r--src/convert.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/convert.rs b/src/convert.rs
new file mode 100644
index 0000000..368b2ef
--- /dev/null
+++ b/src/convert.rs
@@ -0,0 +1,26 @@
1use crate::{
2 error::{OBIError, OBIResult},
3 CompressionType, Image,
4};
5
6use std::io::Write;
7
8use png::{BitDepth, ColorType, Encoder, Writer};
9
10pub fn to_png<W: Write>(writer: W, img: &Image) -> Writer<W> {
11 let mut encoder = Encoder::new(writer, img.width(), img.height());
12 encoder.set_color(ColorType::RGBA);
13 encoder.set_depth(BitDepth::Eight);
14 let mut writer = encoder.write_header().unwrap();
15 writer
16 .write_image_data(
17 &img.data
18 .iter()
19 .take((img.width() * img.height()) as usize)
20 .map(|x| if *x { vec![255; 4] } else { vec![0, 0, 0, 255] })
21 .flatten()
22 .collect::<Vec<_>>()[..],
23 )
24 .unwrap();
25 writer
26}