第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Photoshop如何將兩個圖像融合在一起?

Photoshop如何將兩個圖像融合在一起?

C++ C
qq_笑_17 2019-10-04 16:14:36
有人可以解釋一下Photoshop如何將兩個圖像融合在一起,以便在應(yīng)用程序中重現(xiàn)相同的效果。
查看完整描述

3 回答

?
BIG陽

TA貢獻1859條經(jīng)驗 獲得超6個贊

通過在圖像A中的每個像素上對圖像B中的對應(yīng)像素執(zhí)行混合操作,Photoshop將兩個圖像混合在一起。每個像素是一種由多個通道組成的顏色。假設(shè)我們正在處理RGB像素,則每個像素中的通道將是紅色,綠色和藍色。要混合兩個像素,我們混合它們各自的通道。


可以在以下宏中總結(jié)在Photoshop中為每種混合模式發(fā)生的混合操作:


#define ChannelBlend_Normal(A,B)     ((uint8)(A))

#define ChannelBlend_Lighten(A,B)    ((uint8)((B > A) ? B:A))

#define ChannelBlend_Darken(A,B)     ((uint8)((B > A) ? A:B))

#define ChannelBlend_Multiply(A,B)   ((uint8)((A * B) / 255))

#define ChannelBlend_Average(A,B)    ((uint8)((A + B) / 2))

#define ChannelBlend_Add(A,B)        ((uint8)(min(255, (A + B))))

#define ChannelBlend_Subtract(A,B)   ((uint8)((A + B < 255) ? 0:(A + B - 255)))

#define ChannelBlend_Difference(A,B) ((uint8)(abs(A - B)))

#define ChannelBlend_Negation(A,B)   ((uint8)(255 - abs(255 - A - B)))

#define ChannelBlend_Screen(A,B)     ((uint8)(255 - (((255 - A) * (255 - B)) >> 8)))

#define ChannelBlend_Exclusion(A,B)  ((uint8)(A + B - 2 * A * B / 255))

#define ChannelBlend_Overlay(A,B)    ((uint8)((B < 128) ? (2 * A * B / 255):(255 - 2 * (255 - A) * (255 - B) / 255)))

#define ChannelBlend_SoftLight(A,B)  ((uint8)((B < 128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))))

#define ChannelBlend_HardLight(A,B)  (ChannelBlend_Overlay(B,A))

#define ChannelBlend_ColorDodge(A,B) ((uint8)((B == 255) ? B:min(255, ((A << 8 ) / (255 - B)))))

#define ChannelBlend_ColorBurn(A,B)  ((uint8)((B == 0) ? B:max(0, (255 - ((255 - A) << 8 ) / B))))

#define ChannelBlend_LinearDodge(A,B)(ChannelBlend_Add(A,B))

#define ChannelBlend_LinearBurn(A,B) (ChannelBlend_Subtract(A,B))

#define ChannelBlend_LinearLight(A,B)((uint8)(B < 128)?ChannelBlend_LinearBurn(A,(2 * B)):ChannelBlend_LinearDodge(A,(2 * (B - 128))))

#define ChannelBlend_VividLight(A,B) ((uint8)(B < 128)?ChannelBlend_ColorBurn(A,(2 * B)):ChannelBlend_ColorDodge(A,(2 * (B - 128))))

#define ChannelBlend_PinLight(A,B)   ((uint8)(B < 128)?ChannelBlend_Darken(A,(2 * B)):ChannelBlend_Lighten(A,(2 * (B - 128))))

#define ChannelBlend_HardMix(A,B)    ((uint8)((ChannelBlend_VividLight(A,B) < 128) ? 0:255))

#define ChannelBlend_Reflect(A,B)    ((uint8)((B == 255) ? B:min(255, (A * A / (255 - B)))))

#define ChannelBlend_Glow(A,B)       (ChannelBlend_Reflect(B,A))

#define ChannelBlend_Phoenix(A,B)    ((uint8)(min(A,B) - max(A,B) + 255))

#define ChannelBlend_Alpha(A,B,O)    ((uint8)(O * A + (1 - O) * B))

#define ChannelBlend_AlphaF(A,B,F,O) (ChannelBlend_Alpha(F(A,B),A,O))

要混合單個RGB像素,請執(zhí)行以下操作:


ImageTColorR = ChannelBlend_Glow(ImageAColorR, ImageBColorR); 

ImageTColorB = ChannelBlend_Glow(ImageAColorB, ImageBColorB);

ImageTColorG = ChannelBlend_Glow(ImageAColorG, ImageBColorG);


ImageTColor = RGB(ImageTColorR, ImageTColorB, ImageTColorG);

如果我們要執(zhí)行具有特定不透明度的混合操作,請說50%:


ImageTColorR = ChannelBlend_AlphaF(ImageAColorR, ImageBColorR, Blend_Subtract, 0.5F);

如果您有指向圖像A,B和T(我們的目標)的圖像數(shù)據(jù)的指針,我們可以使用此宏簡化所有三個通道的混合:


#define ColorBlend_Buffer(T,A,B,M)      (T)[0] = ChannelBlend_##M((A)[0], (B)[0]),

                                        (T)[1] = ChannelBlend_##M((A)[1], (B)[1]),

                                        (T)[2] = ChannelBlend_##M((A)[2], (B)[2])

并可以派生以下RGB顏色混合宏:


#define ColorBlend_Normal(T,A,B)        (ColorBlend_Buffer(T,A,B,Normal))

#define ColorBlend_Lighten(T,A,B)       (ColorBlend_Buffer(T,A,B,Lighten))

#define ColorBlend_Darken(T,A,B)        (ColorBlend_Buffer(T,A,B,Darken))

#define ColorBlend_Multiply(T,A,B)      (ColorBlend_Buffer(T,A,B,Multiply))

#define ColorBlend_Average(T,A,B)       (ColorBlend_Buffer(T,A,B,Average))

#define ColorBlend_Add(T,A,B)           (ColorBlend_Buffer(T,A,B,Add))

#define ColorBlend_Subtract(T,A,B)      (ColorBlend_Buffer(T,A,B,Subtract))

#define ColorBlend_Difference(T,A,B)    (ColorBlend_Buffer(T,A,B,Difference))

#define ColorBlend_Negation(T,A,B)      (ColorBlend_Buffer(T,A,B,Negation))

#define ColorBlend_Screen(T,A,B)        (ColorBlend_Buffer(T,A,B,Screen))

#define ColorBlend_Exclusion(T,A,B)     (ColorBlend_Buffer(T,A,B,Exclusion))

#define ColorBlend_Overlay(T,A,B)       (ColorBlend_Buffer(T,A,B,Overlay))

#define ColorBlend_SoftLight(T,A,B)     (ColorBlend_Buffer(T,A,B,SoftLight))

#define ColorBlend_HardLight(T,A,B)     (ColorBlend_Buffer(T,A,B,HardLight))

#define ColorBlend_ColorDodge(T,A,B)    (ColorBlend_Buffer(T,A,B,ColorDodge))

#define ColorBlend_ColorBurn(T,A,B)     (ColorBlend_Buffer(T,A,B,ColorBurn))

#define ColorBlend_LinearDodge(T,A,B)   (ColorBlend_Buffer(T,A,B,LinearDodge))

#define ColorBlend_LinearBurn(T,A,B)    (ColorBlend_Buffer(T,A,B,LinearBurn))

#define ColorBlend_LinearLight(T,A,B)   (ColorBlend_Buffer(T,A,B,LinearLight))

#define ColorBlend_VividLight(T,A,B)    (ColorBlend_Buffer(T,A,B,VividLight))

#define ColorBlend_PinLight(T,A,B)      (ColorBlend_Buffer(T,A,B,PinLight))

#define ColorBlend_HardMix(T,A,B)       (ColorBlend_Buffer(T,A,B,HardMix))

#define ColorBlend_Reflect(T,A,B)       (ColorBlend_Buffer(T,A,B,Reflect))

#define ColorBlend_Glow(T,A,B)          (ColorBlend_Buffer(T,A,B,Glow))

#define ColorBlend_Phoenix(T,A,B)       (ColorBlend_Buffer(T,A,B,Phoenix))

例子是:


ColorBlend_Glow(TargetPtr, ImageAPtr, ImageBPtr);

其余的Photoshop混合模式涉及將RGB轉(zhuǎn)換為HLS,然后再次轉(zhuǎn)換。


#define ColorBlend_Hue(T,A,B)            ColorBlend_Hls(T,A,B,HueB,LuminationA,SaturationA)

#define ColorBlend_Saturation(T,A,B)     ColorBlend_Hls(T,A,B,HueA,LuminationA,SaturationB)

#define ColorBlend_Color(T,A,B)          ColorBlend_Hls(T,A,B,HueB,LuminationA,SaturationB)

#define ColorBlend_Luminosity(T,A,B)     ColorBlend_Hls(T,A,B,HueA,LuminationB,SaturationA)


#define ColorBlend_Hls(T,A,B,O1,O2,O3) {

    float64 HueA, LuminationA, SaturationA;

    float64 HueB, LuminationB, SaturationL;

    Color_RgbToHls((A)[2],(A)[1],(A)[0], &HueA, &LuminationA, &SaturationA);

    Color_RgbToHls((B)[2],(B)[1],(B)[0], &HueB, &LuminationB, &SaturationB);

    Color_HlsToRgb(O1,O2,O3,&(T)[2],&(T)[1],&(T)[0]);

    }

這些功能將有助于將RGB轉(zhuǎn)換為HLS。


int32 Color_HueToRgb(float64 M1, float64 M2, float64 Hue, float64 *Channel)

{

    if (Hue < 0.0)

        Hue += 1.0;

    else if (Hue > 1.0)

        Hue -= 1.0;


    if ((6.0 * Hue) < 1.0)

        *Channel = (M1 + (M2 - M1) * Hue * 6.0);

    else if ((2.0 * Hue) < 1.0)

        *Channel = (M2);

    else if ((3.0 * Hue) < 2.0)

        *Channel = (M1 + (M2 - M1) * ((2.0F / 3.0F) - Hue) * 6.0);

    else

        *Channel = (M1);


    return TRUE;

}


int32 Color_RgbToHls(uint8 Red, uint8 Green, uint8 Blue, float64 *Hue, float64 *Lumination, float64 *Saturation)

{

    float64 Delta;

    float64 Max, Min;

    float64 Redf, Greenf, Bluef;


    Redf    = ((float64)Red   / 255.0F);

    Greenf  = ((float64)Green / 255.0F);

    Bluef   = ((float64)Blue  / 255.0F); 


    Max     = max(max(Redf, Greenf), Bluef);

    Min     = min(min(Redf, Greenf), Bluef);


    *Hue        = 0;

    *Lumination = (Max + Min) / 2.0F;

    *Saturation = 0;


    if (Max == Min)

        return TRUE;


    Delta = (Max - Min);


    if (*Lumination < 0.5)

        *Saturation = Delta / (Max + Min);

    else

        *Saturation = Delta / (2.0 - Max - Min);


    if (Redf == Max)

        *Hue = (Greenf - Bluef) / Delta;

    else if (Greenf == Max)

        *Hue = 2.0 + (Bluef - Redf) / Delta;

    else

        *Hue = 4.0 + (Redf - Greenf) / Delta;


    *Hue /= 6.0; 


    if (*Hue < 0.0)

        *Hue += 1.0;       


    return TRUE;

}


int32 Color_HlsToRgb(float64 Hue, float64 Lumination, float64 Saturation, uint8 *Red, uint8 *Green, uint8 *Blue)

{

    float64 M1, M2;

    float64 Redf, Greenf, Bluef;


    if (Saturation == 0)

        {

        Redf    = Lumination;

        Greenf  = Lumination;

        Bluef   = Lumination;

        }

    else

        {

        if (Lumination <= 0.5)

            M2 = Lumination * (1.0 + Saturation);

        else

            M2 = Lumination + Saturation - Lumination * Saturation;


        M1 = (2.0 * Lumination - M2);


        Color_HueToRgb(M1, M2, Hue + (1.0F / 3.0F), &Redf);

        Color_HueToRgb(M1, M2, Hue, &Greenf);

        Color_HueToRgb(M1, M2, Hue - (1.0F / 3.0F), &Bluef);

        }


    *Red    = (uint8)(Redf * 255);

    *Blue   = (uint8)(Bluef * 255);

    *Green  = (uint8)(Greenf * 255);


    return TRUE;

}


查看完整回答
反對 回復(fù) 2019-10-04
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

此答案中的“色相”,“顏色”,“飽和度”混合模式是錯誤的。沒有Adobe產(chǎn)品轉(zhuǎn)換為HSB,它們直接對RGB值執(zhí)行操作。


例如,這是用于設(shè)置亮度的GLSL:


float lum(vec4 color)

{

    return ((0.3 * color.r) + (0.59 * color.g) + (0.11 * color.b));

}


vec4 clipColor(vec4 color)

{

    vec4 newColor=color;

    float l=lum(color);

    float n=min(min(color.r,color.g),color.b);

    float x=max(max(color.r,color.g),color.b);


    newColor.r=(n<0.0) ? l+(((color.r-l)*l)/(l-n)) : color.r;

    newColor.r=(x>1.0) ? l+(((color.r-l)*(1.0-l))/(x-l)) : color.r;


    newColor.g=(n<0.0) ? l+(((color.g-l)*l)/(l-n)) : color.g;

    newColor.g=(x>1.0) ? l+(((color.g-l)*(1.0-l))/(x-l)) : color.g;


    newColor.b=(n<0.0) ? l+(((color.b-l)*l)/(l-n)) : color.b;

    newColor.b=(x>1.0) ? l+(((color.b-l)*(1.0-l))/(x-l)) : color.b;


    return clamp(newColor,0.0,1.0);

}


vec4 setlum(vec4 color, float l)

{

    float d=l-lum(color);

    color.r+=d;

    color.g+=d;

    color.b+=d;


    return clipColor(color);    

}


kernel vec4 blendLuminosity(sampler topimage, sampler bottomimage)

{

    vec4 base=sample(bottomimage, samplerCoord(bottomimage));

    vec4 blend=sample(topimage, samplerCoord(topimage));


    float bl=lum(blend);

    return setlum(base,bl);

}

CIKernels中不支持if .. else語句,因此使用三元運算符。


查看完整回答
反對 回復(fù) 2019-10-04
  • 3 回答
  • 0 關(guān)注
  • 1262 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號