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 */