diff options
Diffstat (limited to 'src/convert.rs')
-rw-r--r-- | src/convert.rs | 26 |
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 @@ | |||
1 | use crate::{ | ||
2 | error::{OBIError, OBIResult}, | ||
3 | CompressionType, Image, | ||
4 | }; | ||
5 | |||
6 | use std::io::Write; | ||
7 | |||
8 | use png::{BitDepth, ColorType, Encoder, Writer}; | ||
9 | |||
10 | pub 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 | } | ||