@@ -120,6 +120,60 @@ pub enum ImageType {
120120 Webp ,
121121}
122122
123+ impl ImageType {
124+ /// Calls the correct image size method based on the image type
125+ ///
126+ /// # Arguments
127+ /// * `reader` - A reader for the data
128+ pub fn reader_size < R : BufRead + Seek > ( & self , reader : & mut R ) -> ImageResult < ImageSize > {
129+ match self {
130+ #[ cfg( feature = "aesprite" ) ]
131+ ImageType :: Aseprite => aesprite:: size ( reader) ,
132+ #[ cfg( feature = "bmp" ) ]
133+ ImageType :: Bmp => bmp:: size ( reader) ,
134+ #[ cfg( feature = "dds" ) ]
135+ ImageType :: Dds => dds:: size ( reader) ,
136+ #[ cfg( feature = "exr" ) ]
137+ ImageType :: Exr => exr:: size ( reader) ,
138+ #[ cfg( feature = "farbfeld" ) ]
139+ ImageType :: Farbfeld => farbfeld:: size ( reader) ,
140+ #[ cfg( feature = "gif" ) ]
141+ ImageType :: Gif => gif:: size ( reader) ,
142+ #[ cfg( feature = "hdr" ) ]
143+ ImageType :: Hdr => hdr:: size ( reader) ,
144+ #[ cfg( feature = "ico" ) ]
145+ ImageType :: Ico => ico:: size ( reader) ,
146+ #[ cfg( feature = "ilbm" ) ]
147+ ImageType :: Ilbm => ilbm:: size ( reader) ,
148+ #[ cfg( feature = "jpeg" ) ]
149+ ImageType :: Jpeg => jpeg:: size ( reader) ,
150+ #[ cfg( feature = "jxl" ) ]
151+ ImageType :: Jxl => jxl:: size ( reader) ,
152+ #[ cfg( feature = "ktx2" ) ]
153+ ImageType :: Ktx2 => ktx2:: size ( reader) ,
154+ #[ cfg( feature = "png" ) ]
155+ ImageType :: Png => png:: size ( reader) ,
156+ #[ cfg( feature = "pnm" ) ]
157+ ImageType :: Pnm => pnm:: size ( reader) ,
158+ #[ cfg( feature = "psd" ) ]
159+ ImageType :: Psd => psd:: size ( reader) ,
160+ #[ cfg( feature = "qoi" ) ]
161+ ImageType :: Qoi => qoi:: size ( reader) ,
162+ #[ cfg( feature = "tga" ) ]
163+ ImageType :: Tga => tga:: size ( reader) ,
164+ #[ cfg( feature = "tiff" ) ]
165+ ImageType :: Tiff => tiff:: size ( reader) ,
166+ #[ cfg( feature = "vtf" ) ]
167+ ImageType :: Vtf => vtf:: size ( reader) ,
168+ #[ cfg( feature = "webp" ) ]
169+ ImageType :: Webp => webp:: size ( reader) ,
170+
171+ #[ cfg( feature = "heif" ) ]
172+ ImageType :: Heif ( ..) => heif:: size ( reader) ,
173+ }
174+ }
175+ }
176+
123177/// Holds the size information of an image.
124178#[ derive( Clone , Copy , Debug , PartialEq , Eq , Hash ) ]
125179pub struct ImageSize {
@@ -266,58 +320,17 @@ pub fn blob_size(data: &[u8]) -> ImageResult<ImageSize> {
266320///
267321/// [`ImageError`]: enum.ImageError.html
268322pub fn reader_size < R : BufRead + Seek > ( mut reader : R ) -> ImageResult < ImageSize > {
269- dispatch_header ( & mut reader)
323+ reader_type ( & mut reader ) ? . reader_size ( & mut reader)
270324}
271325
272- /// Calls the correct image size method based on the image type
326+ /// Get the image type from a reader
273327///
274328/// # Arguments
275329/// * `reader` - A reader for the data
276- /// * `header` - The header of the file
277- fn dispatch_header < R : BufRead + Seek > ( reader : & mut R ) -> ImageResult < ImageSize > {
278- match formats:: image_type ( reader) ? {
279- #[ cfg( feature = "aesprite" ) ]
280- ImageType :: Aseprite => aesprite:: size ( reader) ,
281- #[ cfg( feature = "bmp" ) ]
282- ImageType :: Bmp => bmp:: size ( reader) ,
283- #[ cfg( feature = "dds" ) ]
284- ImageType :: Dds => dds:: size ( reader) ,
285- #[ cfg( feature = "exr" ) ]
286- ImageType :: Exr => exr:: size ( reader) ,
287- #[ cfg( feature = "farbfeld" ) ]
288- ImageType :: Farbfeld => farbfeld:: size ( reader) ,
289- #[ cfg( feature = "gif" ) ]
290- ImageType :: Gif => gif:: size ( reader) ,
291- #[ cfg( feature = "hdr" ) ]
292- ImageType :: Hdr => hdr:: size ( reader) ,
293- #[ cfg( feature = "ico" ) ]
294- ImageType :: Ico => ico:: size ( reader) ,
295- #[ cfg( feature = "ilbm" ) ]
296- ImageType :: Ilbm => ilbm:: size ( reader) ,
297- #[ cfg( feature = "jpeg" ) ]
298- ImageType :: Jpeg => jpeg:: size ( reader) ,
299- #[ cfg( feature = "jxl" ) ]
300- ImageType :: Jxl => jxl:: size ( reader) ,
301- #[ cfg( feature = "ktx2" ) ]
302- ImageType :: Ktx2 => ktx2:: size ( reader) ,
303- #[ cfg( feature = "png" ) ]
304- ImageType :: Png => png:: size ( reader) ,
305- #[ cfg( feature = "pnm" ) ]
306- ImageType :: Pnm => pnm:: size ( reader) ,
307- #[ cfg( feature = "psd" ) ]
308- ImageType :: Psd => psd:: size ( reader) ,
309- #[ cfg( feature = "qoi" ) ]
310- ImageType :: Qoi => qoi:: size ( reader) ,
311- #[ cfg( feature = "tga" ) ]
312- ImageType :: Tga => tga:: size ( reader) ,
313- #[ cfg( feature = "tiff" ) ]
314- ImageType :: Tiff => tiff:: size ( reader) ,
315- #[ cfg( feature = "vtf" ) ]
316- ImageType :: Vtf => vtf:: size ( reader) ,
317- #[ cfg( feature = "webp" ) ]
318- ImageType :: Webp => webp:: size ( reader) ,
319-
320- #[ cfg( feature = "heif" ) ]
321- ImageType :: Heif ( ..) => heif:: size ( reader) ,
322- }
330+ ///
331+ /// # Remarks
332+ ///
333+ /// This will check the header to determine what image type the data is.
334+ pub fn reader_type < R : BufRead + Seek > ( mut reader : R ) -> ImageResult < ImageType > {
335+ formats:: image_type ( & mut reader)
323336}
0 commit comments