@ -18,10 +18,11 @@ Initial implementation by Jorge L Rodriguez
# define STBR_INCLUDE_STB_RESAMPLE_H
// Basic usage:
// result = stbr_resize(input_data, input_w, input_h, input_components, output_data, output_w, output_h, STBR_FILTER_NEAREST, STBR_EDGE_CLAMP);
// result = stbr_resize(input_data, input_w, input_h, input_components, 0, output_data, output_w, output_h, 0 , STBR_FILTER_NEAREST, STBR_EDGE_CLAMP);
//
// input_data is your supplied texels.
// output_data will be the resized texels. It should be of size output_w * output_h * input_components.
// output_data will be the resized texels. It should be of size output_w * output_h * input_components (or output_h * output_stride if you provided a stride.)
// If input_stride or output_stride is 0 (as in this example) the stride will be automatically calculated as width*components.
// Returned result is 1 for success or 0 in case of an error.
typedef enum
@ -52,7 +53,7 @@ extern "C" {
// PRIMARY API - resize an image
//
STBRDEF int stbr_resize ( const stbr_uc * input_data , int input_w , int input_h , int input_components , stbr_uc * output_data , int output_w , int output_h , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize ( const stbr_uc * input_data , int input_w , int input_h , int input_components , int input_stride , stbr_uc * output_data , int output_w , int output_h , int output_stride , stbr_filter filter , stbr_edge edge ) ;
# ifdef __cplusplus
@ -159,17 +160,18 @@ static void stbr__filter_nearest_n(const stbr_uc* input_data, stbr_uc* output_da
typedef void ( stbr__filter_fn ) ( const stbr_uc * input_data , stbr_uc * output_data , size_t input_texel_index , size_t output_texel_index , size_t n ) ;
STBRDEF int stbr_resize ( const stbr_uc * input_data , int input_w , int input_h , int input_components , stbr_uc * output_data , int output_w , int output_h , stbr_filter filter , stbr_edge edge )
STBRDEF int stbr_resize ( const stbr_uc * input_data , int input_w , int input_h , int input_components , int input_stride , stbr_uc * output_data , int output_w , int output_h , int output_stride , stbr_filter filter , stbr_edge edge )
{
int x , y ;
int width_stride_input = input_components * input_w ;
int width_stride_output = input_components * output_w ;
int width_stride_input = input_stride ? input_stride : input_ components * input_w ;
int width_stride_output = output_stride ? output_stride : input_components * output_w ;
# ifdef STBR_DEBUG_OVERWRITE_TEST
# define OVERWRITE_ARRAY_SIZE 64
unsigned char overwrite_contents_pre [ OVERWRITE_ARRAY_SIZE ] ;
memcpy ( overwrite_contents_pre , & output_data [ output_w * output_h * input_components ] , OVERWRITE_ARRAY_SIZE ) ;
size_t begin_forbidden = width_stride_output * ( output_h - 1 ) + output_w * input_components ;
memcpy ( overwrite_contents_pre , & output_data [ begin_forbidden ] , OVERWRITE_ARRAY_SIZE ) ;
# endif
if ( filter = = STBR_FILTER_NEAREST )
@ -203,7 +205,7 @@ STBRDEF int stbr_resize(const stbr_uc* input_data, int input_w, int input_h, int
return 0 ;
# ifdef STBR_DEBUG_OVERWRITE_TEST
STBR_ASSERT ( memcmp ( overwrite_contents_pre , & output_data [ output_w * output_h * input_components ] , OVERWRITE_ARRAY_SIZE ) = = 0 ) ;
STBR_ASSERT ( memcmp ( overwrite_contents_pre , & output_data [ begin_forbidden ] , OVERWRITE_ARRAY_SIZE ) = = 0 ) ;
# endif
return 1 ;