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