c++openglsoil

SOIL Image size


Can I somehow get size of an image (of any SOIL supports)?

I know that there are different headers in image files which define these sizes. But is there any function from SOIL to get image size?


Solution

  • SOIL_load_image() will populate the width/height parameters with the dimensions of the image, though it does a full load of the image to do so:

    /**
        Loads an image from disk into an array of unsigned chars.
        Note that *channels return the original channel count of the
        image.  If force_channels was other than SOIL_LOAD_AUTO,
        the resulting image has force_channels, but *channels may be
        different (if the original image had a different channel
        count).
        \return 0 if failed, otherwise returns 1
    **/
    unsigned char*
        SOIL_load_image
        (
            const char *filename,
            int *width, int *height, int *channels,
            int force_channels
        );
    

    The underlying stb_image.h has routines that don't load the full image:

    // get image dimensions & components without fully decoding
    STBIDEF int      stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp);
    STBIDEF int      stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp);
    STBIDEF int      stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len);
    STBIDEF int      stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user);
    
    #ifndef STBI_NO_STDIO
    STBIDEF int      stbi_info               (char const *filename,     int *x, int *y, int *comp);
    STBIDEF int      stbi_info_from_file     (FILE *f,                  int *x, int *y, int *comp);
    STBIDEF int      stbi_is_16_bit          (char const *filename);
    STBIDEF int      stbi_is_16_bit_from_file(FILE *f);
    #endif