写真を加工する 5.3 各種フィルタ2
#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;
画像はこんな感じ。
焼き込み
覆い焼きの逆になります。暗さをより強調した画像になります。
//焼き込み
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;
比較 (暗)
画像のピクセルを比較して、暗い方をとります。
//比較暗
if (R1 > R2) R = R2; else R = R1;
if (G1 > G2) G = G2; else G = G1;
if (B1 > B2) B = B2; else B = B1;
比較(明)
同じく、明るい方のピクセルを使います。
//比較明
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;
コントラストの強調
コントラストは、入力 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);
白黒化
これは 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;
あとは必要なものがいくつか。その中でもほしいのがトーンカーブ。
関連リンク