diff --git a/include/QF/image.h b/include/QF/image.h index 7ec7d00dc..2bbf7fb0a 100644 --- a/include/QF/image.h +++ b/include/QF/image.h @@ -53,6 +53,8 @@ typedef struct tex_s { tex_t *LoadImage (const char *imageFile, int load); +size_t ImageSize (const tex_t *tex, int incl_struct) __attribute__((pure)); + typedef struct colcache_s colcache_t; colcache_t *ColorCache_New (void); diff --git a/libs/image/image.c b/libs/image/image.c index 4da1e5827..f619727f5 100644 --- a/libs/image/image.c +++ b/libs/image/image.c @@ -106,3 +106,31 @@ LoadImage (const char *imageFile, int load) dstring_delete (tmpFile); return (tex); } + +size_t +ImageSize (const tex_t *tex, int incl_struct) +{ + size_t w =tex->width; + size_t h =tex->height; + size_t bpp = 1; + switch (tex->format) { + case tex_palette: + case tex_rgb: + bpp = 3; + break; + case tex_l: + case tex_a: + bpp = 1; + break; + case tex_la: + bpp = 2; + break; + case tex_rgba: + bpp = 4; + break; + case tex_frgba: + bpp = 16; + break; + } + return bpp * w * h + (incl_struct ? sizeof (tex_t) : 0); +}