@@ -165,63 +165,38 @@ impl Script for Hg3Image {
165165 self . entries . len ( ) > 1
166166 }
167167
168- fn export_multi_image < ' a > (
168+ fn iter_multi_image_name < ' a > (
169169 & ' a self ,
170- ) -> Result < Box < dyn Iterator < Item = Result < ImageDataWithName > > + ' a > > {
171- Ok ( Box :: new ( Hg3ImageIter {
172- iter : self . entries . iter ( ) ,
173- index : 0 ,
174- data : self . data . to_ref ( ) ,
175- draw_canvas : self . draw_canvas ,
176- } ) )
170+ ) -> Result < Box < dyn Iterator < Item = Result < String > > + ' a > > {
171+ Ok ( Box :: new (
172+ ( 0 ..self . entries . len ( ) ) . map ( |i| Ok ( format ! ( "{:04}" , i) ) ) ,
173+ ) )
177174 }
178- }
179-
180- struct Hg3ImageIter < ' a , T : Iterator < Item = & ' a ( Hg3Entry , usize , usize ) > + ' a > {
181- iter : T ,
182- index : usize ,
183- data : MemReaderRef < ' a > ,
184- draw_canvas : bool ,
185- }
186175
187- impl < ' a , T : Iterator < Item = & ' a ( Hg3Entry , usize , usize ) > + ' a > Iterator for Hg3ImageIter < ' a , T > {
188- type Item = Result < ImageDataWithName > ;
189-
190- fn next ( & mut self ) -> Option < Self :: Item > {
191- if let Some ( ( entry, offset, size) ) = self . iter . next ( ) {
192- let data = & self . data . data [ * offset..* offset + * size] ;
193- let reader = Hg3Reader {
194- m_input : MemReaderRef :: new ( data) ,
195- m_info : entry. clone ( ) ,
196- m_pixel_size : entry. bpp / 8 ,
197- } ;
198- self . index += 1 ;
199- match reader. unpack ( ) {
200- Ok ( mut img) => {
201- if self . draw_canvas {
202- if entry. canvas_width > 0 && entry. canvas_height > 0 {
203- img = match draw_on_canvas (
204- img,
205- entry. canvas_width ,
206- entry. canvas_height ,
207- entry. offset_x ,
208- entry. offset_y ,
209- ) {
210- Ok ( canvas_img) => canvas_img,
211- Err ( e) => return Some ( Err ( e) ) ,
212- } ;
213- }
214- }
215- Some ( Ok ( ImageDataWithName {
216- name : format ! ( "{:04}" , self . index - 1 ) ,
217- data : img,
218- } ) )
219- }
220- Err ( e) => Some ( Err ( e) ) ,
176+ fn open_image < ' a > ( & ' a self , index : usize ) -> Result < ImageDataWithName > {
177+ let ( entry, offset, size) = & self . entries [ index] ;
178+ let data = & self . data . data [ * offset..* offset + * size] ;
179+ let reader = Hg3Reader {
180+ m_input : MemReaderRef :: new ( data) ,
181+ m_info : entry. clone ( ) ,
182+ m_pixel_size : entry. bpp / 8 ,
183+ } ;
184+ let mut img = reader. unpack ( ) ?;
185+ if self . draw_canvas {
186+ if entry. canvas_width > 0 && entry. canvas_height > 0 {
187+ img = draw_on_canvas (
188+ img,
189+ entry. canvas_width ,
190+ entry. canvas_height ,
191+ entry. offset_x ,
192+ entry. offset_y ,
193+ ) ?;
221194 }
222- } else {
223- None
224195 }
196+ Ok ( ImageDataWithName {
197+ name : format ! ( "{:04}" , index) ,
198+ data : img,
199+ } )
225200 }
226201}
227202
0 commit comments