#wp7dev_jp

フィルタの追加。

覆い焼き

簡単に言うとハイライトを当てる処理になります。

//覆い焼き
if (R2 == 255) R = 255;
else R = (255 * R1) / (255 - R2);
if (G2 == 255) G = 255;
else G = (255 * G1) / (255 - G2);
if (B2 == 255) B = 255;
else B = (255 * B1) / (255 - B2);
if (R > 255) R = 255;
if (G > 255) G = 255;
if (B > 255) B = 255;

画像はこんな感じ。

image

焼き込み

覆い焼きの逆になります。暗さをより強調した画像になります。

//焼き込み
if (R2 == 0) R = 0;
else R = 255 - ((255 - R1) * 255 / R2);
if (G2 == 0) G = 0;
else G = 255 - ((255 - G1) * 255 / G2);
if (B2 == 0) B = 0;
else B = 255 - ((255 - B1) * 255 / B2);
if ((int)R < 0) R = 0;
if ((int)G < 0) G = 0;
if ((int)B < 0) B = 0;

 

image

 

比較 (暗)

画像のピクセルを比較して、暗い方をとります。

//比較暗
if (R1 > R2) R = R2; else R = R1;
if (G1 > G2) G = G2; else G = G1;
if (B1 > B2) B = B2; else B = B1;
image

比較(明)

同じく、明るい方のピクセルを使います。

//比較明
if (R1 > R2) R = R1; else R = R2;
if (G1 > G2) G = G1; else G = G2;
if (B1 > B2) B = B1; else B = B2;
break;

image

コントラストの強調

コントラストは、入力 n~255-n に対して出力を0~255にして、ダイナミックレンジを狭くします。

// コントラスト
double bank = 255 / (double)(255 - 2 * contrast);
if (R1 > 255 - contrast - BR) R = 255;
else if (R1 < contrast - BR) R = 0;
else R = (uint)((R1 - contrast + BR) * bank);
if (G1 > 255 - contrast - BR) G = 255;
else if (G1 < contrast - BR) G = 0;
else G = (uint)((G1 - contrast + BR) * bank);
if (B1 > 255 - contrast - BR) B = 255;
else if (B1 <= contrast - BR) B = 0;
else B = (uint)((B1 - contrast + BR) * bank);

image

 

白黒化

これは RGBで平均をとってグレースケールの色を作ります。Gr = 0.3xR+0.59xG+0.11xB となります。

uint Gr = (uint)((0.3 * R1 + 0.59 * G1 + 0.11 * B1) * (1+ ((float)Br/100)));
result[pixel] = ((int)A << 24) | ((int)Gr << 16) | ((int)Gr << 8) | (int)Gr;

image

 

あとは必要なものがいくつか。その中でもほしいのがトーンカーブ。

 

関連リンク