diff --git a/src/modules/evas/image_loaders/qoi/evas_image_load_qoi.c b/src/modules/evas/image_loaders/qoi/evas_image_load_qoi.c index 0cb0f24333..6f0d847429 100644 --- a/src/modules/evas/image_loaders/qoi/evas_image_load_qoi.c +++ b/src/modules/evas/image_loaders/qoi/evas_image_load_qoi.c @@ -262,7 +262,16 @@ evas_image_load_file_data_qoi_internal(Evas_Loader_Internal *loader EINA_UNUSED, index[QOI_COLOR_HASH(px) % 64] = px; } - *iter = ((prop->alpha ? px.rgba.a : 255) << 24) | (px.rgba.r << 16) | (px.rgba.g << 8) | px.rgba.b; + if (prop->alpha) + *iter = (px.rgba.a << 24) | + (((px.rgba.r * px.rgba.a) / 255) << 16) | + (((px.rgba.g * px.rgba.a) / 255) << 8) | + (((px.rgba.b * px.rgba.a) / 255)); + else + *iter = (255 << 24) | + (px.rgba.r << 16) | + (px.rgba.g << 8) | + (px.rgba.b); } *error = EVAS_LOAD_ERROR_NONE; diff --git a/src/modules/evas/image_savers/qoi/evas_image_save_qoi.c b/src/modules/evas/image_savers/qoi/evas_image_save_qoi.c index 0a31d8f621..3b5a5ae716 100644 --- a/src/modules/evas/image_savers/qoi/evas_image_save_qoi.c +++ b/src/modules/evas/image_savers/qoi/evas_image_save_qoi.c @@ -115,10 +115,10 @@ save_image_qoi(RGBA_Image *im, const char *file, int quality EINA_UNUSED) iter = (unsigned char *)im->image.data; for (px_pos = 0; px_pos < px_len; px_pos += channels, iter +=4) { - px.rgba.b = *(iter + 0); - px.rgba.g = *(iter + 1); - px.rgba.r = *(iter + 2); px.rgba.a = *(iter + 3); + px.rgba.b = *(iter + 0) * 255 / px.rgba.a; + px.rgba.g = *(iter + 1) * 255 / px.rgba.a; + px.rgba.r = *(iter + 2) * 255 / px.rgba.a; if (px.v == px_prev.v) {