mirror of https://github.com/GNOME/gimp.git
added missing code for grayscale previews.
2004-07-23 Sven Neumann <sven@gimp.org> * libgimp/gimppixbuf.c (gimp_pixbuf_from_data): added missing code for grayscale previews.
This commit is contained in:
parent
333489a6e2
commit
c84e84339a
|
@ -1,3 +1,8 @@
|
|||
2004-07-23 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* libgimp/gimppixbuf.c (gimp_pixbuf_from_data): added missing code
|
||||
for grayscale previews.
|
||||
|
||||
2004-07-23 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/core/gimpgradient-load.c (svg_parser_end_element): fixed
|
||||
|
|
|
@ -75,8 +75,8 @@ gimp_image_get_thumbnail (gint32 image_ID,
|
|||
NULL);
|
||||
|
||||
return gimp_pixbuf_from_data (data,
|
||||
thumb_width, thumb_height, thumb_bpp,
|
||||
alpha);
|
||||
thumb_width, thumb_height, thumb_bpp,
|
||||
alpha);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -131,12 +131,73 @@ gimp_pixbuf_from_data (guchar *data,
|
|||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
|
||||
g_return_val_if_fail (bpp == 3 || bpp == 4, NULL);
|
||||
switch (bpp)
|
||||
{
|
||||
case 1:
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
|
||||
{
|
||||
guchar *pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
gint y;
|
||||
|
||||
pixbuf = gdk_pixbuf_new_from_data (data,
|
||||
GDK_COLORSPACE_RGB, (bpp == 4), 8,
|
||||
width, height, width * bpp,
|
||||
(GdkPixbufDestroyNotify) g_free, NULL);
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
guchar *dest = pixels;
|
||||
gint x;
|
||||
|
||||
for (x = 0; x < width; x++, data += 1, dest += 3)
|
||||
{
|
||||
dest[0] = dest[1] = dest[2] = data[0];
|
||||
}
|
||||
|
||||
pixels += rowstride;
|
||||
}
|
||||
}
|
||||
bpp = 3;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
|
||||
{
|
||||
guchar *pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
gint y;
|
||||
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
guchar *dest = pixels;
|
||||
gint x;
|
||||
|
||||
for (x = 0; x < width; x++, data += 2, dest += 4)
|
||||
{
|
||||
dest[0] = dest[1] = dest[2] = data[0];
|
||||
dest[3] = data[1];
|
||||
}
|
||||
|
||||
pixels += rowstride;
|
||||
}
|
||||
}
|
||||
bpp = 4;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
pixbuf = gdk_pixbuf_new_from_data (data,
|
||||
GDK_COLORSPACE_RGB, FALSE, 8,
|
||||
width, height, width * bpp,
|
||||
(GdkPixbufDestroyNotify) g_free, NULL);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
pixbuf = gdk_pixbuf_new_from_data (data,
|
||||
GDK_COLORSPACE_RGB, TRUE, 8,
|
||||
width, height, width * bpp,
|
||||
(GdkPixbufDestroyNotify) g_free, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_return_val_if_reached (NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (bpp == 4)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue