diff --git a/ChangeLog b/ChangeLog index 25d74457..3254fce7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,8 @@ - vipsthumbnail -o allows absolute file names - much better exif handling for jpg images (thanks Gary) - preserve jpeg app13 (photoshop ipct) +- nearest neighbour goes back to round down ... round to nearest caused a + range of annoying problems, such as strange half-pixels along edges 14/11/12 started 7.30.6 - capture tiff warnings earlier diff --git a/TODO b/TODO index 0647e119..62c0b7e6 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,11 @@ +- now we've removed round-to-nearest from NN, we need something extra in the + affine transform to displace the input cods + + dx/dy displace output + +- check Nicolas's follow-up mail + +- check libtool version number, should be binary-compat with 7.30 - quadratic doesn't work for order 3 diff --git a/libvips/colour/Makefile.am b/libvips/colour/Makefile.am index 806f96ce..53141c97 100644 --- a/libvips/colour/Makefile.am +++ b/libvips/colour/Makefile.am @@ -4,7 +4,6 @@ libcolour_la_SOURCES = \ colour.c \ colour.h \ colourspace.c \ - colour_dispatch.c \ dE76.c \ dE00.c \ dECMC.c \ diff --git a/libvips/colour/colour.c b/libvips/colour/colour.c index ea2990e6..a324b21c 100644 --- a/libvips/colour/colour.c +++ b/libvips/colour/colour.c @@ -45,6 +45,195 @@ #include "colour.h" +/** + * SECTION: colour + * @short_description: colour operators + * @stability: Stable + * @see_also: arithmetic + * @include: vips/vips.h + * + * These operators let you transform coordinates and images between colour + * spaces, calculate colour differences, and move + * to and from device spaces. + * + * Radiance images have four 8-bits bands and store 8 bits of R, G and B and + * another 8 bits of exponent, common to all channels. They are widely used in + * the HDR imaging community. + * + * + * The colour functions can be divided into three main groups. First, + * functions to transform images between the different colour spaces supported + * by VIPS: RGB, sRGB, + * XYZ, Yxy, + * Lab, LabQ, + * LabS, LCh and + * CMC). Use vips_colourspace() to move an image to a + * target colourspace using the best sequence of colour transform operations. + * Secondly, there are a set of operations for + * calculating colour difference metrics. Finally, VIPS wraps LittleCMS and + * uses it to provide a set of operations for reading and writing images with + * ICC profiles. + * + * This figure shows how the VIPS colour spaces interconvert: + * + * + * + * The colour spaces supported by VIPS are: + * + * + * + * + * LabQ + * + * This is the principal VIPS colorimetric storage format. + * LabQ images have four 8-bit bands and store 10 bits of L and 11 bits + * of a and b. + * + * You cannot perform calculations on LabQ images (they are + * tagged with %VIPS_CODING_LABQ), though a few operations such as + * vips_extract_area() will work directly with them. + * + * + * + * + * LabS + * + * This format represents coordinates in CIELAB space as a + * three-band #VIPS_FORMAT_SHORT image, scaled to fit the full range of + * bits. It is the best format for computation, being relatively + * compact, quick, and accurate. Colour values expressed in this way + * are hard to visualise. + * + * + * + * + * Lab + * + * Lab colourspace represents CIELAB colour values with a three-band + * #VIPS_FORMAT_FLOAT image. This is the simplest format for general + * work: adding the constant 50 to the L channel, for example, has the + * expected result. + * + * VIPS uses D65 LAB, but you can use other colour temperatures with a + * little effort, see vips_XYZ2Lab(). + * + * + * + * + * XYZ + * + * CIE XYZ colour space represented as a three-band #VIPS_FORMAT_FLOAT + * image. + * + * + * + * + * Yxy + * + * CIE Yxy colour space represented as a three-band #VIPS_FORMAT_FLOAT + * image. + * + * + * + * + * RGB / sRGB + * + * VIPS converts XYZ to and from sRGB using the usual formula: + * + * http://en.wikipedia.org/wiki/SRGB + * + * You can also use vips_icc_transform() and friends to go to and from + * device space with a generic profile. + * + * + * + * + * LCh + * + * Like Lab, but rectangular ab coordinates + * are replaced with + * polar Ch (Chroma and hue) coordinates. + * Hue angles are expressed in degrees. + * + * + * + * + * CMC + * + * A colour space based on the CMC(1:1) colour difference measurement. + * This is a highly uniform colour space, much better than CIELAB for + * expressing small differences. + * + * You can calculate metrics like CMC(2:1) by scaling the spaces before + * finding differences. + * + * + * + */ + +/* Areas under curves for Dxx. 2 degree observer. + */ + +/** + * VIPS_D93_X0: + * + * Areas under curves for D93, 2 degree observer. + */ + +/** + * VIPS_D75_X0: + * + * Areas under curves for D75, 2 degree observer. + */ + +/** + * VIPS_D65_X0: + * + * Areas under curves for D65, 2 degree observer. + */ + +/** + * VIPS_D55_X0: + * + * Areas under curves for D55, 2 degree observer. + */ + +/** + * VIPS_D50_X0: + * + * Areas under curves for D50, 2 degree observer. + */ + +/** + * VIPS_A_X0: + * + * Areas under curves for illuminant A (2856K), 2 degree observer. + */ + +/** + * VIPS_B_X0: + * + * Areas under curves for illuminant B (4874K), 2 degree observer. + */ + +/** + * VIPS_C_X0: + * + * Areas under curves for illuminant C (6774K), 2 degree observer. + */ + +/** + * VIPS_E_X0: + * + * Areas under curves for equal energy illuminant E. + */ + +/** + * VIPS_D3250_X0: + * + * Areas under curves for black body at 3250K, 2 degree observer. + */ + G_DEFINE_ABSTRACT_TYPE( VipsColour, vips_colour, VIPS_TYPE_OPERATION ); /* Maximum number of input images -- why not? diff --git a/libvips/deprecated/Makefile.am b/libvips/deprecated/Makefile.am index be37ac80..38a766e8 100644 --- a/libvips/deprecated/Makefile.am +++ b/libvips/deprecated/Makefile.am @@ -4,6 +4,7 @@ libdeprecated_la_SOURCES = \ im_openslide2vips.c \ im_lab_morph.c \ deprecated_dispatch.c \ + colour_dispatch.c \ wrapvips7.c \ lazy.c \ im_dif_std.c \ diff --git a/libvips/colour/colour_dispatch.c b/libvips/deprecated/colour_dispatch.c similarity index 82% rename from libvips/colour/colour_dispatch.c rename to libvips/deprecated/colour_dispatch.c index 7265810b..dc280a28 100644 --- a/libvips/colour/colour_dispatch.c +++ b/libvips/deprecated/colour_dispatch.c @@ -38,192 +38,6 @@ #include -/** - * SECTION: colour - * @short_description: colour operators - * @stability: Stable - * @see_also: arithmetic - * @include: vips/vips.h - * - * These operators let you transform coordinates and images between colour - * spaces, calculate colour differences, and move - * to and from device spaces. - * - * Radiance images have four 8-bits bands and store 8 bits of R, G and B and - * another 8 bits of exponent, common to all channels. They are widely used in - * the HDR imaging community. - * - * - * The colour functions can be divided into three main groups. First, - * functions to transform images between the different colour spaces supported - * by VIPS: RGB (also referred to as - * disp), sRGB, - * XYZ, Yxy, - * Lab, LabQ, - * LabS, LCh and - * CMC). Secondly, there are a set of operations for - * calculating colour difference metrics. Finally, VIPS wraps LittleCMS and - * uses it to provide a set of operations for reading and writing images with - * ICC profiles. - * - * This figure shows how the VIPS colour spaces interconvert: - * - * - * - * The colour spaces supported by VIPS are: - * - * - * - * - * LabQ - * - * This is the principal VIPS colorimetric storage format. - * LabQ images have four 8-bit bands and store 10 bits of L and 11 bits - * of a and b. - * - * You cannot perform calculations on LabQ images (they are - * tagged with %IM_CODING_LABQ), though a few operations such as - * im_extract_area() will work directly with them. - * - * - * - * - * LabS - * - * This format represents coordinates in CIELAB space as a - * three-band #IM_BANDFMT_SHORT image, scaled to fit the full range of - * bits. It is the best format for computation, being relatively - * compact, quick, and accurate. Colour values expressed in this way - * are hard to visualise. - * - * - * - * - * Lab - * - * Lab colourspace represents CIELAB colour values with a three-band - * #IM_BANDFMT_FLOAT image. This is the simplest format for general - * work: adding the constant 50 to the L channel, for example, has the - * expected result. - * - * VIPS uses D65 LAB, but you can use other colour temperatures with a - * little effort, see im_XYZ2Lab_temp(). - * - * - * - * - * XYZ - * - * CIE XYZ colour space represented as a three-band %IM_BANDFMT_FLOAT - * image. - * - * - * - * - * Yxy - * - * CIE Yxy colour space represented as a three-band %IM_BANDFMT_FLOAT - * image. - * - * - * - * - * RGB - * - * (also refered to as disp+) This is a generic 8-bit RGB - * image. VIPS has a system for going to and from RGB with a simple - * display structure, but it's mostly deprecated. See - * disp. - * - * Use im_icc_export() and friends as a modern replacement. - * - * - * - * - * LCh - * - * Like Lab, but rectangular ab coordinates - * are replaced with - * polar Ch (Chroma and hue) coordinates. - * Hue angles are expressed in degrees. - * - * - * - * - * CMC - * - * A colour space based on the CMC(1:1) colour difference measurement. - * This is a highly uniform colour space, much better than CIELAB for - * expressing small differences. Conversions to and from - * CMC are extremely slow. - * - * - * - */ - -/* Areas under curves for Dxx. 2 degree observer. - */ - -/** - * IM_D93_X0: - * - * Areas under curves for D93, 2 degree observer. - */ - -/** - * IM_D75_X0: - * - * Areas under curves for D75, 2 degree observer. - */ - -/** - * IM_D65_X0: - * - * Areas under curves for D65, 2 degree observer. - */ - -/** - * IM_D55_X0: - * - * Areas under curves for D55, 2 degree observer. - */ - -/** - * IM_D50_X0: - * - * Areas under curves for D50, 2 degree observer. - */ - -/** - * IM_A_X0: - * - * Areas under curves for illuminant A (2856K), 2 degree observer. - */ - -/** - * IM_B_X0: - * - * Areas under curves for illuminant B (4874K), 2 degree observer. - */ - -/** - * IM_C_X0: - * - * Areas under curves for illuminant C (6774K), 2 degree observer. - */ - -/** - * IM_E_X0: - * - * Areas under curves for equal energy illuminant E. - */ - -/** - * IM_D3250_X0: - * - * Areas under curves for black body at 3250K, 2 degree observer. - */ - /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { diff --git a/libvips/resample/interpolate.c b/libvips/resample/interpolate.c index c46f3271..7a1431cd 100644 --- a/libvips/resample/interpolate.c +++ b/libvips/resample/interpolate.c @@ -333,10 +333,8 @@ vips_interpolate_nearest_interpolate( VipsInterpolate *interpolate, { const int ps = IM_IMAGE_SIZEOF_PEL( in->im ); - /* We know x/y are always positive, so we can just (int) them. - */ - const int xi = (int) (x + 0.5); - const int yi = (int) (y + 0.5); + const int xi = (int) x; + const int yi = (int) y; const VipsPel *p = IM_REGION_ADDR( in, xi, yi ); VipsPel *q = (VipsPel *) out;