Быстрый сбор изображения на экране и чтение пикселей - PullRequest
2 голосов
/ 19 июля 2011

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

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 Ответ

1 голос
/ 19 июля 2011

Используйте

rgbArray = image.getRGB(startX, startY, w, h, rgbArray,offset, scansize) ;

Гораздо быстрее считывать значения пикселей из массива, чем выполнять вызов метода для получения значения каждого пикселя, и один вызов getRGB для извлечения массива не медленный.

...