84 let mut theme = Self::new(); |
88 let mut theme = Self::new(); |
85 |
89 |
86 for entry in read_dir(path)? { |
90 for entry in read_dir(path)? { |
87 let file = entry?; |
91 let file = entry?; |
88 if file.file_name() == "LandTex.png" { |
92 if file.file_name() == "LandTex.png" { |
89 let buffer = BufReader::new(File::create(file.path())?); |
93 let decoder = Decoder::new( |
90 let decoder = Decoder::new(buffer); |
94 BufReader::new(File::open(file.path())?)); |
91 let (info, mut reader) = decoder.read_info()?; |
95 let (info, mut reader) = decoder.read_info()?; |
92 |
96 |
93 if info.color_type != ColorType::RGBA { |
97 if info.color_type != ColorType::RGBA { |
94 return Err(ThemeLoadError::Format( |
98 return Err(ThemeLoadError::Format( |
95 format!("Unexpected format: {:?}", info.color_type))); |
99 format!("Unexpected format: {:?}", info.color_type))); |
96 } |
100 } |
97 let size = Size::new(info.width as usize, info.height as usize); |
101 let size = Size::new(info.width as usize, info.height as usize); |
98 |
102 |
99 let mut buffer: Vec2D<u32> = Vec2D::new(size, 0); |
103 let mut buffer: Vec2D<u32> = Vec2D::new(size, 0); |
100 let slice_u32 = buffer.as_mut_slice(); |
104 reader.next_frame(slice_u32_to_u8_mut(buffer.as_mut_slice()))?; |
101 let slice_u8 = unsafe { |
|
102 from_raw_parts_mut::<u8>( |
|
103 slice_u32.as_mut_ptr() as *mut u8, |
|
104 slice_u32.len() / 4 |
|
105 ) |
|
106 }; |
|
107 reader.next_frame(slice_u8)?; |
|
108 |
105 |
109 let land_tex = ThemeSprite { |
106 let land_tex = ThemeSprite { |
110 pixels: buffer |
107 pixels: buffer |
111 }; |
108 }; |
112 theme.land_texture = Some(land_tex) |
109 theme.land_texture = Some(land_tex) |