У меня есть альфа-преумтированное изображение, которое требует изменения непрозрачности. Изменение непрозрачности, применяемое к изображению, может быть от 0.0 до 1.0.Как изменить прозрачность альфа-премультиплексированного изображения?
Этот процесс легко достичь с помощью следующей формулы:
Cn = C*alpha;
An = A*alpha;
Однако, я пытаюсь не писать этот код мой сам и позволяет оптимизированная библиотека pixman сделать работу. Они предоставляют различные варианты смешивания, но я не слишком уверен, как использовать маску или какую смесь использовать. Я пробовал использовать MULTIPLY, но это только что сделало изображение темнее, как ожидалось, я думаю ...
Любые идеи, которые могут использоваться в качестве возможного варианта смешивания?
{ "CLEAR", PIXMAN_OP_CLEAR },
{ "SRC", PIXMAN_OP_SRC },
{ "DST", PIXMAN_OP_DST },
{ "OVER", PIXMAN_OP_OVER },
{ "OVER_REVERSE", PIXMAN_OP_OVER_REVERSE },
{ "IN", PIXMAN_OP_IN },
{ "IN_REVERSE", PIXMAN_OP_IN_REVERSE },
{ "OUT", PIXMAN_OP_OUT },
{ "OUT_REVERSE", PIXMAN_OP_OUT_REVERSE },
{ "ATOP", PIXMAN_OP_ATOP },
{ "ATOP_REVERSE", PIXMAN_OP_ATOP_REVERSE },
{ "XOR", PIXMAN_OP_XOR },
{ "ADD", PIXMAN_OP_ADD },
{ "SATURATE", PIXMAN_OP_SATURATE },
{ "MULTIPLY", PIXMAN_OP_MULTIPLY },
{ "SCREEN", PIXMAN_OP_SCREEN },
{ "OVERLAY", PIXMAN_OP_OVERLAY },
{ "DARKEN", PIXMAN_OP_DARKEN },
{ "LIGHTEN", PIXMAN_OP_LIGHTEN },
{ "COLOR_DODGE", PIXMAN_OP_COLOR_DODGE },
{ "COLOR_BURN", PIXMAN_OP_COLOR_BURN },
{ "HARD_LIGHT", PIXMAN_OP_HARD_LIGHT },
{ "SOFT_LIGHT", PIXMAN_OP_SOFT_LIGHT },
{ "DIFFERENCE", PIXMAN_OP_DIFFERENCE },
{ "EXCLUSION", PIXMAN_OP_EXCLUSION },
{ "HSL_HUE", PIXMAN_OP_HSL_HUE },
{ "HSL_SATURATION", PIXMAN_OP_HSL_SATURATION },
{ "HSL_COLOR", PIXMAN_OP_HSL_COLOR },
{ "HSL_LUMINOSITY", PIXMAN_OP_HSL_LUMINOSITY },
Это фактическая функция композит:
void pixman_image_composite(pixman_op_t op,
pixman_image_t *src,
pixman_image_t *mask,
pixman_image_t *dest,
int16_t src_x,
int16_t src_y,
int16_t mask_x,
int16_t mask_y,
int16_t dest_x,
int16_t dest_y,
uint16_t width,
uint16_t height);