Быстрый сбор изображения на экране и чтение пикселей
Я пытаюсь получить небольшой фрагмент изображения на экране и прочитать любой пиксель, чтобы сравнить другие пиксели. Код для получения изображения экрана:
Rectangle captureSize = new Rectangle(x, y, height, width);
BufferedImage image = robot.createScreenCapture(captureSize);
И, чтобы прочитать попиксельно я использовал
for (int y = 0; y < image.getHeight(); y = y + 1) {
for (int x = 0; x < image.getWidth(); x = x + 1) {
color = image.getRGB(x, y);
// Some methods etc
{
{
Однако когда я запустил его, я был в шоке. Так как createScreenCapture
заняло около 40 мс и используя getRGB
каждого пикселя занимало около 350 мс, что очень неэффективно для создания приложения с частотой 60 кадров в секунду. Кстати, мое изображение размером 800x400 пикселей. Я не пробовал
rgbArray = image.getRGB(startX, startY, w, h, rgbArray,offset, scansize) ;
метод, потому что я не знаю, насколько это эффективно, и переупорядочить мой код будет немного сложно. Таким образом, любая помощь будет оценена.
1 ответ
Использование
rgbArray = image.getRGB(startX, startY, w, h, rgbArray,offset, scansize) ;
Чтение значений пикселей из массива будет намного быстрее, чем вызов метода для получения значения каждого пикселя, и один вызов getRGB для извлечения массива не является медленным.