diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-04-23 17:46:14 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-04-23 17:46:14 +0200 |
| commit | 6292d25afb3080f606844d7e03fec5c80f0140ff (patch) | |
| tree | 8d2495edccaa6bdaaa4d012be18df15788c640d0 /src/env/image.rs | |
| parent | 72478946c261f04754c11f8a6abf6eb0f43dea31 (diff) | |
Reengineer font and resource loading 🏞
Diffstat (limited to 'src/env/image.rs')
| -rw-r--r-- | src/env/image.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/env/image.rs b/src/env/image.rs new file mode 100644 index 00000000..4bdb5483 --- /dev/null +++ b/src/env/image.rs @@ -0,0 +1,40 @@ +use std::fmt::{self, Debug, Formatter}; +use std::io::Cursor; + +use image::io::Reader as ImageReader; +use image::{DynamicImage, GenericImageView, ImageFormat}; + +use super::Buffer; + +/// A loaded image resource. +pub struct ImageResource { + /// The original format the image was encoded in. + pub format: ImageFormat, + /// The decoded image. + pub buf: DynamicImage, +} + +impl ImageResource { + /// Parse an image resource from raw data in a supported format. + /// + /// The image format is determined automatically. + pub fn parse(data: Buffer) -> Option<Self> { + let cursor = Cursor::new(data.as_ref()); + let reader = ImageReader::new(cursor).with_guessed_format().ok()?; + let format = reader.format()?; + let buf = reader.decode().ok()?; + Some(Self { format, buf }) + } +} + +impl Debug for ImageResource { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + let (width, height) = self.buf.dimensions(); + f.debug_struct("ImageResource") + .field("format", &self.format) + .field("color", &self.buf.color()) + .field("width", &width) + .field("height", &height) + .finish() + } +} |
