login

<     >

2017-11-20 15:32:12 (UTC-02:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Add gd_render_frame().

diff --git a/gifdec.c b/gifdec.c
index 3628632..106d600 100644
--- a/gifdec.c
+++ b/gifdec.c
@@ -431,6 +431,24 @@ gd_get_frame(gd_GIF *gif)
 }
 
 void
+gd_render_frame(gd_GIF *gif, uint8_t *buffer)
+{
+    int i, j, k;
+    uint8_t index, *color;
+    memcpy(buffer, gif->canvas, gif->width * gif->height * 3);
+    i = (gif->fy * gif->width + gif->fx) * 3;
+    for (j = 0; j < gif->fh; j++) {
+        for (k = 0; k < gif->fw; k++) {
+            index = gif->frame[j * gif->fw + k];
+            color = &gif->palette->colors[index];
+            if (!gif->gce.transparency || index != gif->gce.tindex)
+                memcpy(&buffer[i+k*3], color, 3);
+        }
+        i += gif->width * 3;
+    }
+}
+
+void
 gd_close_gif(gd_GIF *gif)
 {
     close(gif->fd);

diff --git a/gifdec.h b/gifdec.h
index 68e86f9..b8ca022 100644
--- a/gifdec.h
+++ b/gifdec.h
@@ -37,6 +37,7 @@ typedef struct gd_GIF {
 
 gd_GIF *gd_open_gif(const char *fname);
 int gd_get_frame(gd_GIF *gif);
+void gd_render_frame(gd_GIF *gif, uint8_t *buffer);
 void gd_close_gif(gd_GIF *gif);
 
 #endif /* GIFDEC_H */