oxygengine_composite_renderer/
jpg_image_asset_protocol.rs1use crate::core::assets::protocol::{AssetLoadResult, AssetProtocol};
2use std::io::Cursor;
3
4pub struct JpgImageAsset {
5 bytes: Vec<u8>,
6 width: usize,
7 height: usize,
8}
9
10impl JpgImageAsset {
11 pub fn bytes(&self) -> &[u8] {
12 &self.bytes
13 }
14
15 pub fn width(&self) -> usize {
16 self.width
17 }
18
19 pub fn height(&self) -> usize {
20 self.height
21 }
22}
23
24pub struct JpgImageAssetProtocol;
25
26impl AssetProtocol for JpgImageAssetProtocol {
27 fn name(&self) -> &str {
28 "jpg"
29 }
30
31 fn on_load(&mut self, data: Vec<u8>) -> AssetLoadResult {
32 let stream = Cursor::new(&data);
33 let mut decoder = jpeg_decoder::Decoder::new(stream);
34 decoder.read_info().unwrap();
35 let info = decoder.info().unwrap();
36 let width = info.width as usize;
37 let height = info.height as usize;
38 AssetLoadResult::Data(Box::new(JpgImageAsset {
39 bytes: data,
40 width,
41 height,
42 }))
43 }
44}