|
■No42278 (yac さん) に返信
とりあえず、ちょっとサンプル的なものを作ってみました。
フォーム上に TrackBar と PictureBox を追加して、ごそごそと。
TrackBar は Minimum プロパティを 0 Maximum プロパティを 100 に設定しています。
あと、リソース上にてきとーな画像を追加しておくということで。
(この辺はファイルから読む込むようにしてもいいですけど)
TrackBar の ValueChanged イベントと、PictureBox の Paint イベントに以下のイベントハンドラ
を実行するように設定しておいてください。
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Bitmap source = Properties.Resources.(とりあえず何か画像);
Bitmap destination = new Bitmap(source.Width, source.Height);
ImageAttributes attribute = new ImageAttributes();
float r = ((float)trackBar1.Value) * 0.01f;
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {r, r, r, r, r}
};
ColorMatrix matrix = new ColorMatrix(colorMatrixElements);
attribute.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
using (Graphics graphics = Graphics.FromImage(destination))
{
graphics.DrawImage(
source,
new Rectangle(0, 0, destination.Width, destination.Height),
0,
0,
source.Width,
source.Height,
GraphicsUnit.Pixel,
attribute);
}
pictureBox1.Image = destination;
}
トラックバーを動かすと、画像の輝度が変化する感じです。
実際のところ、ImageAttributes のあたりは僕も研究中という感じなので詳しくないですが
こんな感じでできるんじゃないかな?というサンプルということで。
|