Typedefs | |
typedef stp_curve | stp_curve_t |
The curve opaque data type. | |
Enumerations | |
enum | stp_curve_type_t { STP_CURVE_TYPE_LINEAR, STP_CURVE_TYPE_SPLINE } |
Curve types. More... | |
enum | stp_curve_wrap_mode_t { STP_CURVE_WRAP_NONE, STP_CURVE_WRAP_AROUND } |
Wrapping mode. More... | |
enum | stp_curve_compose_t { STP_CURVE_COMPOSE_ADD, STP_CURVE_COMPOSE_MULTIPLY, STP_CURVE_COMPOSE_EXPONENTIATE } |
Composition types. More... | |
enum | stp_curve_bounds_t { STP_CURVE_BOUNDS_RESCALE, STP_CURVE_BOUNDS_CLIP, STP_CURVE_BOUNDS_ERROR } |
Bounds exceeded behaviour. More... | |
Functions | |
stp_curve_t * | stp_curve_create (stp_curve_wrap_mode_t wrap) |
Create a new curve. | |
stp_curve_t * | stp_curve_create_copy (const stp_curve_t *curve) |
Copy and allocate an curve. | |
void | stp_curve_copy (stp_curve_t *dest, const stp_curve_t *source) |
Copy an curve. | |
void | stp_curve_destroy (stp_curve_t *curve) |
Destroy an curve. | |
int | stp_curve_set_bounds (stp_curve_t *curve, double low, double high) |
Set the lower and upper bounds on a curve. | |
void | stp_curve_get_bounds (const stp_curve_t *curve, double *low, double *high) |
Get the lower and upper bounds on a curve. | |
stp_curve_wrap_mode_t | stp_curve_get_wrap (const stp_curve_t *curve) |
Get the wrapping mode. | |
void | stp_curve_get_range (const stp_curve_t *curve, double *low, double *high) |
size_t | stp_curve_count_points (const stp_curve_t *curve) |
Get the number of allocated points in the curve. | |
int | stp_curve_set_interpolation_type (stp_curve_t *curve, stp_curve_type_t itype) |
Set the curve interpolation type. | |
stp_curve_type_t | stp_curve_get_interpolation_type (const stp_curve_t *curve) |
Get the curve interpolation type. | |
int | stp_curve_set_data (stp_curve_t *curve, size_t count, const double *data) |
Set all data points of the curve. | |
int | stp_curve_set_float_data (stp_curve_t *curve, size_t count, const float *data) |
Set the data points in a curve from float values. | |
int | stp_curve_set_long_data (stp_curve_t *curve, size_t count, const long *data) |
Set the data points in a curve from long values. | |
int | stp_curve_set_ulong_data (stp_curve_t *curve, size_t count, const unsigned long *data) |
Set the data points in a curve from unsigned long values. | |
int | stp_curve_set_int_data (stp_curve_t *curve, size_t count, const int *data) |
Set the data points in a curve from integer values. | |
int | stp_curve_set_uint_data (stp_curve_t *curve, size_t count, const unsigned int *data) |
Set the data points in a curve from unsigned integer values. | |
int | stp_curve_set_short_data (stp_curve_t *curve, size_t count, const short *data) |
Set the data points in a curve from short values. | |
int | stp_curve_set_ushort_data (stp_curve_t *curve, size_t count, const unsigned short *data) |
Set the data points in a curve from unsigned short values. | |
stp_curve_t * | stp_curve_get_subrange (const stp_curve_t *curve, size_t start, size_t count) |
Get a curve containing a subrange of data. | |
int | stp_curve_set_subrange (stp_curve_t *curve, const stp_curve_t *range, size_t start) |
const double * | stp_curve_get_data (const stp_curve_t *curve, size_t *count) |
Get a pointer to the curve's raw data. | |
const float * | stp_curve_get_float_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as floats. | |
const long * | stp_curve_get_long_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as longs. | |
const unsigned long * | stp_curve_get_ulong_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as unsigned longs. | |
const int * | stp_curve_get_int_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as integers. | |
const unsigned int * | stp_curve_get_uint_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as unsigned integers. | |
const short * | stp_curve_get_short_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as shorts. | |
const unsigned short * | stp_curve_get_ushort_data (const stp_curve_t *curve, size_t *count) |
Get pointer to the curve's raw data as unsigned shorts. | |
const stp_sequence_t * | stp_curve_get_sequence (const stp_curve_t *curve) |
Get the underlying stp_sequence_t data structure which stp_curve_t is derived from. | |
int | stp_curve_set_gamma (stp_curve_t *curve, double f_gamma) |
Set the gamma of a curve. | |
double | stp_curve_get_gamma (const stp_curve_t *curve) |
Get the gamma value of the curve. | |
int | stp_curve_set_point (stp_curve_t *curve, size_t where, double data) |
Set a point along the curve. | |
int | stp_curve_get_point (const stp_curve_t *curve, size_t where, double *data) |
Get a point along the curve. | |
int | stp_curve_interpolate_value (const stp_curve_t *curve, double where, double *result) |
Interpolate a point along the curve. | |
int | stp_curve_resample (stp_curve_t *curve, size_t points) |
Resample a curve (change the number of points). | |
int | stp_curve_rescale (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode) |
Rescale a curve (multiply all points by a scaling constant). | |
int | stp_curve_write (FILE *file, const stp_curve_t *curve) |
Write a curve to a file. | |
char * | stp_curve_write_string (const stp_curve_t *curve) |
Write a curve to a string. | |
stp_curve_t * | stp_curve_create_from_stream (FILE *fp) |
Create a curve from a stream. | |
stp_curve_t * | stp_curve_create_from_file (const char *file) |
Create a curve from a stream. | |
stp_curve_t * | stp_curve_create_from_string (const char *string) |
Create a curve from a string. | |
int | stp_curve_compose (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points) |
Compose two curves, creating a third curve. |
curve "inherits" from the sequence data structure (implemented via containment), since the curve data is represented internally as a sequence of numbers, for linear and spline curves. Linear Piecewise Curves (LPCs) should be implemented in the future which represent a curve in a more compact format.
Various operations are supported, including interpolation and composition.
|
The curve opaque data type.
|
|
Bounds exceeded behaviour.
Definition at line 95 of file curve.h. Referenced by stp_curve_rescale(). |
|
Composition types.
Definition at line 84 of file curve.h. Referenced by interpolate_points(), stp_curve_compose(), stp_curve_rescale(), and stp_read_and_compose_curves(). |
|
Curve types.
Definition at line 66 of file curve.h. Referenced by stp_curve_create_from_xmltree(), stp_curve_set_interpolation_type(), and stp_xmltree_create_from_curve(). |
|
Wrapping mode.
Definition at line 75 of file curve.h. Referenced by stp_curve_create(), stp_curve_create_from_xmltree(), stp_xmltree_create_from_curve(), and stpi_curve_ctor(). |
|
Compose two curves, creating a third curve. Only add and multiply composition is currently supported. If both curves are gamma curves with the same sign, and the operation is multiplication or division, the returned curve is a gamma curve with the appropriate number of points. Both a and b must have the same wraparound type.
Definition at line 977 of file curve.c. References create_gamma_curve(), curve_point_limit, interpolate_points(), lcm(), STP_CURVE_BOUNDS_RESCALE, STP_CURVE_COMPOSE_ADD, STP_CURVE_COMPOSE_MULTIPLY, stp_curve_compose_t, stp_curve_count_points(), stp_curve_create(), stp_curve_destroy(), stp_curve_get_bounds(), stp_curve_get_gamma(), stp_curve_get_wrap(), stp_curve_rescale(), stp_curve_set_data(), STP_CURVE_WRAP_AROUND, stp_free(), and stp_malloc(). Referenced by stp_read_and_compose_curves(). |
|
Copy an curve. Both dest and source must be valid curves previously created with stp_curve_create().
Definition at line 338 of file curve.c. References check_curve(), curve_dtor(), stp_curve::curve_type, stp_curve::gamma, stp_curve::recompute_interval, stp_curve::seq, stp_sequence_create_copy(), and stp_curve::wrap_mode. Referenced by compute_one_lut(), initialize_color_curves(), stp_curve_create_copy(), and stpi_compute_lut(). |
|
Get the number of allocated points in the curve.
Definition at line 388 of file curve.c. References check_curve(), and get_point_count(). Referenced by generic_rgb_to_kcmy(), initialize_gcr_curve(), interpolate_points(), rgb_to_rgb(), stp_curve_compose(), stp_curve_create_from_xmltree(), stp_curve_get_subrange(), and stp_curve_set_subrange(). |
|
Create a new curve. Curves have y=lower..upper. The default bounds are 0..1. The default interpolation type is linear. There are no points allocated, and the gamma is defaulted to 1. A wrapped curve has the same value at x=0 and x=1. The wrap mode of a curve cannot be changed except by routines that destroy the old curve entirely (e. g. stp_curve_copy, stp_curve_read).
Definition at line 309 of file curve.c. References STP_CURVE_WRAP_AROUND, stp_curve_wrap_mode_t, STP_CURVE_WRAP_NONE, stp_zalloc(), and stpi_curve_ctor(). Referenced by allocate_lut(), compute_gcr_curve(), create_gamma_curve(), stp_curve_compose(), stp_curve_create_copy(), stp_curve_create_from_xmltree(), and stp_curve_get_subrange(). |
|
Copy and allocate an curve. dest will be created, and then the contents of source will be copied into it. dest must not have been previously allocated with stp_curve_create().
Definition at line 351 of file curve.c. References check_curve(), stp_curve_copy(), stp_curve_create(), and stp_curve::wrap_mode. Referenced by compute_one_lut(), copy_lut(), generic_rgb_to_kcmy(), initialize_color_curves(), initialize_gcr_curve(), stp_curve_cache_set_curve_copy(), stp_set_curve_parameter(), stp_set_default_curve_parameter(), stpi_color_traditional_describe_parameter(), stpi_compute_lut(), and value_copy(). |
|
Create a curve from a stream.
Definition at line 1438 of file curve.c. References STP_DBG_XML, stp_deprintf(), stp_erprintf(), STP_MXML_NO_CALLBACK, stp_mxmlDelete(), stp_mxmlLoadFile(), stp_xml_exit(), stp_xml_init(), and xml_doc_get_curve(). |
|
Create a curve from a stream.
Definition at line 1468 of file curve.c. References STP_DBG_XML, stp_deprintf(), STP_MXML_NO_CALLBACK, stp_mxmlDelete(), stp_mxmlLoadFile(), stp_xml_exit(), stp_xml_init(), and xml_doc_get_curve(). |
|
Create a curve from a string.
Definition at line 1489 of file curve.c. References STP_DBG_XML, stp_deprintf(), STP_MXML_NO_CALLBACK, stp_mxmlDelete(), stp_mxmlLoadString(), stp_xml_exit(), stp_xml_init(), and xml_doc_get_curve(). Referenced by adjust_print_quality(), olympus_do_print(), pcl_do_print(), and stp_read_and_compose_curves(). |
|
Destroy an curve. It is an error to destroy the curve more than once.
Definition at line 331 of file curve.c. References curve_dtor(), and stp_free(). Referenced by adjust_print_quality(), canon_do_print(), create_gamma_curve(), lexmark_do_print(), olympus_do_print(), pcl_do_print(), stp_curve_compose(), stp_curve_create_from_xmltree(), stp_curve_free_curve_cache(), stp_curve_get_subrange(), stp_parameter_description_destroy(), stp_read_and_compose_curves(), stp_set_curve_parameter(), and value_freefunc(). |
|
Get the lower and upper bounds on a curve.
Definition at line 368 of file curve.c. References check_curve(), stp_curve::seq, and stp_sequence_get_bounds(). Referenced by invert_curve(), stp_curve_compose(), stp_curve_get_subrange(), stp_xmltree_create_from_curve(), and verify_curve_param(). |
|
Get a pointer to the curve's raw data.
Definition at line 480 of file curve.c. References check_curve(), get_point_count(), stp_curve::seq, and stp_sequence_get_data(). Referenced by invert_curve(), stp_curve_cache_curve_data(), stp_curve_cache_get_count(), stp_curve_cache_get_double_data(), stp_curve_get_subrange(), and stp_xmltree_create_from_curve(). |
|
Get pointer to the curve's raw data as floats.
|
|
Get the gamma value of the curve.
Definition at line 431 of file curve.c. References check_curve(), and stp_curve::gamma. Referenced by invert_curve(), stp_curve_compose(), and stp_xmltree_create_from_curve(). |
|
Get pointer to the curve's raw data as integers.
|
|
Get the curve interpolation type.
Definition at line 412 of file curve.c. References check_curve(), and stp_curve::curve_type. Referenced by stp_xmltree_create_from_curve(). |
|
Get pointer to the curve's raw data as longs.
|
|
Get a point along the curve.
Definition at line 605 of file curve.c. References check_curve(), get_point_count(), stp_curve::seq, and stp_sequence_get_point(). Referenced by generic_rgb_to_kcmy(), and initialize_gcr_curve(). |
|
Definition at line 381 of file curve.c. References check_curve(), stp_curve::seq, and stp_sequence_get_range(). |
|
Get the underlying stp_sequence_t data structure which stp_curve_t is derived from. This can be used for fast access to the raw data.
Definition at line 614 of file curve.c. References check_curve(), and stp_curve::seq. |
|
Get pointer to the curve's raw data as shorts.
|
|
Get a curve containing a subrange of data. If the start or count is invalid, the returned curve will compare equal to NULL (i. e. it will be a null pointer). start and count must not exceed the number of points in the curve, and count must be at least 2.
Definition at line 542 of file curve.c. References stp_curve_count_points(), stp_curve_create(), stp_curve_destroy(), stp_curve_get_bounds(), stp_curve_get_data(), stp_curve_set_bounds(), stp_curve_set_data(), and STP_CURVE_WRAP_NONE. |
|
Get pointer to the curve's raw data as unsigned integers.
|
|
Get pointer to the curve's raw data as unsigned longs.
|
|
Get pointer to the curve's raw data as unsigned shorts.
Referenced by fast_gray_to_rgb(), fast_rgb_to_rgb(), generic_cmy_to_kcmy(), gray_to_gray(), gray_to_rgb(), rgb_to_gray(), rgb_to_rgb(), stp_curve_cache_curve_data(), and stp_curve_cache_get_ushort_data(). |
|
Get the wrapping mode.
Definition at line 395 of file curve.c. References check_curve(), and stp_curve::wrap_mode. Referenced by stp_curve_compose(), stp_xmltree_create_from_curve(), and verify_curve_param(). |
|
Interpolate a point along the curve.
Definition at line 820 of file curve.c. References check_curve(), stp_curve::gamma, get_real_point_count(), interpolate_gamma_internal(), and interpolate_point_internal(). Referenced by adjust_hsl(), adjust_hsl_bright(), adjust_hue(), and interpolate_points(). |
|
Resample a curve (change the number of points). This does not destroy the gamma value of a curve. Points are interpolated as required; any interpolation that would place points outside of the bounds of the curve will be clipped to the bounds.
Definition at line 839 of file curve.c. References check_curve(), curve_point_limit, stp_curve::gamma, get_point_count(), get_real_point_count(), interpolate_gamma_internal(), interpolate_point_internal(), stp_curve::recompute_interval, stp_curve::seq, STP_CURVE_WRAP_AROUND, stp_free(), stp_malloc(), stp_sequence_set_subrange(), stpi_curve_set_points(), and stp_curve::wrap_mode. Referenced by compute_a_curve(), compute_a_curve_fast(), compute_a_curve_full(), compute_one_lut(), create_gamma_curve(), fast_gray_to_rgb(), fast_rgb_to_rgb(), generic_cmy_to_kcmy(), generic_rgb_to_kcmy(), gray_to_gray(), initialize_color_curves(), initialize_gcr_curve(), rgb_to_gray(), stp_curve_set_gamma(), and stpi_compute_lut(). |
|
|
Set the lower and upper bounds on a curve. To change the bounds adjusting data as required, use stp_curve_rescale instead.
Definition at line 361 of file curve.c. References check_curve(), stp_curve::seq, and stp_sequence_set_bounds(). Referenced by allocate_lut(), compute_gcr_curve(), create_gamma_curve(), generic_rgb_to_kcmy(), initialize_gcr_curve(), stp_curve_create_from_xmltree(), and stp_curve_get_subrange(). |
|
Set all data points of the curve. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
Definition at line 438 of file curve.c. References check_curve(), curve_point_limit, stp_curve::gamma, stp_curve::recompute_interval, stp_curve::seq, STP_CURVE_WRAP_AROUND, stp_erprintf(), stp_sequence_get_bounds(), stp_sequence_set_point(), stp_sequence_set_subrange(), stpi_curve_set_points(), and stp_curve::wrap_mode. Referenced by compute_a_curve(), compute_a_curve_fast(), compute_a_curve_full(), compute_gcr_curve(), invert_curve(), stp_curve_compose(), stp_curve_create_from_xmltree(), and stp_curve_get_subrange(). |
|
Set the data points in a curve from float values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Set the gamma of a curve. This replaces all existing points along the curve. The bounds are set to 0..1. If the gamma value is positive, the function is increasing; if negative, the function is decreasing. Count must be either 0 or at least 2. If the count is zero, the gamma of the curve is set for interpolation purposes, but points cannot be assigned to. It is illegal, to set gamma on a wrap-mode curve.
Definition at line 419 of file curve.c. References check_curve(), clear_curve_data(), stp_curve::gamma, stp_curve_resample(), and stp_curve::wrap_mode. Referenced by create_gamma_curve(), invert_curve(), and stp_curve_create_from_xmltree(). |
|
Set the data points in a curve from integer values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Set the curve interpolation type.
Definition at line 402 of file curve.c. References check_curve(), stp_curve::curve_type, stp_curve_type_t, and stpi_curve_type_count. Referenced by stp_curve_create_from_xmltree(). |
|
Set the data points in a curve from long values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Set a point along the curve. This call destroys any gamma value assigned to the curve.
Definition at line 587 of file curve.c. References check_curve(), stp_curve::gamma, get_point_count(), invalidate_auxiliary_data(), stp_curve::seq, STP_CURVE_WRAP_AROUND, stp_sequence_set_point(), and stp_curve::wrap_mode. Referenced by initialize_gcr_curve(). |
|
Set the data points in a curve from short values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Definition at line 563 of file curve.c. References check_curve(), stp_curve::gamma, invalidate_auxiliary_data(), stp_curve::recompute_interval, stp_curve::seq, stp_curve_count_points(), stp_sequence_get_bounds(), stp_sequence_get_data(), stp_sequence_get_range(), and stp_sequence_set_subrange(). |
|
Set the data points in a curve from unsigned integer values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Set the data points in a curve from unsigned long values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Set the data points in a curve from unsigned short values. If any of the data points fall outside the bounds, the operation is not performed and FALSE is returned.
|
|
Write a curve to a file. The printable representation is guaranteed to contain only 7-bit printable ASCII characters, and is null-terminated. The curve will not contain any space, newline, or comma characters. Furthermore, a printed curve will be read back correctly in all locales. These calls are not guaranteed to provide more than 6 decimal places of precision or +/-0.5e-6 accuracy, whichever is less.
Definition at line 1360 of file curve.c. References curve_whitespace_callback(), stp_mxmlDelete(), stp_mxmlSaveFile(), stp_xml_exit(), stp_xml_init(), and xmldoc_create_from_curve(). |
|
Write a curve to a string. The printable representation is guaranteed to contain only 7-bit printable ASCII characters, and is null-terminated. The curve will not contain any space, newline, or comma characters. Furthermore, a printed curve will be read back correctly in all locales. These calls are not guaranteed to provide more than 6 decimal places of precision or +/-0.5e-6 accuracy, whichever is less.
Definition at line 1384 of file curve.c. References curve_whitespace_callback(), stp_mxmlDelete(), stp_mxmlSaveAllocString(), stp_xml_exit(), stp_xml_init(), and xmldoc_create_from_curve(). Referenced by print_debug_params(). |