use new converter
This commit is contained in:
parent
d56943f2c2
commit
2065317272
16
TODO
16
TODO
@ -1,3 +1,16 @@
|
|||||||
|
- add mono as a colourspace? also rad?
|
||||||
|
|
||||||
|
- something to test if an image is in a supported colourspace?
|
||||||
|
|
||||||
|
at the moment we only look at interpretation, but for things like labq
|
||||||
|
we should check coding too
|
||||||
|
|
||||||
|
labs needs more checks than that
|
||||||
|
|
||||||
|
_RGB and _sRGB as well
|
||||||
|
|
||||||
|
move colour_convert into a separate file
|
||||||
|
|
||||||
- im_icc_ac2rc needs doing once we have a general 'convert' operator
|
- im_icc_ac2rc needs doing once we have a general 'convert' operator
|
||||||
|
|
||||||
- test new icc stuff with lcms1
|
- test new icc stuff with lcms1
|
||||||
@ -5,9 +18,6 @@
|
|||||||
- should we have a better thing to stop convert_saveable running for vips
|
- should we have a better thing to stop convert_saveable running for vips
|
||||||
images?
|
images?
|
||||||
|
|
||||||
- convert_saveable should become a lot simpler with a general colourspace
|
|
||||||
converter
|
|
||||||
|
|
||||||
- why do we need the extra vips_image_write() at the end of
|
- why do we need the extra vips_image_write() at the end of
|
||||||
vips_colour_convert_build()? why can't we just g_object_set() x?
|
vips_colour_convert_build()? why can't we just g_object_set() x?
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ vips_colour_convert_class_init( VipsColourConvertClass *class )
|
|||||||
gobject_class->set_property = vips_object_set_property;
|
gobject_class->set_property = vips_object_set_property;
|
||||||
gobject_class->get_property = vips_object_get_property;
|
gobject_class->get_property = vips_object_get_property;
|
||||||
|
|
||||||
vobject_class->nickname = "convert";
|
vobject_class->nickname = "colour_convert";
|
||||||
vobject_class->description = _( "convert to a new colourspace" );
|
vobject_class->description = _( "convert to a new colourspace" );
|
||||||
vobject_class->build = vips_colour_convert_build;
|
vobject_class->build = vips_colour_convert_build;
|
||||||
|
|
||||||
@ -618,7 +618,7 @@ vips_colour_convert( VipsImage *in, VipsImage **out,
|
|||||||
int result;
|
int result;
|
||||||
|
|
||||||
va_start( ap, space );
|
va_start( ap, space );
|
||||||
result = vips_call_split( "convert", ap, in, out, space );
|
result = vips_call_split( "colour_convert", ap, in, out, space );
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
return( result );
|
return( result );
|
||||||
|
@ -290,70 +290,3 @@ im_col_dE00( float L1, float a1, float b1,
|
|||||||
|
|
||||||
return( dE00 );
|
return( dE00 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Quick hack wrappers for common colour functions in the new style.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
vips_argb2rgba( VipsImage *in, VipsImage **out, ... )
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
va_start( ap, out );
|
|
||||||
result = vips_call_split( "im_argb2rgba", ap, in, out );
|
|
||||||
va_end( ap );
|
|
||||||
|
|
||||||
return( result );
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
vips_Yxy2Lab( VipsImage *in, VipsImage **out, ... )
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
va_start( ap, out );
|
|
||||||
result = vips_call_split( "im_Yxy2Lab", ap, in, out );
|
|
||||||
va_end( ap );
|
|
||||||
|
|
||||||
return( result );
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
vips_UCS2XYZ( VipsImage *in, VipsImage **out, ... )
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
va_start( ap, out );
|
|
||||||
result = vips_call_split( "im_UCS2XYZ", ap, in, out );
|
|
||||||
va_end( ap );
|
|
||||||
|
|
||||||
return( result );
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
im__colour_unary( const char *domain,
|
|
||||||
IMAGE *in, IMAGE *out, VipsType type,
|
|
||||||
im_wrapone_fn buffer_fn, void *a, void *b )
|
|
||||||
{
|
|
||||||
IMAGE *t[1];
|
|
||||||
|
|
||||||
if( im_check_uncoded( domain, in ) ||
|
|
||||||
im_check_bands( domain, in, 3 ) ||
|
|
||||||
im_open_local_array( out, t, 1, domain, "p" ) ||
|
|
||||||
im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) )
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
if( im_cp_desc( out, t[0] ) )
|
|
||||||
return( -1 );
|
|
||||||
out->Type = type;
|
|
||||||
|
|
||||||
if( im_wrapone( t[0], out,
|
|
||||||
(im_wrapone_fn) buffer_fn, a, b ) )
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -46,6 +46,31 @@
|
|||||||
#include <vips/vips.h>
|
#include <vips/vips.h>
|
||||||
#include <vips/internal.h>
|
#include <vips/internal.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
im__colour_unary( const char *domain,
|
||||||
|
IMAGE *in, IMAGE *out, VipsType type,
|
||||||
|
im_wrapone_fn buffer_fn, void *a, void *b )
|
||||||
|
{
|
||||||
|
IMAGE *t[1];
|
||||||
|
|
||||||
|
if( im_check_uncoded( domain, in ) ||
|
||||||
|
im_check_bands( domain, in, 3 ) ||
|
||||||
|
im_open_local_array( out, t, 1, domain, "p" ) ||
|
||||||
|
im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
|
if( im_cp_desc( out, t[0] ) )
|
||||||
|
return( -1 );
|
||||||
|
out->Type = type;
|
||||||
|
|
||||||
|
if( im_wrapone( t[0], out,
|
||||||
|
(im_wrapone_fn) buffer_fn, a, b ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
IMAGE *in, *out;
|
IMAGE *in, *out;
|
||||||
|
|
||||||
|
@ -1237,94 +1237,11 @@ vips_foreign_convert_saveable( VipsForeignSave *save )
|
|||||||
|
|
||||||
/* Interpret the Type field for colorimetric images.
|
/* Interpret the Type field for colorimetric images.
|
||||||
*/
|
*/
|
||||||
if( in->Bands == 3 &&
|
if( in->Bands == 3 ) {
|
||||||
in->BandFmt == VIPS_FORMAT_SHORT &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_LABS ) {
|
|
||||||
VipsImage *out;
|
VipsImage *out;
|
||||||
|
|
||||||
if( vips_LabS2LabQ( in, &out, NULL ) ) {
|
if( vips_colour_convert( in, &out,
|
||||||
g_object_unref( in );
|
VIPS_INTERPRETATION_sRGB, NULL ) ) {
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Coding == VIPS_CODING_LABQ ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_LabQ2Lab( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Coding != VIPS_CODING_NONE ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Bands == 3 &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_LCH ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_LCh2Lab( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Bands == 3 &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_YXY ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_Yxy2Lab( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Bands == 3 &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_UCS ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_UCS2XYZ( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Bands == 3 &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_LAB ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_Lab2XYZ( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( in );
|
|
||||||
|
|
||||||
in = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( in->Bands == 3 &&
|
|
||||||
in->Type == VIPS_INTERPRETATION_XYZ ) {
|
|
||||||
VipsImage *out;
|
|
||||||
|
|
||||||
if( vips_XYZ2sRGB( in, &out, NULL ) ) {
|
|
||||||
g_object_unref( in );
|
g_object_unref( in );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user