Browse Source

Mark one colour as transparent in the gif image encoder

if the input palette contains at least one colour
that is more than 50% transparent.

Fixes ticket #715.
tags/n0.9
Carl Eugen Hoyos 14 years ago
parent
commit
0cc9949ead
2 changed files with 16 additions and 2 deletions
  1. +15
    -1
      libavcodec/gif.c
  2. +1
    -1
      libavcodec/version.h

+ 15
- 1
libavcodec/gif.c View File

@@ -62,7 +62,7 @@ static int gif_image_write_header(AVCodecContext *avctx,
uint8_t **bytestream, uint32_t *palette)
{
int i;
unsigned int v;
unsigned int v, smallest_alpha = 0xFF, alpha_component = 0;

bytestream_put_buffer(bytestream, "GIF", 3);
bytestream_put_buffer(bytestream, "89a", 3);
@@ -77,6 +77,20 @@ static int gif_image_write_header(AVCodecContext *avctx,
for(i=0;i<256;i++) {
v = palette[i];
bytestream_put_be24(bytestream, v);
if (v >> 24 < smallest_alpha) {
smallest_alpha = v >> 24;
alpha_component = i;
}
}

if (smallest_alpha < 128) {
bytestream_put_byte(bytestream, 0x21); /* Extension Introducer */
bytestream_put_byte(bytestream, 0xf9); /* Graphic Control Label */
bytestream_put_byte(bytestream, 0x04); /* block length */
bytestream_put_byte(bytestream, 0x01); /* Transparent Color Flag */
bytestream_put_le16(bytestream, 0x00); /* no delay */
bytestream_put_byte(bytestream, alpha_component);
bytestream_put_byte(bytestream, 0x00);
}

return 0;


+ 1
- 1
libavcodec/version.h View File

@@ -22,7 +22,7 @@

#define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 41
#define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_MICRO 2

#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \


Loading…
Cancel
Save