私はc#を使用して画像の明るさを下げる必要があります。いくつかの分析の後、私は、各ピクセルカラーRGB値を調整することによって画像の明るさを減らす1つの解決策を見つけました。下からのコードを見つけてください:特定の色のRGB値を減らすためにどのようにして画像の輝度を下げることができますか?
Bitmap bmp = new Bitmap(Picture);
Reduce the picture color brightness
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
color = ChangeColorBrightness(color, 0.80f);
bmp.SetPixel(i, j, color);
}
}
方法:
private Color ChangeColorBrightness(Color color, float correctionFactor)
{
float red = (float)color.R;
float green = (float)color.G;
float blue = (float)color.B;
if (correctionFactor < 0)
{
correctionFactor = 1 + correctionFactor;
red *= correctionFactor;
green *= correctionFactor;
blue *= correctionFactor;
}
else
{
red = (255 - red) * correctionFactor + red;
green = (255 - green) * correctionFactor + green;
blue = (255 - blue) * correctionFactor + blue;
}
return Color.FromArgb(color.A, (int)red, (int)green, (int)blue);
}
このコードは私の要件のために正常に動作しているが、私はとき、それは時間のような量をとります幅と高さがより大きい膨大な数の画像を実行する。 この要件を達成する他の方法はありますか?
のではなく、必要な調整を使用して新しいものに上の再描画画像、各ピクセルを設定しています。 [この回答](http://stackoverflow.com/a/15408608/2009)では、明るさ、コントラスト、ガンマをワンショットで調整する方法を示しています。 – hometoast
あなたの提案をありがとう。しかし、私は自分の実装内でGraphicsオブジェクトを使いたいとは思わなかった。私はカラーマトリックスを使うことでその方法を無視しています。 – Vijay