嗨,我在以下代码方面遇到了问题。
我的应用程序中有多个图片框,并希望使用相同的功能一次将它们两个进行比较。
运行代码时,我收到以下错误消息:“该引用无效,而且我不确定从何处去。
我的代码
private void ImageCompare37()
{
Checkimage = "test";
im1 = "Pic37.Image";
imc1 = "PicComp37.Image";
MainCompare();
}
private void MainCompare()
{
int g11, g22, r11, r22, b11, b22, x1, y1, z1, x2, y2, z2;
Bitmap img1, img2;
int i, j;
img1 = new Bitmap(im1);
img2 = new Bitmap(imc1);
for (i = 0; i < img1.Width; i++)
{
for (j = 0; j < img1.Height; j++)
{
a = img1.GetPixel(i, j);
b = img2.GetPixel(i, j);
}
}
String g1 = a.G.ToString();
String g2 = b.G.ToString();
String r1 = a.R.ToString();
String r2 = b.R.ToString();
String b1 = a.R.ToString();
String b2 = b.R.ToString();
g11 = Convert.ToInt16(g1);
g22 = Convert.ToInt16(g2);
r11 = Convert.ToInt16(r1);
r22 = Convert.ToInt16(r2);
b11 = Convert.ToInt16(b1);
b22 = Convert.ToInt16(b2);
if ((g11 > g22) && (r11 > r22) && (b11 > b22))
{
x1 = g11 - g22;
y1 = r11 - r22;
z1 = b11 - b22;
}
else
{
x1 = g22 - g11;
y1 = r22 - r11;
z1 = b22 - b11;
}
if ((x1 > 20) || (y1 > 20) || (z1 > 20))
{
MatchFound = "no";
}
else
{
MatchFound = "yes";
textBox1.Text = Checkimage;
CaptureBtn.PerformClick();
}
}
如何传递im1
和imc
字符串,以允许命令img1 = new Bitmap(im1)
img2 = new Bitmap(imc1)
接受它们。
编辑
为什么我没有国际剑联名称的问题是因为该应用程序会自动捕获屏幕的各个部分,并将它们放置在图片框中。使用以下代码。
Graphics ppcComp28 = Graphics.FromImage(PPCComp28 as Image);
ppcComp28.CopyFromScreen(ppc28x, ppc28y, 0, 0, PPCComp1.Size);
PicComp28.SizeMode = PictureBoxSizeMode.Zoom;
PicComp28.Image = PPCComp28;
一切都是局部变量,是将它们保存在PC上的唯一选择吗?
编辑:
正如我在评论中指出的那样,此操作无效,但发现以下内容有效。
其背后的想法是在图像框1中捕获图像,然后在图像框2中捕获图像,在捕获图像以比较两个图像之间的差异之后,调试后我在上面的代码中遇到的问题是它传递了空值,假设读取图像中的像素并比较两个图像中的rgb。但是它只是不想工作,所以我最终使用了以下
FileInfo fileInfo1 = new FileInfo(im1);
FileInfo fileInfo2 = new FileInfo(imc1);
long calc1 = fileInfo2.Length - fileInfo1.Length;
long calc2 = fileInfo2.Length - fileInfo1.Length;
if (calc1 > 500 || calc2 > 500)
{
currentcheck = 0;
Checkimagebox.Text = Checkimage;
}
else
{
currentcheck = currentcheck + 1;
CheckCompare();
}
}
也许有更好的方法可以做到这一点,但是我还没有遇到任何问题。