app: swallow gimp_temp_buf_demultiply() into gimp_image_get_new_preview()

This commit is contained in:
Michael Natterer
2012-04-09 01:52:08 +02:00
parent feb4b9cfe9
commit 631134180e
3 changed files with 43 additions and 55 deletions

View File

@ -147,7 +147,49 @@ gimp_image_get_new_preview (GimpViewable *viewable,
* preview code would know how to deal with pre-multiply alpha.
*/
if (is_premult)
gimp_temp_buf_demultiply (buf);
{
guchar *data;
gint pixels;
g_return_if_fail (buf != NULL);
switch (babl_format_get_bytes_per_pixel (buf->format))
{
case 1:
break;
case 2:
data = gimp_temp_buf_get_data (buf);
pixels = buf->width * buf->height;
while (pixels--)
{
data[0] = (data[0] << 8) / (data[1] + 1);
data += 2;
}
break;
case 3:
break;
case 4:
data = gimp_temp_buf_get_data (buf);
pixels = buf->width * buf->height;
while (pixels--)
{
data[0] = (data[0] << 8) / (data[3] + 1);
data[1] = (data[1] << 8) / (data[3] + 1);
data[2] = (data[2] << 8) / (data[3] + 1);
data += 4;
}
break;
default:
g_warn_if_reached ();
break;
}
}
return buf;
}

View File

@ -149,58 +149,6 @@ gimp_temp_buf_scale (GimpTempBuf *src,
return dest;
}
/**
* gimp_temp_buf_demultiply:
* @buf:
*
* Converts a GimpTempBuf with pre-multiplied alpha to a 'normal' GimpTempBuf.
*/
void
gimp_temp_buf_demultiply (GimpTempBuf *buf)
{
guchar *data;
gint pixels;
g_return_if_fail (buf != NULL);
switch (babl_format_get_bytes_per_pixel (buf->format))
{
case 1:
break;
case 2:
data = gimp_temp_buf_get_data (buf);
pixels = buf->width * buf->height;
while (pixels--)
{
data[0] = (data[0] << 8) / (data[1] + 1);
data += 2;
}
break;
case 3:
break;
case 4:
data = gimp_temp_buf_get_data (buf);
pixels = buf->width * buf->height;
while (pixels--)
{
data[0] = (data[0] << 8) / (data[3] + 1);
data[1] = (data[1] << 8) / (data[3] + 1);
data[2] = (data[2] << 8) / (data[3] + 1);
data += 4;
}
break;
default:
g_return_if_reached ();
break;
}
}
guchar *
gimp_temp_buf_get_data (const GimpTempBuf *buf)
{

View File

@ -45,8 +45,6 @@ GimpTempBuf * gimp_temp_buf_scale (GimpTempBuf *buf,
gint width,
gint height) G_GNUC_WARN_UNUSED_RESULT;
void gimp_temp_buf_demultiply (GimpTempBuf *buf);
guchar * gimp_temp_buf_get_data (const GimpTempBuf *buf);
gsize gimp_temp_buf_get_data_size (GimpTempBuf *buf);
guchar * gimp_temp_buf_data_clear (GimpTempBuf *buf);