Click here to Skip to main content
15,867,453 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
SQL
Hi.
I have a code which should allow for images to open in the form in c# but buttons 3 and 5 aren't working for some reason and I can't find the problem. The code executes ok, but when I press the buttons I get no response. The other 3 buttons, load image / load image / button 4, are all working correctly.
I have attached an image with the designer form on to show the layout. If anyone can advise me on what the problem is I would be very thankful.


C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing.Imaging;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace imageAlign
{

    public partial class IdentifySleeper : Form
    {
        Bitmap newImage1, newImage2, test;
        public static Bitmap Diff(Bitmap src1, Bitmap src2, int x1, int y1, int x2, int y2, int width, int height)
        {
            Bitmap diffBM = new Bitmap(width, height, PixelFormat.Format24bppRgb);

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    //Get Both Colours at the pixel point
                    Color col1 = src1.GetPixel(x1 + x, y1 + y);
                    Color col2 = src2.GetPixel(x2 + x, y2 + y);

                    //Get the difference RGB
                    int r = 0, g = 0, b = 0;
                    r = Math.Abs(col1.R - col2.R);



                    g = Math.Abs(col1.G - col2.G);
                    b = Math.Abs(col1.B - col2.B);

                    //Invert the difference average
                    int dif = ((r + g + b) / 3);

                    //Create new grayscale rgb colour
                    Color newcol = Color.FromArgb(dif, dif, dif);

                    diffBM.SetPixel(x, y, newcol);

                }
            }

            return diffBM;
        }


        public IdentifySleeper()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            OpenFileDialog ofd1 = new OpenFileDialog();

            if (ofd1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                pictureBox1.Image = Image.FromFile(ofd1.FileName);
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

                // Grab the user's image and crop it to produce a sample image
                Bitmap k = (Bitmap)Image.FromFile(ofd1.FileName);
                Rectangle imageSection = new Rectangle(k.Width / 3, 0, k.Width / 3, k.Height);
                Bitmap kCropped = (Bitmap)k.Clone(imageSection, k.PixelFormat);

                // Array for keeping the sums of each row of pixels
                float[] resultArray = new float[kCropped.Height];

                // Populate the array with data from each row of pixels, using the brightness value
                for (int i = 0; i < kCropped.Height; i++)
                {
                    float value = 0;
                    for (int j = 0; j < kCropped.Width; j++)
                    {
                        value += kCropped.GetPixel(j, i).GetBrightness();
                    }
                    resultArray[i] = value;
                }

                // Obtain the maximum and minimum value of the sampled rows.
                float maxValue = 0;
                float minValue = float.MaxValue;
                for (int i = 1; i < resultArray.Length; i++)
                {
                    if (resultArray[i - 1] > maxValue) maxValue = resultArray[i - 1];
                    if (resultArray[i - 1] < minValue) minValue = resultArray[i - 1];

                }

                // Find the median value of each row, and use this to find upper and lower bounds for the image
                float midPoint = maxValue - minValue;
                float upperBound = (midPoint + maxValue) / 2;
                float lowerBound = (midPoint + minValue) / 2;

                int alignmentStart = 0;
                int alignmentFinish = 0;

                // Scan the result array for the start of the first sleeper
                for (int i = 0; i < resultArray.Length; i++)
                {
                    if (resultArray[i] > upperBound)
                    {
                        alignmentStart = i;
                        break;
                    }
                }

                // Scan the array from the place the last loop left off for the end of the sleeper
                for (int i = alignmentStart; i < resultArray.Length; i++)
                {
                    if (resultArray[i] < lowerBound)
                    {
                        alignmentFinish = i;
                        break;
                    }
                }

                // Using the start and end locations, we can now isolate the sleeper itself
                Rectangle alignedImage = new Rectangle(0, alignmentStart, k.Width, alignmentFinish - alignmentStart);

                Bitmap kAligned = (Bitmap)k.Clone(alignedImage, k.PixelFormat);

                Image image_rect = kAligned;


                image_rect.Save("good.jpg");

                // Put the sleeper in a picturebox for the user to see
                pictureBox3.Image = image_rect;
                pictureBox3.SizeMode = PictureBoxSizeMode.Zoom;



                // Get rid of unused images
                k.Dispose();
                kCropped.Dispose();
            }
        }




        private void IdentifySleeper_Load(object sender, EventArgs e)
        {



        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd2 = new OpenFileDialog();

            if (ofd2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                pictureBox4.Image = Image.FromFile(ofd2.FileName);
                pictureBox4.SizeMode = PictureBoxSizeMode.Zoom;

                // Grab the user's image and crop it to produce a sample image
                Bitmap k = (Bitmap)Image.FromFile(ofd2.FileName);
                Rectangle imageSection = new Rectangle(k.Width / 3, 0, k.Width / 3, k.Height);
                Bitmap kCropped = (Bitmap)k.Clone(imageSection, k.PixelFormat);

                // Array for keeping the sums of each row of pixels
                float[] resultArray = new float[kCropped.Height];

                // Populate the array with data from each row of pixels, using the brightness value
                for (int i = 0; i < kCropped.Height; i++)
                {
                    float value = 0;
                    for (int j = 0; j < kCropped.Width; j++)
                    {
                        value += kCropped.GetPixel(j, i).GetBrightness();
                    }
                    resultArray[i] = value;
                }

                // Obtain the maximum and minimum value of the sampled rows.
                float maxValue = 0;
                float minValue = float.MaxValue;
                for (int i = 1; i < resultArray.Length; i++)
                {
                    if (resultArray[i - 1] > maxValue) maxValue = resultArray[i - 1];
                    if (resultArray[i - 1] < minValue) minValue = resultArray[i - 1];

                }

                // Find the median value of each row, and use this to find upper and lower bounds for the image
                float midPoint = maxValue - minValue;
                float upperBound = (midPoint + maxValue) / 2;
                float lowerBound = (midPoint + minValue) / 2;

                int alignmentStart = 0;
                int alignmentFinish = 0;

                // Scan the result array for the start of the first sleeper
                for (int i = 0; i < resultArray.Length; i++)
                {
                    if (resultArray[i] > upperBound)
                    {
                        alignmentStart = i;
                        break;
                    }
                }

                // Scan the array from the place the last loop left off for the end of the sleeper
                for (int i = alignmentStart; i < resultArray.Length; i++)
                {
                    if (resultArray[i] < lowerBound)
                    {
                        alignmentFinish = i;
                        break;
                    }
                }

                // Using the start and end locations, we can now isolate the sleeper itself
                Rectangle alignedImage = new Rectangle(0, alignmentStart, k.Width, alignmentFinish - alignmentStart);

                Bitmap kAligned = (Bitmap)k.Clone(alignedImage, k.PixelFormat);

                Image image_rect2 = kAligned;

                image_rect2.Save("bad.jpg");

                // Put the sleeper in a picturebox for the user to see
                pictureBox2.Image = image_rect2;
                pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;



                // Get rid of unused images
                k.Dispose();
                kCropped.Dispose();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "JPEG IMAGES|*.jpg";
            openFileDialog1.InitialDirectory = "C:\\Users\\jason\\Documents\\IProject\\code\\imageAlign\\imageAlign\\bin\\Debug";
            openFileDialog1.Title = "Open Image";
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // textBox1.Text = openFileDialog1.FileName;
                newImage1 = (Bitmap)(System.Drawing.Image.FromFile(openFileDialog1.FileName));
                pictureBox5.Width = newImage1.Width;
                pictureBox5.Height = newImage1.Height;
                pictureBox5.Image = newImage1;
                //pictureBox6.Location = new System.Drawing.Point(newImage1.Width + 40, pictureBox6.Location.Y);
            }
            //else
            //{
            //    textBox1.Text = "select file please";
            //}
            //}
        }

        //  private void textBox2_MouseHover(object sender, EventArgs e)
        //{

        //}


        private void button4_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "JPEG IMAGES|*.jpg";
            openFileDialog1.InitialDirectory = "C:\\Users\\jason\\Documents\\IProject\\code\\imageAlign\\imageAlign\\bin\\Debug";
            openFileDialog1.Title = "Open Image";
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // textBox2.Text = openFileDialog1.FileName;
                newImage2 = (Bitmap)(System.Drawing.Image.FromFile(openFileDialog1.FileName));
                pictureBox6.Width = newImage2.Width;
                pictureBox6.Height = newImage2.Height;
                pictureBox6.Image = newImage2;
            }
            //else
            //{
            //    textBox2.Text = "select file please";
            //}
            //}
        }


        private void button5_Click(object sender, EventArgs e)
        {
            test = Diff(newImage1, newImage2, 0, 0, 0, 0, newImage1.Width, newImage1.Height);
            pictureBox7.Width = test.Width;
            pictureBox7.Height = test.Height;
            pictureBox7.Image = test;
            //pictureBox7.Location = new System.Drawing.Point(newImage1.Width + newImage2.Width + 80, pictureBox7.Location.Y);
        }
    }
}


https://dl.dropbox.com/u/15501961/designer_sized.jpg[^]
Posted
Comments
Shubh Agrahari 20-Feb-13 4:05am    
its good to wrap your code in code tag but warping your problems in code tag....to bad...be careful next time.

may be the problem is on click-events...
check the following way..

->goto design of the form
->select the the button which is not working
->goto properties of that button and select the events
->goto click event check the proper event is attached to that button or not..
->if there is no event or wrong event then select the correct button event..
ex:
"button 1"->it must have the click event like button1_Click(object sender, EventArgs e)


try this all the best
 
Share this answer
 
Check you have the events wired up in the designer.
Look at each button in turn, and double click it. Does it go to a new method, or one of the existing ones?
If all buttons go to the existing methods, then put a breakpoint on the first line of each, then run your program. Does each button hit a breakpoint? If not, then you need to look at what is disconnecting the event handlers. If it does, then single step though to find out why it doesn't seem to be doing what you think it should.

BTW: It is a bad idea to keep the VS default names - when you create a control, give it a name which reflects what the user is going to do with it: that way your code is more self documenting, and easier to follow. "button2_Click" is a lot less clear than "butNormalizeChromatics_Click" or whatever you code is actually doing.

And if you post code fragments again, make it just the relevant bits, not your whole program, and don't post redundant, commented out old rubbish. Help us to help you by making it as clear as you can.
 
Share this answer
 
there is no any clearance of code error so you may have to try this....


if you getting no response with successful debugging of your code then just close your app and restart your computer after it if again no any response then put the break points on your button click events and run your app it will definitely give response....this is the same problem once with my project and i done the same...
 
Share this answer
 
Yep! Solution 1 worked a treat. Thanks so much.
I'm sure Solution 2 would also have done the trick so thanks also.

Can you tell me what went wrong please - like, why did the click events happen wrongly. Is it just where we are going into and out of the form, changing code / adding / deleting / deleting from form, etc, and things just get messed up a little/

thanks
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900