есть статичное изображение. нужно изменить заданную область - в моём случае небо - так, чтобы казалось, что это анимация (смазать, размыть, может быть, так, что коэффициенты рассчитываются случайно) и нарисовать (несколько раз в секунду, конечно). в какую сторону копать? нужно учить opengl? или можно обойтись средствами qpainter? есть ли готовые примеры, или хотя бы что-то похожее?
efg, какие будут использованы примитивы (точки, линии, многоугольники) - неважно , главное, это вывод анимации. У каждого примитива должна быть либо функция яркости/цвета от времени. Возможно , даже лучше оставить такую фишку, как задание функциии объекта B в виде функяии объекта A + сдвиг по фазе. Время тактируй при помощи таймера (для человечьего глаза достаточно 50...250 мс). И всё, вперёд - на мины )
на языке крутится blur (по-моему пример такой был, толи штатный в 4.7, толи в блоге у тролей)
>>ответьте по существу - вопросы в первом посте
я ответил на САБЖ
>>эффект мерцающих звёзд
и никто не виноват, что ты не умеешь вопрос задавать. А какой вопрос - такой и ответ
Но всё равно всё выйдет так, как я описал - будет функция от времени некоего параметра.
>>уж не стал бы я делать цикл while... sleep
цикл тут ни при чём, я про таймер говорил
странный вопрос. Будет выдавать новое значение изменяемого параметра
Нет, если тема про блюр - то пожалуйста, пусть это будут встроенные эффекты. Но из первого поста это неочевидно
а можно как-то конкретизировать задачу или привести пример?
>>или привести пример
и желательно на видео ))
задача делится на три части:
1. выделение области
2. подготовка нескольких изображений
3. смена их по событию таймера
1 думаю решена
2 и 3 взаимосвязаны. применять эффекты к области - дело муторное. проще - берешь баундинг бокс этой области, и применяешь эффект к нему. область работает как маска. после чего, по событию таймера, рисуешь по маске нужное изображение.
все средствами QPainter реализуется.
эффект блюра - алгоритм простой, на QPainter без проблем делается.
нашёл, вот:
http://doc.qt.nokia.com/qq/32/qq32-next-gen-uis.html
http://doc.qt.nokia.com/4.7/qgraphicsblureffect.html
Quiet.h:
#ifndef QUIET_H
#define QUIET_H
#include <QtGui>
class quiet : public QWidget {
Q_OBJECT
public:
quiet(QWidget *parent = 0);
~quiet();
void paintEvent(QPaintEvent *event);
private:
QImage image;
QPixmap pixmap;
QGraphicsBlurEffect effect;
QGraphicsPixmapItem pixmapItem;
QTimer *timer;
private slots:
void reDraw();
};
#endif // QUIET_H
#include "quiet.h"
quiet::quiet(QWidget *parent) : QWidget(parent) {
setWindowTitle("Quiet");
resize(640, 480);
setMaximumSize(640, 480);
setMinimumSize(640, 480);
image.load(":/images/pic.png", "png");
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(reDraw()));
timer->start(100);
repaint();
}
quiet::~quiet() {
}
void quiet::paintEvent(QPaintEvent *event) {
QPainter painter(this);
QPoint point;
point.setX(0);
point.setY(0);
//painter.drawImage(point, image);
painter.drawPixmap(point, pixmap);
}
void quiet::reDraw() {
pixmap.fromImage(image, Qt::AutoColor);
pixmapItem.setPixmap(pixmap);
effect.setBlurRadius(0.1); // случайные значения сюда
pixmapItem.setGraphicsEffect(&effect);
repaint();
}
работает, только если применить эффект ко всему виджету... boundingRectFor(rect) не учитывается почему-то
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)