本文介绍了c#按钮不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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.
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);
}
}
}
[]
推荐答案
这篇关于c#按钮不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!