1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
// la liste qui contiendra les intensités
private List<int> _intensities = new List<int>();
// l'événement du bouton qui lance le calcul
private void button6_Click(object sender, EventArgs e)
{
// on charge l'image
Image img = pictureBox.Image; // Image.FromFile(_picFilename);
using (Bitmap bmp = new Bitmap(img))
{
// on efface les éventuelles valeurs déjà insérées dans la liste
_intensities.Clear();
// pour chaque colonne
for (int col = 0; col < bmp.Width; col++)
{
double total = 0;
// pour chaque ligne
for (int lin = 0; lin < bmp.Height; lin++)
{
// on fait la somme des composantes RGB
Color clr = bmp.GetPixel(col, lin);
total += clr.R + clr.G + clr.B;
}
// on normalise pour obtenir des valeurs comprises entre 0 et img.Height
total /= (3 * 255);
// on ajoute la valeur convertie en int à notre liste
_intensities.Add(Convert.ToInt32(total));
}
// on appelle le repaint de la PictureBox pour qu'il dessine le tracé
pictureBox.Refresh();
}
}
// l'événement de dessin de la PictureBox
private void pictureBox2_Paint(object sender, PaintEventArgs e)
{
// tous les objets qui vont bien
PictureBox ctrl = (PictureBox)sender;
Image img = pictureBox.Image; //Image.FromFile(_picFilename);
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red, 2);
// on dessine l'image
g.Clear(Color.White);
g.DrawImage(img, 0, 0, img.Width, img.Height);
// on ajuste la taille + border
ctrl.Width = img.Width;
ctrl.Height = img.Height;
ctrl.BorderStyle = BorderStyle.FixedSingle;
// on parcours la liste des intensités
for (int i = 0; i < _intensities.Count - 1; i++)
// on dessine un segment entre chaque point, en inversant les ordonnées pour que les hautes intensités soient en haut
g.DrawLine(p, i, img.Height - _intensities[i], i + 1, img.Height - _intensities[i + 1]);
} |
Partager