Быстрый сбор изображения на экране и чтение пикселей

Я пытаюсь получить небольшой фрагмент изображения на экране и прочитать любой пиксель, чтобы сравнить другие пиксели. Код для получения изображения экрана:

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 для извлечения массива не является медленным.

Другие вопросы по тегам