@ -49,8 +49,8 @@
//
// Other function groups are provided, one for each data type, for more advanced functionality:
//
// stbr_resize_type_premultiplied(input_data, input_w, input_h, output_data, output_w, output_h, channels, premultiplied _alpha_channel, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP)
// * premultiplied_alpha_channel is 0 if there are no premultiplied alpha channels. If nonzero, the specified channel will be divided from all other channels before resampling, then multiplied back in after.
// stbr_resize_type_premultiply(input_data, input_w, input_h, output_data, output_w, output_h, channels, premultiply _alpha_channel, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP)
// * premultiply_alpha_channel - if nonzero, the specified channel will be multiplied into all other channels before resampling, then divided back out after.
//
// stbr_resize_type_subpixel(input_data, input_w, input_h, output_data, output_w, output_h, s0, t0, s1, t1, channels, filter, edge)
// * s0, t0, s1, t1 are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use.
@ -61,7 +61,7 @@
// result = stbr_resize_arbitrary(input_data, input_w, input_h, input_stride_in_bytes,
// output_data, output_w, output_h, output_stride_in_bytes,
// s0, t0, s1, t1,
// channels, premultiplied _alpha_channel, STBR_TYPE_UINT8, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP, STBR_COLORSPACE_SRGB);
// channels, premultiply _alpha_channel, STBR_TYPE_UINT8, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP, STBR_COLORSPACE_SRGB);
//
//
// Control over memory allocation is offered like so:
@ -71,13 +71,13 @@
// result = stbr_resize_advanced(input_data, input_w, input_h, input_stride_in_bytes,
// output_data, output_w, output_h, output_stride_in_bytes,
// s0, t0, s1, t1,
// channels, premultiplied _alpha_channel, STBR_TYPE_UINT8, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP, STBR_COLORSPACE_SRGB,
// channels, premultiply _alpha_channel, STBR_TYPE_UINT8, STBR_FILTER_CATMULLROM, STBR_EDGE_CLAMP, STBR_COLORSPACE_SRGB,
// extra_memory, memory_required);
// free(extra_memory);
//
// * input_stride_in_bytes and output_stride_in_bytes can be 0. If so they will be automatically calculated as width * channels.
// * s0, t0, s1, t1 are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use.
// * premultiplied_alpha_channel is 0 if there are no premultiplied alpha channels. If nonzero, the specified channel will be divided from all other channels before resampling, then multiplied back in after.
// * premultiply_alpha_channel - if nonzero, the specified channel will be multiplied into all other channels before resampling, then divided back out after.
// * Returned result is 1 for success or 0 in case of an error. In the case of an error an assert with be triggered, #define STBR_ASSERT() to see it.
// * stbr_resize_advanced() will not allocate any memory, it will use the memory you pass in to do its work. Memory required grows
// approximately linearly with input and output size, but with discontinuities at input_w == output_w and input_h == output_height.
@ -165,21 +165,21 @@ extern "C" {
int channels , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize_uint8_premultiplied ( const stbr_uint8 * input_data , int input_w , int input_h ,
STBRDEF int stbr_resize_uint8_premultiply ( const stbr_uint8 * input_data , int input_w , int input_h ,
stbr_uint8 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize_uint16_premultiplied ( const stbr_uint16 * input_data , int input_w , int input_h ,
STBRDEF int stbr_resize_uint16_premultiply ( const stbr_uint16 * input_data , int input_w , int input_h ,
stbr_uint16 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize_uint32_premultiplied ( const stbr_uint32 * input_data , int input_w , int input_h ,
STBRDEF int stbr_resize_uint32_premultiply ( const stbr_uint32 * input_data , int input_w , int input_h ,
stbr_uint32 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize_float_premultiplied ( const float * input_data , int input_w , int input_h ,
STBRDEF int stbr_resize_float_premultiply ( const float * input_data , int input_w , int input_h ,
float * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge ) ;
STBRDEF int stbr_resize_uint8_subpixel ( const stbr_uint8 * input_data , int input_w , int input_h ,
@ -206,7 +206,7 @@ extern "C" {
STBRDEF int stbr_resize_arbitrary ( const void * input_data , int input_w , int input_h , int input_stride_in_bytes ,
void * output_data , int output_w , int output_h , int output_stride_in_bytes ,
float s0 , float t0 , float s1 , float t1 ,
int channels , int premultiplied _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace ) ;
int channels , int premultiply _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace ) ;
//////////////////////////////////////////////////////////////////////////////
@ -219,7 +219,7 @@ extern "C" {
STBRDEF int stbr_resize_advanced ( const void * input_data , int input_w , int input_h , int input_stride_in_bytes ,
void * output_data , int output_w , int output_h , int output_stride_in_bytes ,
float s0 , float t0 , float s1 , float t1 ,
int channels , int premultiplied _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace ,
int channels , int premultiply _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace ,
void * tempmem , stbr_size_t tempmem_size_in_bytes ) ;
@ -847,7 +847,7 @@ static void stbr__decode_scanline(stbr__info* stbr_info, int n)
if ( c = = premul_alpha_channel )
continue ;
decode_buffer [ decode_texel_index + c ] / = decode_buffer [ decode_texel_index + premul_alpha_channel ] ;
decode_buffer [ decode_texel_index + c ] * = decode_buffer [ decode_texel_index + premul_alpha_channel ] ;
}
}
}
@ -1011,7 +1011,7 @@ static stbr_inline void stbr__encode_scanline(void* output_buffer, int output_te
if ( n = = premul_alpha_channel )
continue ;
encode_buffer [ encode_texel_index + n ] * = encode_buffer [ encode_texel_index + premul_alpha_channel ] ;
encode_buffer [ encode_texel_index + n ] / = encode_buffer [ encode_texel_index + premul_alpha_channel ] ;
}
}
@ -1070,7 +1070,7 @@ static stbr_inline void stbr__encode_scanline(void* output_buffer, int output_te
if ( n = = premul_alpha_channel )
continue ;
encode_buffer [ encode_texel_index + n ] / = encode_buffer [ encode_texel_index + premul_alpha_channel ] ;
encode_buffer [ encode_texel_index + n ] * = encode_buffer [ encode_texel_index + premul_alpha_channel ] ;
}
}
}
@ -1564,9 +1564,9 @@ STBRDEF stbr_inline int stbr_resize_float_srgb(const float* input_data, int inpu
return result ;
}
STBRDEF stbr_inline int stbr_resize_uint8_premultiplied ( const stbr_uint8 * input_data , int input_w , int input_h ,
STBRDEF stbr_inline int stbr_resize_uint8_premultiply ( const stbr_uint8 * input_data , int input_w , int input_h ,
stbr_uint8 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge )
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge )
{
size_t memory_required = stbr_calculate_memory ( input_w , input_h , output_w , output_h , 0 , 0 , 1 , 1 , channels , filter ) ;
void * extra_memory = STBR_MALLOC ( memory_required ) ;
@ -1574,16 +1574,16 @@ STBRDEF stbr_inline int stbr_resize_uint8_premultiplied(const stbr_uint8* input_
if ( ! extra_memory )
return 0 ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiplied _alpha_channel , STBR_TYPE_UINT8 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiply _alpha_channel , STBR_TYPE_UINT8 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
STBR_FREE ( extra_memory ) ;
return result ;
}
STBRDEF stbr_inline int stbr_resize_uint16_premultiplied ( const stbr_uint16 * input_data , int input_w , int input_h ,
STBRDEF stbr_inline int stbr_resize_uint16_premultiply ( const stbr_uint16 * input_data , int input_w , int input_h ,
stbr_uint16 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge )
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge )
{
size_t memory_required = stbr_calculate_memory ( input_w , input_h , output_w , output_h , 0 , 0 , 1 , 1 , channels , filter ) ;
void * extra_memory = STBR_MALLOC ( memory_required ) ;
@ -1591,16 +1591,16 @@ STBRDEF stbr_inline int stbr_resize_uint16_premultiplied(const stbr_uint16* inpu
if ( ! extra_memory )
return 0 ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiplied _alpha_channel , STBR_TYPE_UINT16 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiply _alpha_channel , STBR_TYPE_UINT16 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
STBR_FREE ( extra_memory ) ;
return result ;
}
STBRDEF stbr_inline int stbr_resize_uint32_premultiplied ( const stbr_uint32 * input_data , int input_w , int input_h ,
STBRDEF stbr_inline int stbr_resize_uint32_premultiply ( const stbr_uint32 * input_data , int input_w , int input_h ,
stbr_uint32 * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge )
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge )
{
size_t memory_required = stbr_calculate_memory ( input_w , input_h , output_w , output_h , 0 , 0 , 1 , 1 , channels , filter ) ;
void * extra_memory = STBR_MALLOC ( memory_required ) ;
@ -1608,16 +1608,16 @@ STBRDEF stbr_inline int stbr_resize_uint32_premultiplied(const stbr_uint32* inpu
if ( ! extra_memory )
return 0 ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiplied _alpha_channel , STBR_TYPE_UINT32 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiply _alpha_channel , STBR_TYPE_UINT32 , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
STBR_FREE ( extra_memory ) ;
return result ;
}
STBRDEF stbr_inline int stbr_resize_float_premultiplied ( const float * input_data , int input_w , int input_h ,
STBRDEF stbr_inline int stbr_resize_float_premultiply ( const float * input_data , int input_w , int input_h ,
float * output_data , int output_w , int output_h ,
int channels , int premultiplied _alpha_channel , stbr_filter filter , stbr_edge edge )
int channels , int premultiply _alpha_channel , stbr_filter filter , stbr_edge edge )
{
size_t memory_required = stbr_calculate_memory ( input_w , input_h , output_w , output_h , 0 , 0 , 1 , 1 , channels , filter ) ;
void * extra_memory = STBR_MALLOC ( memory_required ) ;
@ -1625,7 +1625,7 @@ STBRDEF stbr_inline int stbr_resize_float_premultiplied(const float* input_data,
if ( ! extra_memory )
return 0 ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiplied _alpha_channel , STBR_TYPE_FLOAT , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , 0 , output_data , output_w , output_h , 0 , 0 , 0 , 1 , 1 , channels , premultiply _alpha_channel , STBR_TYPE_FLOAT , filter , edge , STBR_COLORSPACE_SRGB , extra_memory , memory_required ) ;
STBR_FREE ( extra_memory ) ;
@ -1707,7 +1707,7 @@ STBRDEF stbr_inline int stbr_resize_float_subpixel(const float* input_data, int
STBRDEF int stbr_resize_arbitrary ( const void * input_data , int input_w , int input_h , int input_stride_in_bytes ,
void * output_data , int output_w , int output_h , int output_stride_in_bytes ,
float s0 , float t0 , float s1 , float t1 ,
int channels , int premultiplied _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace )
int channels , int premultiply _alpha_channel , stbr_type type , stbr_filter filter , stbr_edge edge , stbr_colorspace colorspace )
{
size_t memory_required = stbr_calculate_memory ( input_w , input_h , output_w , output_h , s0 , t0 , s1 , t1 , channels , filter ) ;
void * extra_memory = STBR_MALLOC ( memory_required ) ;
@ -1715,7 +1715,7 @@ STBRDEF int stbr_resize_arbitrary(const void* input_data, int input_w, int input
if ( ! extra_memory )
return 0 ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , input_stride_in_bytes , output_data , output_w , output_h , output_stride_in_bytes , s0 , t0 , s1 , t1 , channels , premultiplied _alpha_channel , type , filter , edge , colorspace , extra_memory , memory_required ) ;
int result = stbr_resize_advanced ( input_data , input_w , input_h , input_stride_in_bytes , output_data , output_w , output_h , output_stride_in_bytes , s0 , t0 , s1 , t1 , channels , premultiply _alpha_channel , type , filter , edge , colorspace , extra_memory , memory_required ) ;
STBR_FREE ( extra_memory ) ;