ホームページ >バックエンド開発 >C++ >Photoshop はどのように画像をブレンドしますか?また、使用可能なさまざまなブレンド モードには何がありますか?

Photoshop はどのように画像をブレンドしますか?また、使用可能なさまざまなブレンド モードには何がありますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-20 14:47:11366ブラウズ

How does Photoshop blend images, and what are the different blend modes available?

Photoshop が画像を結合する方法

Photoshop は、画像 A の各ピクセルと画像 B の対応するピクセルに対してブレンド操作を実行することで、画像をシームレスにブレンドします。各ピクセルは複数のチャネルで構成され、各チャネルが色を表します。 RGB ピクセルの場合、これらのチャネルには赤、緑、青が含まれます。

2 つのピクセルを結合するには、特定のブレンド操作を使用してそれぞれのチャネルを結合します。 Photoshop のブレンド モードは次の数学関数を使用します:

ChannelBlend_Normal:         ((uint8) A)
ChannelBlend_Lighten:      ((uint8) (B > A) ? B : A)
ChannelBlend_Darken:       ((uint8) (B > A) ? A : B)
ChannelBlend_Multiply:     ((uint8) ((A * B) / 255))
ChannelBlend_Average:      ((uint8) ((A + B) / 2))
ChannelBlend_Add:          ((uint8) min(255, (A + B))))
ChannelBlend_Subtract:     ((uint8) ((A + B > 8)))
ChannelBlend_Exclusion:   ((uint8) (A + B - 2 * A * B / 255))
ChannelBlend_Overlay:     ((uint8) (B > 1) + 64)) * ((float) B / 255) : (255 - 2 * (255 - ((A >> 1) + 64)) * (float) (255 - B) / 255))))
ChannelBlend_HardLight:   (ChannelBlend_Overlay(B, A))
ChannelBlend_ColorDodge:  ((uint8) (B == 255) ? B : min(255, ((A <p>単一の RGB ピクセルをブレンドするには:</p><pre class="brush:php;toolbar:false">ImageTColorR = ChannelBlend_Glow(ImageAColorR, ImageBColorR);
ImageTColorB = ChannelBlend_Glow(ImageAColorB, ImageBColorB);
ImageTColorG = ChannelBlend_Glow(ImageAColorG, ImageBColorG);

ImageTColor = RGB(ImageTColorR, ImageTColorB, ImageTColorG);

特定の不透明度 (例: 50%) でブレンドするには:

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

3 つのチャンネルすべてのブレンドを簡略化するには、バッファ マクロを使用できます。

#define ColorBlend_ ## M(T, A, B) (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);

HLS 変換を伴うブレンド モードの場合:

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

以上がPhotoshop はどのように画像をブレンドしますか?また、使用可能なさまざまなブレンド モードには何がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。