diff --git a/apps/gui/icon.c b/apps/gui/icon.c index 4c006f947a..d24d8bb677 100644 --- a/apps/gui/icon.c +++ b/apps/gui/icon.c @@ -189,7 +189,7 @@ static void load_icons(const char* filename, enum Iconset iconset, enum screen_type screen) { int size_read; - int bmpformat = (FORMAT_NATIVE|FORMAT_DITHER); + int bmpformat = (FORMAT_NATIVE|FORMAT_DITHER|FORMAT_TRANSPARENT); struct iconset *ic = &iconsets[iconset][screen]; int fd; @@ -217,6 +217,9 @@ static void load_icons(const char* filename, enum Iconset iconset, size_read = read_bmp_fd(fd, &ic->bmp, buf_size, bmpformat, NULL); ic->handle_locked = 0; + /* free unused alpha channel, if any */ + core_shrink(ic->handle, ic->bmp.data, size_read); + if (size_read <= 0) ic->handle = core_free(ic->handle); else diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index d207a1fb3e..8eef1dedee 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -1577,6 +1577,8 @@ static int load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char* close(fd); if (ret > 0) { + /* free unused alpha channel, if any */ + core_shrink(handle, core_get_data(handle), ret); return handle; } else