GNU bug report logs - #7316
24.0.50; [PATCH] Add support for GIF transparency

Previous Next

Package: emacs;

Reported by: Julien Danjou <julien <at> danjou.info>

Date: Tue, 2 Nov 2010 13:36:02 UTC

Severity: wishlist

Tags: patch

Found in version 24.0.50

Done: Julien Danjou <julien <at> danjou.info>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 7316 in the body.
You can then email your comments to 7316 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to owner <at> debbugs.gnu.org, rfrancoise <at> debian.org, bug-gnu-emacs <at> gnu.org:
bug#7316; Package emacs. (Tue, 02 Nov 2010 13:36:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Julien Danjou <julien <at> danjou.info>:
New bug report received and forwarded. Copy sent to rfrancoise <at> debian.org, bug-gnu-emacs <at> gnu.org. (Tue, 02 Nov 2010 13:36:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Julien Danjou <julien <at> danjou.info>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.0.50; [PATCH] Add support for GIF transparency
Date: Tue, 02 Nov 2010 10:39:59 +0100
[Message part 1 (text/plain, inline)]
Attached are 2 patches adding correct transparency support for GIF
images inside Emacs.

[gif-1.diff (text/x-diff, inline)]
From nobody Tue Nov  2 10:39:02 2010
Return-Path: <emacs-devel-bounces+julien=danjou.info <at> gnu.org>
Delivered-To: jd <at> danjou.info
Received: by mx1.naquadah.org (Postfix, from userid 8)
	id 759E15C156; Wed, 27 Oct 2010 18:21:47 +0200 (CEST)
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
	prometheus.naquadah.org
X-Spam-Level: 
X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED
	autolearn=ham version=3.3.1
Received: from lists.gnu.org (lists.gnu.org [199.232.76.165])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.naquadah.org (Postfix) with ESMTPS id CFC485C0FB
	for <julien <at> danjou.info>; Wed, 27 Oct 2010 18:21:37 +0200 (CEST)
Received: from localhost ([127.0.0.1]:41338 helo=lists.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43)
	id 1PB8jo-0007sh-T3
	for julien <at> danjou.info; Wed, 27 Oct 2010 12:20:32 -0400
Received: from [140.186.70.92] (port=36740 helo=eggs.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DC-0002Ay-0N
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:47:02 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <jdanjou <at> easter-eggs.fr>) id 1PB7Uj-0008Td-Q7
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:01:05 -0400
Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57239)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <jdanjou <at> easter-eggs.fr>) id 1PB7Uj-0008TR-Kj
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:00:53 -0400
Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33])
	by rose.easter-eggs.fr (Postfix) with ESMTPS id 307B71409D;
	Wed, 27 Oct 2010 17:00:49 +0200 (CEST)
Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72)
	(envelope-from <jdanjou <at> cigue.easter-eggs.fr>)
	id 1PB7Ui-00012M-Lo; Wed, 27 Oct 2010 17:00:52 +0200
From: Julien Danjou <julien <at> danjou.info>
To: emacs-devel <at> gnu.org
Date: Wed, 27 Oct 2010 17:00:50 +0200
Message-Id: <1288191651-3958-1-git-send-email-julien <at> danjou.info>
X-Mailer: git-send-email 1.7.2.3
In-Reply-To: <sa3r5fbisy7.fsf <at> cigue.easter-eggs.fr>
References: <sa3r5fbisy7.fsf <at> cigue.easter-eggs.fr>
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2)
Cc: Julien Danjou <julien <at> danjou.info>
Subject: [PATCH 1/2] image: add support for GIF transparency
X-BeenThere: emacs-devel <at> gnu.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "Emacs development discussions." <emacs-devel.gnu.org>
List-Unsubscribe: <http://lists.gnu.org/mailman/listinfo/emacs-devel>,
	<mailto:emacs-devel-request <at> gnu.org?subject=unsubscribe>
List-Archive: <http://lists.gnu.org/archive/html/emacs-devel>
List-Post: <mailto:emacs-devel <at> gnu.org>
List-Help: <mailto:emacs-devel-request <at> gnu.org?subject=help>
List-Subscribe: <http://lists.gnu.org/mailman/listinfo/emacs-devel>,
	<mailto:emacs-devel-request <at> gnu.org?subject=subscribe>
X-Mailman-Copy: yes
Sender: emacs-devel-bounces+julien=danjou.info <at> gnu.org
Errors-To: emacs-devel-bounces+julien=danjou.info <at> gnu.org

Signed-off-by: Julien Danjou <julien <at> danjou.info>
---
 src/ChangeLog |    4 ++++
 src/image.c   |   27 +++++++++++++++++++++++----
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 51645ac..3d9b6bf 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2010-10-27  Julien Danjou  <julien <at> danjou.info>
+
+	* image.c (gif_load): Add support for transparency.
+
 2010-10-26  Juanma Barranquero  <lekktu <at> gmail.com>
 
 	* eval.c (init_eval_once): Set max_lisp_eval_depth to 600;
diff --git a/src/image.c b/src/image.c
index b7edf05..e9b85fa 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7096,12 +7096,15 @@ gif_read_from_memory (GifFileType *file, GifByteType *buf, int len)
 static const int interlace_start[] = {0, 4, 2, 1};
 static const int interlace_increment[] = {8, 8, 4, 2};
 
+#define GIF_LOCAL_DESCRIPTOR_EXTENSION 249
+
 static int
 gif_load (struct frame *f, struct image *img)
 {
   Lisp_Object file, specified_file;
   Lisp_Object specified_data;
   int rc, width, height, x, y, i;
+  boolean transparent_p;
   XImagePtr ximg;
   ColorMapObject *gif_color_map;
   unsigned long pixel_colors[256];
@@ -7110,6 +7113,7 @@ gif_load (struct frame *f, struct image *img)
   int ino, image_height, image_width;
   gif_memory_source memsrc;
   unsigned char *raster;
+  unsigned int transparency_color_index;
 
   specified_file = image_spec_value (img->spec, QCfile, NULL);
   specified_data = image_spec_value (img->spec, QCdata, NULL);
@@ -7182,6 +7186,16 @@ gif_load (struct frame *f, struct image *img)
       return 0;
     }
 
+  for(i = 0; i < gif->SavedImages[ino].ExtensionBlockCount; i++)
+    if (gif->SavedImages[ino].ExtensionBlocks[i].Function == GIF_LOCAL_DESCRIPTOR_EXTENSION
+        && gif->SavedImages[ino].ExtensionBlocks[i].ByteCount == 4
+        /* Transparency enabled? */
+        && gif->SavedImages[ino].ExtensionBlocks[i].Bytes[0] & 1)
+    {
+        transparent_p = 1;
+        transparency_color_index = (unsigned char) gif->SavedImages[ino].ExtensionBlocks[i].Bytes[3];
+    }
+
   img->corners[TOP_CORNER] = gif->SavedImages[ino].ImageDesc.Top;
   img->corners[LEFT_CORNER] = gif->SavedImages[ino].ImageDesc.Left;
   image_height = gif->SavedImages[ino].ImageDesc.Height;
@@ -7220,10 +7234,15 @@ gif_load (struct frame *f, struct image *img)
   if (gif_color_map)
     for (i = 0; i < gif_color_map->ColorCount; ++i)
       {
-        int r = gif_color_map->Colors[i].Red << 8;
-        int g = gif_color_map->Colors[i].Green << 8;
-        int b = gif_color_map->Colors[i].Blue << 8;
-        pixel_colors[i] = lookup_rgb_color (f, r, g, b);
+        if (transparent_p && transparency_color_index == i)
+            pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f);
+        else
+          {
+            int r = gif_color_map->Colors[i].Red << 8;
+            int g = gif_color_map->Colors[i].Green << 8;
+            int b = gif_color_map->Colors[i].Blue << 8;
+            pixel_colors[i] = lookup_rgb_color (f, r, g, b);
+          }
       }
 
 #ifdef COLOR_TABLE_SUPPORT
-- 
1.7.2.3


[gif-2.diff (text/x-diff, inline)]
From nobody Tue Nov  2 10:39:05 2010
Return-Path: <emacs-devel-bounces+julien=danjou.info <at> gnu.org>
Delivered-To: jd <at> danjou.info
Received: by mx1.naquadah.org (Postfix, from userid 8)
	id 5BFBD5C17C; Wed, 27 Oct 2010 18:09:48 +0200 (CEST)
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
	prometheus.naquadah.org
X-Spam-Level: 
X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED
	autolearn=ham version=3.3.1
Received: from lists.gnu.org (lists.gnu.org [199.232.76.165])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.naquadah.org (Postfix) with ESMTPS id EB16A5C159
	for <julien <at> danjou.info>; Wed, 27 Oct 2010 18:09:45 +0200 (CEST)
Received: from localhost ([127.0.0.1]:41062 helo=lists.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43)
	id 1PB8ZL-0008PA-M2
	for julien <at> danjou.info; Wed, 27 Oct 2010 12:09:43 -0400
Received: from [140.186.70.92] (port=42377 helo=eggs.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DB-0002x0-LR
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:46:57 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <jdanjou <at> easter-eggs.fr>) id 1PB7Uk-0008Tu-9U
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:01:08 -0400
Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57242)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <jdanjou <at> easter-eggs.fr>) id 1PB7Uk-0008Ta-1x
	for emacs-devel <at> gnu.org; Wed, 27 Oct 2010 11:00:54 -0400
Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33])
	by rose.easter-eggs.fr (Postfix) with ESMTPS id E88E01425C;
	Wed, 27 Oct 2010 17:00:49 +0200 (CEST)
Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72)
	(envelope-from <jdanjou <at> cigue.easter-eggs.fr>)
	id 1PB7Uj-00012P-EL; Wed, 27 Oct 2010 17:00:53 +0200
From: Julien Danjou <julien <at> danjou.info>
To: emacs-devel <at> gnu.org
Date: Wed, 27 Oct 2010 17:00:51 +0200
Message-Id: <1288191651-3958-2-git-send-email-julien <at> danjou.info>
X-Mailer: git-send-email 1.7.2.3
In-Reply-To: <sa3r5fbisy7.fsf <at> cigue.easter-eggs.fr>
References: <sa3r5fbisy7.fsf <at> cigue.easter-eggs.fr>
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2)
Cc: Julien Danjou <julien <at> danjou.info>
Subject: [PATCH 2/2] image: add support for specified :background on GIF
X-BeenThere: emacs-devel <at> gnu.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "Emacs development discussions." <emacs-devel.gnu.org>
List-Unsubscribe: <http://lists.gnu.org/mailman/listinfo/emacs-devel>,
	<mailto:emacs-devel-request <at> gnu.org?subject=unsubscribe>
List-Archive: <http://lists.gnu.org/archive/html/emacs-devel>
List-Post: <mailto:emacs-devel <at> gnu.org>
List-Help: <mailto:emacs-devel-request <at> gnu.org?subject=help>
List-Subscribe: <http://lists.gnu.org/mailman/listinfo/emacs-devel>,
	<mailto:emacs-devel-request <at> gnu.org?subject=subscribe>
X-Mailman-Copy: yes
Sender: emacs-devel-bounces+julien=danjou.info <at> gnu.org
Errors-To: emacs-devel-bounces+julien=danjou.info <at> gnu.org

Signed-off-by: Julien Danjou <julien <at> danjou.info>
---
 src/ChangeLog |    1 +
 src/image.c   |    9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 3d9b6bf..65d2730 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,6 +1,7 @@
 2010-10-27  Julien Danjou  <julien <at> danjou.info>
 
 	* image.c (gif_load): Add support for transparency.
+	(gif_load): Add support for specified :background.
 
 2010-10-26  Juanma Barranquero  <lekktu <at> gmail.com>
 
diff --git a/src/image.c b/src/image.c
index e9b85fa..ef6a6d0 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7235,7 +7235,14 @@ gif_load (struct frame *f, struct image *img)
     for (i = 0; i < gif_color_map->ColorCount; ++i)
       {
         if (transparent_p && transparency_color_index == i)
-            pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f);
+          {
+            Lisp_Object specified_bg
+              = image_spec_value (img->spec, QCbackground, NULL);
+            if (STRINGP (specified_bg))
+              pixel_colors[i] = x_alloc_image_color (f, img, specified_bg, FRAME_BACKGROUND_PIXEL (f));
+            else
+              pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f);
+          }
         else
           {
             int r = gif_color_map->Colors[i].Red << 8;
-- 
1.7.2.3


[Message part 4 (text/plain, inline)]
Cheers,
-- 
Julien Danjou
// ᐰ <julien <at> danjou.info>   http://julien.danjou.info

Reply sent to Julien Danjou <julien <at> danjou.info>:
You have taken responsibility. (Fri, 05 Nov 2010 13:21:02 GMT) Full text and rfc822 format available.

Notification sent to Julien Danjou <julien <at> danjou.info>:
bug acknowledged by developer. (Fri, 05 Nov 2010 13:21:02 GMT) Full text and rfc822 format available.

Message #10 received at 7316-done <at> debbugs.gnu.org (full text, mbox):

From: Julien Danjou <julien <at> danjou.info>
To: 7316-done <at> debbugs.gnu.org
Subject: Re: bug#7316: Acknowledgement (24.0.50;
	[PATCH] Add support for GIF transparency)
Date: Fri, 05 Nov 2010 14:24:46 +0100
Already merged into trunk.

-- 
Julien Danjou
// ᐰ <julien <at> danjou.info>   http://julien.danjou.info




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 04 Dec 2010 12:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 14 years and 258 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.