app: swallow gimp_temp_buf_demultiply() into gimp_image_get_new_preview()
This commit is contained in:
@ -147,7 +147,49 @@ gimp_image_get_new_preview (GimpViewable *viewable,
|
|||||||
* preview code would know how to deal with pre-multiply alpha.
|
* preview code would know how to deal with pre-multiply alpha.
|
||||||
*/
|
*/
|
||||||
if (is_premult)
|
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;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -149,58 +149,6 @@ gimp_temp_buf_scale (GimpTempBuf *src,
|
|||||||
return dest;
|
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 *
|
guchar *
|
||||||
gimp_temp_buf_get_data (const GimpTempBuf *buf)
|
gimp_temp_buf_get_data (const GimpTempBuf *buf)
|
||||||
{
|
{
|
||||||
|
@ -45,8 +45,6 @@ GimpTempBuf * gimp_temp_buf_scale (GimpTempBuf *buf,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height) G_GNUC_WARN_UNUSED_RESULT;
|
gint height) G_GNUC_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
void gimp_temp_buf_demultiply (GimpTempBuf *buf);
|
|
||||||
|
|
||||||
guchar * gimp_temp_buf_get_data (const GimpTempBuf *buf);
|
guchar * gimp_temp_buf_get_data (const GimpTempBuf *buf);
|
||||||
gsize gimp_temp_buf_get_data_size (GimpTempBuf *buf);
|
gsize gimp_temp_buf_get_data_size (GimpTempBuf *buf);
|
||||||
guchar * gimp_temp_buf_data_clear (GimpTempBuf *buf);
|
guchar * gimp_temp_buf_data_clear (GimpTempBuf *buf);
|
||||||
|
Reference in New Issue
Block a user