Как сделать захват экрана и сравнить с картинкой? Всем привет.
У меня есть фото, это фрагмент большого изображения экрана.
Нужно каждые 5-10 секунд делать скриншот экрана і искать фрагмент в скриншоте похож на тот что задан.
Никогда подобного не делал. Прошу помощи. Желательно на C# или Java.
Для прояснений:
1) програма запускает процесс
2) каждые 5-10 секунд делает скриншоте и ищет фрагмент что задан на сделаном скриншоте
3) по совпадению: убивает процесс и создает заново

21 Авг 2019 в 06:32
244 +1
0
Ответы
1

Для данной задачи можно использовать библиотеку Selenium WebDriver в C# или Java. Ниже приведен пример кода на C#:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.IO;
class Program
{
static void Main {
using IWebDriverdriver=newChromeDriver()IWebDriver driver = new ChromeDriver()IWebDriverdriver=newChromeDriver() {
driver.Url = "URL СТРАНИЦЫ";
while truetruetrue {
Screenshot screenshot = (ITakesScreenshot)driver(ITakesScreenshot)driver(ITakesScreenshot)driver.GetScreenshot;
screenshot.SaveAsFile"screenshot.png",ScreenshotImageFormat.Png"screenshot.png", ScreenshotImageFormat.Png"screenshot.png",ScreenshotImageFormat.Png;
if CompareImages("screenshot.png","заданныйфрагмент.png")CompareImages("screenshot.png", "заданный_фрагмент.png")CompareImages("screenshot.png","заданныйф рагмент.png") {
Process process = new Process;
process.StartInfo.FileName = "имя_процесса.exe";
process.Kill;
process.Start;
}
System.Threading.Thread.Sleep500050005000; // пауза 5 секунд
}
}
}
static bool CompareImagesstringscreenshotPath,stringfragmentPathstring screenshotPath, string fragmentPathstringscreenshotPath,stringfragmentPath {
byte screenshotBytes = File.ReadAllBytesscreenshotPathscreenshotPathscreenshotPath;
byte fragmentBytes = File.ReadAllBytesfragmentPathfragmentPathfragmentPath;
if screenshotBytes.Length!=fragmentBytes.LengthscreenshotBytes.Length != fragmentBytes.LengthscreenshotBytes.Length!=fragmentBytes.Length {
return false;
}
for (int i = 0; i < screenshotBytes.Length; i++)
{
if screenshotBytes[i]!=fragmentBytes[i]screenshotBytes[i] != fragmentBytes[i]screenshotBytes[i]!=fragmentBytes[i] {
return false;
}
}
return true;
}
}

В данном примере программа каждые 5 секунд делает скриншот экрана, сравнивает его с заданным фрагментом изображения. В случае совпадения, программа завершает указанный процесс и запускает его заново. Не забудьте подключить необходимые библиотеки SeleniumWebDriverSelenium WebDriverSeleniumWebDriver и указать правильные URL страницы, имя процесса и пути к изображениям.

Помните, что использование скриншотов для сравнения изображений может быть не самым эффективным способом из-за изменения картинки, например, из-за изменения цветов или уровня яркости. Возможно, будет лучше провести сравнение на уровне пикселей или специфических параметров изображения.

20 Апр 2024 в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир