KirillHelm
@KirillHelm

Как определить цветь пикселя сцены в Qt?

Есть экземпляр класса QGraphicsScene. На нём создаются экземпляры класса class TFish, наследованные от QGraphicsItem. Запущен таймер с значением 0,003 секунды. Каждый раз когда он истекает передаётся сигнал в слот advance(), она переопределена для класса TFish, если она не равна 0, то по случайному алгоритму, экземпляры TFish - "плавают".

Цель такая, нужно сделать так, что бы класс TFish, определял цвет пикселя впереди себя, если он не соответствует заданному условию, то меняется направление экземпляра TFish.

Такое уже реализовано для избежания столкновения с другими экземплярами TFish:
QList<QGraphicsItem *> dangerMice = scene()->items(QPolygonF()
                                                       << mapToScene(0, 0)
                                                       << mapToScene(-30, -50)
                                                       << mapToScene(30, -50));
    foreach (QGraphicsItem *item, dangerMice) {
        if (item == this)
            continue;

        QLineF lineToMouse(QPointF(0, 0), mapFromItem(item, 0, 0));
        qreal angleToMouse = ::acos(lineToMouse.dx() / lineToMouse.length());
        if (lineToMouse.dy() < 0)
            angleToMouse = TwoPi - angleToMouse;
        angleToMouse = normalizeAngle((Pi - angleToMouse) + Pi / 2);

        if (angleToMouse >= 0 && angleToMouse < Pi / 2) {
            angle += 0.5;
        } else if (angleToMouse <= TwoPi && angleToMouse > (TwoPi - Pi / 2)) {
            angle -= 0.5;
        }
    }


Нашёл код, который работает по схеме сделать скриншот окна -> определить цвет пикселя по координатам.
Мне кажется это не рациональным и не хочется реализовывать по нескольким причинам:
  1. Делать скриншот 30 раз за секунду достаточно затратно по ресурсам.
  2. Придется передавать в функцию advance() изображение или ссылку на сцену, т.к. из класса TFish, сделать скриншот не получиться.
  3. Мне кажется есть более простое решение данной проблемы.
  • Вопрос задан
  • 542 просмотра
Пригласить эксперта
Ответы на вопрос 1
@koronabora
Человек
Загрузите фон в отдельную область памяти и ищите себе спокойно цвет пикселя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы