diff options
Diffstat (limited to 'src/loader.c')
-rw-r--r-- | src/loader.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/loader.c b/src/loader.c index 3090c4d..f8876dd 100644 --- a/src/loader.c +++ b/src/loader.c @@ -1,4 +1,5 @@ #include "loader.h" +#include "bitmap.h" #include <limits.h> #include <stdlib.h> #include <string.h> @@ -47,6 +48,17 @@ static int is_thread_cancelled(void) return sigismember(&sigmask, SIGUSR1); } +static struct imv_bitmap *to_imv_bitmap(FIBITMAP *in_bmp) +{ + struct imv_bitmap *bmp = malloc(sizeof(struct imv_bitmap)); + bmp->width = FreeImage_GetWidth(in_bmp); + bmp->height = FreeImage_GetHeight(in_bmp); + bmp->data = malloc(4 * bmp->width * bmp->height); + FreeImage_ConvertToRawBits(bmp->data, in_bmp, 4 * bmp->width, 32, + FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE); + return bmp; +} + struct imv_loader *imv_loader_create(void) { struct imv_loader *ldr = malloc(sizeof(struct imv_loader)); @@ -294,7 +306,7 @@ static void *bg_new_img(void *data) SDL_Event event; SDL_zero(event); event.type = ldr->new_image_event; - event.user.data1 = FreeImage_Clone(bmp); + event.user.data1 = to_imv_bitmap(bmp); event.user.code = 1; /* is a new image */ SDL_PushEvent(&event); @@ -399,7 +411,7 @@ static void *bg_next_frame(void *data) SDL_Event event; SDL_zero(event); event.type = ldr->new_image_event; - event.user.data1 = FreeImage_Clone(ldr->bmp); + event.user.data1 = to_imv_bitmap(ldr->bmp); event.user.code = 0; /* not a new image */ SDL_PushEvent(&event); |