Coin Logo Coin3D is Free Software,
published under the BSD 3-clause license.
https://coin3d.github.io
https://www.kongsberg.com/en/kogt/
resize.c File Reference
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <simage.h>

Data Structures

struct  Image
 
struct  CONTRIB
 
struct  CLIST
 

Macros

#define M_PI   3.14159265358979323846
 
#define filter_support   (1.0f)
 
#define box_support   (0.5f)
 
#define triangle_support   (1.0f)
 
#define bell_support   (1.5f)
 
#define B_spline_support   (2.0f)
 
#define Lanczos3_support   (3.0f)
 
#define Mitchell_support   (2.0)
 
#define B   (1.0f / 3.0f)
 
#define C   (1.0f / 3.0f)
 

Functions

static void get_row (unsigned char *row, Image *image, int y)
 
static void get_column (unsigned char *column, Image *image, int x)
 
static void put_pixel (Image *image, int x, int y, float *data)
 
static float filter (float t)
 
static float box_filter (float t)
 
static float triangle_filter (float t)
 
static float bell_filter (float t)
 
static float B_spline_filter (float t)
 
static float sinc (float x)
 
static float Lanczos3_filter (float t)
 
static float Mitchell_filter (float t)
 
static Imagenew_image (int xsize, int ysize, int bpp, unsigned char *data)
 
static void zoom (Image *dst, Image *src, float(*filterf)(float), float fwidth)
 
static unsigned char * simage_resize_fast (unsigned char *src, int width, int height, int num_comp, int newwidth, int newheight)
 
unsigned char * simage_resize (unsigned char *src, int width, int height, int num_comp, int newwidth, int newheight)
 

Macro Definition Documentation

◆ M_PI

#define M_PI   3.14159265358979323846

◆ filter_support

#define filter_support   (1.0f)

◆ box_support

#define box_support   (0.5f)

◆ triangle_support

#define triangle_support   (1.0f)

◆ bell_support

#define bell_support   (1.5f)

◆ B_spline_support

#define B_spline_support   (2.0f)

◆ Lanczos3_support

#define Lanczos3_support   (3.0f)

◆ Mitchell_support

#define Mitchell_support   (2.0)

◆ B

#define B   (1.0f / 3.0f)

◆ C

#define C   (1.0f / 3.0f)

Function Documentation

◆ get_row()

static void get_row ( unsigned char *  row,
Image image,
int  y 
)
static

◆ get_column()

static void get_column ( unsigned char *  column,
Image image,
int  x 
)
static

◆ put_pixel()

static void put_pixel ( Image image,
int  x,
int  y,
float *  data 
)
static

◆ filter()

static float filter ( float  t)
static

◆ box_filter()

static float box_filter ( float  t)
static

◆ triangle_filter()

static float triangle_filter ( float  t)
static

◆ bell_filter()

static float bell_filter ( float  t)
static

◆ B_spline_filter()

static float B_spline_filter ( float  t)
static

◆ sinc()

static float sinc ( float  x)
static

◆ Lanczos3_filter()

static float Lanczos3_filter ( float  t)
static

◆ Mitchell_filter()

static float Mitchell_filter ( float  t)
static

◆ new_image()

static Image* new_image ( int  xsize,
int  ysize,
int  bpp,
unsigned char *  data 
)
static

◆ zoom()

static void zoom ( Image dst,
Image src,
float(*)(float)  filterf,
float  fwidth 
)
static

◆ simage_resize_fast()

static unsigned char* simage_resize_fast ( unsigned char *  src,
int  width,
int  height,
int  num_comp,
int  newwidth,
int  newheight 
)
static

◆ simage_resize()

unsigned char* simage_resize ( unsigned char *  imagedata,
int  width,
int  height,
int  numcomponents,
int  newwidth,
int  newheight 
)

Since OpenGL textures must have width and height equal to 2^n, this is often needed. A pointer to the new image data is returned. imagedata is not freed. Uses the algorithm "Filtered Image Rescaling" by Dale Schumacher, from GGems III.

Scales the input imagedata and return a new image with the given dimensions returned image buffer must be freed by simage_free_image()