[gimp] file-tga: Use the colormap origin / first entry index field
- From: Mukund Sivaraman <muks src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] file-tga: Use the colormap origin / first entry index field
- Date: Sat, 20 Dec 2014 17:55:57 +0000 (UTC)
commit ddda6a15c329d2098ff1198aefc4acdb2858a277
Author: Mukund Sivaraman <muks banu com>
Date: Sat Dec 20 23:11:12 2014 +0530
file-tga: Use the colormap origin / first entry index field
plug-ins/common/file-tga.c | 42 ++++++++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 10 deletions(-)
---
diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c
index 7b11baa..8c67eed 100644
--- a/plug-ins/common/file-tga.c
+++ b/plug-ins/common/file-tga.c
@@ -864,7 +864,8 @@ apply_colormap (guchar *dest,
const guchar *src,
guint width,
const guchar *cmap,
- gboolean alpha)
+ gboolean alpha,
+ guint16 index)
{
guint x;
@@ -872,10 +873,10 @@ apply_colormap (guchar *dest,
{
for (x = 0; x < width; x++)
{
- *(dest++) = cmap[*src * 4];
- *(dest++) = cmap[*src * 4 + 1];
- *(dest++) = cmap[*src * 4 + 2];
- *(dest++) = cmap[*src * 4 + 3];
+ *(dest++) = cmap[(*src - index) * 4];
+ *(dest++) = cmap[(*src - index) * 4 + 1];
+ *(dest++) = cmap[(*src - index) * 4 + 2];
+ *(dest++) = cmap[(*src - index) * 4 + 3];
src++;
}
@@ -884,9 +885,9 @@ apply_colormap (guchar *dest,
{
for (x = 0; x < width; x++)
{
- *(dest++) = cmap[*src * 3];
- *(dest++) = cmap[*src * 3 + 1];
- *(dest++) = cmap[*src * 3 + 2];
+ *(dest++) = cmap[(*src - index) * 3];
+ *(dest++) = cmap[(*src - index) * 3 + 1];
+ *(dest++) = cmap[(*src - index) * 3 + 2];
src++;
}
@@ -894,6 +895,20 @@ apply_colormap (guchar *dest,
}
static void
+apply_index (guchar *dest,
+ const guchar *src,
+ guint width,
+ guint16 index)
+{
+ guint x;
+
+ for (x = 0; x < width; x++)
+ {
+ *(dest++) = *(src++) - index;
+ }
+}
+
+static void
read_line (FILE *fp,
guchar *row,
guchar *buf,
@@ -930,7 +945,14 @@ read_line (FILE *fp,
{
gboolean has_alpha = (info->alphaBits > 0);
- apply_colormap (row, buf, info->width, convert_cmap, has_alpha);
+ apply_colormap (row, buf, info->width, convert_cmap, has_alpha,
+ info->colorMapIndex);
+ }
+ else if (info->imageType == TGA_TYPE_MAPPED)
+ {
+ g_assert(bpp == 1);
+
+ apply_index (row, buf, info->width, info->colorMapIndex);
}
else
{
@@ -970,7 +992,7 @@ ReadImage (FILE *fp,
dtype = GIMP_RGBA_IMAGE;
convert_cmap = g_new (guchar, info->colorMapLength * 4);
}
- else if (info->colorMapLength > 256)
+ else if (info->colorMapIndex + info->colorMapLength > 256)
{
/* more than 256 colormap entries => promoted to RGB */
itype = GIMP_RGB;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]