2016-07-11 3 views
0

Итак, я работаю над своим проектом в Windows Forms и имею небольшую проблему. В этом проекте мне нужно сравнить несколько изображений, которые находятся в одной папке с скриншотом.Я получаю исключение при сравнении изображений

Если снимок экрана содержит изображение, метод должен возвращать true, иначе он должен возвращать значение false. Все изображения в папке находятся в формате «PNG», и я меняю формат на «Format24bppRgb» после получения их из файла в коде и в любом третьем сравнении он дает мне «IndexOutOfRange».

Я использую следующий код для сравнения один от одного изображения с экрана:

string[] addressArray = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "Kartebi2"), "*.png"); 

string[] imageAddress = new string[addressArray.Length]; 

Bitmap[] bitmap1 = new Bitmap[36]; 

Bitmap[] bitmapImage = new Bitmap[36]; 

for (int i = 0; i < bitmap1.Length; i++) 
{ 
    bitmap1[i] = (Bitmap)System.Drawing.Image.FromFile(addressArray[i]); 

    bitmapImage[i] = Form1.ConvertToFormat(bitmap1[i], System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
} 


for (int i = 0; i < bitmapImage.Length; i++) 
{ 
    if (CompareMethod.CompareImageMethod(bitmap, bitmapImage[i]))  
     imageAddress[i] = addressArray[i]; 
    else 
     imageAddress[i] = null; 
} 

и я использую следующий метод: Compare

public static bool CompareImageMethod(Bitmap screenshot, Bitmap template) 
    { 
     bool result; 
     ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.921f); 
     TemplateMatch[] matching = tm.ProcessImage(screenshot, template); 
     if (matching[0].Similarity > 0.95f) 
      result = true; 
     else result = false; 

     return result; 
    } 

Так теперь о моей проблеме, в любом 3- rd Сравнивание это дает мне следующее Исключение: enter image description here

если кто знает, как решить эту проблему, пожалуйста, скажите мне. Я опубликовал аналогичный вопрос, но там я просил метод сравнения (я не знал, как сравнивать изображения). В этой статье я спрашиваю об исключении из функции Compare, которую я нашел в Интернете.

+0

Самый простой способ просто прочитать его по пикселям из bitmap1 и bitmap2. Сравните цвет. https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.getpixel(v=vs.110).aspx –

ответ

0

изменить свой код следующим образом;

if (matching.Length != 0 && matching[0].Similarity > 0.95f) 
+0

спасибо большое, сейчас он работает. –

Смежные вопросы