1

不透明度を変更する必要があるアルファ プリマルチプライ イメージがあります。画像に適用される不透明度の変更は、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);
4

1 に答える 1

0

解決策は実際にはかなり簡単でした。最初はマスクのことをあまり考えていませんでした。それから、もちろん、Photoshop が使用するのと同じマスクであることに気付きました。

したがって、正しいアルファ値でマスクを適用すると、画像の不透明度が変化します。

画像の不透明度を 50% に変更すると、白色でアルファ値が 50% のマスクが使用されます。

于 2015-08-24T00:39:35.397 に答える