我有一个alpha预乘图像,需要更改它的不透明度。应用于图像的不透明度变化可以是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);
答案 0 :(得分:0)
解决方案实际上非常简单。一开始我没有想太多的面具。然后我意识到啊面具当然就像Photoshop一样。
因此,应用具有正确alpha值的遮罩将导致图像改变其不透明度。
因此,将图像不透明度更改为50%,我们将使用白色和alpha值为50%的蒙版。