app: add gimp_babl_component_format() and use it in GimpImage

This commit is contained in:
Michael Natterer 2012-04-22 19:47:46 +02:00
parent 8d4672eb5e
commit 8a55b13577
3 changed files with 87 additions and 7 deletions

View File

@ -1551,7 +1551,12 @@ gimp_image_get_mask_format (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return babl_format ("Y u8");
switch (gimp_image_get_precision (image))
{
case GIMP_PRECISION_U8: return babl_format ("Y u8");
}
g_return_val_if_reached (NULL);
}
gint
@ -2061,12 +2066,33 @@ gimp_image_get_component_format (const GimpImage *image,
switch (channel)
{
case GIMP_RED_CHANNEL: return babl_format ("R' u8");
case GIMP_GREEN_CHANNEL: return babl_format ("G' u8");
case GIMP_BLUE_CHANNEL: return babl_format ("B' u8");
case GIMP_GRAY_CHANNEL: return babl_format ("Y' u8");
case GIMP_INDEXED_CHANNEL: return babl_format ("Y' u8"); /* XXX: seems wrong */
case GIMP_ALPHA_CHANNEL: return babl_format ("A u8");
case GIMP_RED_CHANNEL:
return gimp_babl_component_format (GIMP_RGB,
gimp_image_get_precision (image),
RED);
case GIMP_GREEN_CHANNEL:
return gimp_babl_component_format (GIMP_RGB,
gimp_image_get_precision (image),
GREEN);
case GIMP_BLUE_CHANNEL:
return gimp_babl_component_format (GIMP_RGB,
gimp_image_get_precision (image),
BLUE);
case GIMP_ALPHA_CHANNEL:
return gimp_babl_component_format (GIMP_RGB,
gimp_image_get_precision (image),
ALPHA);
case GIMP_GRAY_CHANNEL:
return gimp_babl_component_format (GIMP_GRAY,
gimp_image_get_precision (image),
GRAY);
case GIMP_INDEXED_CHANNEL:
return babl_format ("Y' u8"); /* XXX: seems wrong */
}
return NULL;

View File

@ -206,3 +206,54 @@ gimp_babl_format (GimpImageBaseType base_type,
g_return_val_if_reached (NULL);
}
const Babl *
gimp_babl_component_format (GimpImageBaseType base_type,
GimpPrecision precision,
gint index)
{
switch (base_type)
{
case GIMP_RGB:
switch (precision)
{
case GIMP_PRECISION_U8:
switch (index)
{
case 0: return babl_format ("R' u8");
case 1: return babl_format ("G' u8");
case 2: return babl_format ("B' u8");
case 3: return babl_format ("A u8");
default:
break;
}
default:
break;
}
break;
case GIMP_GRAY:
switch (precision)
{
case GIMP_PRECISION_U8:
switch (index)
{
case 0: return babl_format ("Y' u8");
case 1: return babl_format ("A u8");
default:
break;
}
default:
break;
}
break;
case GIMP_INDEXED:
/* need to use the image's api for this */
break;
}
g_return_val_if_reached (NULL);
}

View File

@ -32,6 +32,9 @@ GimpPrecision gimp_babl_format_get_precision (const Babl *format);
const Babl * gimp_babl_format (GimpImageBaseType base_type,
GimpPrecision precision,
gboolean with_alpha);
const Babl * gimp_babl_component_format (GimpImageBaseType base_type,
GimpPrecision precision,
gint index);
#endif /* __GIMP_BABL_H__ */