crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> эффект мерцающих звёзд
Алексей1153
  опции профиля:
сообщение 5.6.2011, 17:46
Сообщение #11


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


>>или привести пример
и желательно на видео ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 6.6.2011, 1:23
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 5.6.2011, 18:23) *
>>ответьте по существу - вопросы в первом посте

я ответил на САБЖ
>>эффект мерцающих звёзд

и никто не виноват, что ты не умеешь вопрос задавать. А какой вопрос - такой и ответ :)

Цитата(efg @ 4.6.2011, 21:36) *
в какую сторону копать? нужно учить opengl? или можно обойтись средствами qpainter? есть ли готовые примеры, или хотя бы что-то похожее?

в вашем посте не было ни слова ни про opengl, ни про иные средства, с помощью можно достичь желаемого эффекта. поправьте меня, если это не так.

Цитата(Алексей1153 @ 5.6.2011, 18:23) *
>>уж не стал бы я делать цикл while... sleep
цикл тут ни при чём, я про таймер говорил

а я имел в виду, что использование таймера очевидно

Цитата(ufna @ 5.6.2011, 18:40) *
а можно как-то конкретизировать задачу или привести пример?

пусть дано изображение

и задана область

применяем к области искажение\размытие (не обязательно блюр - скорее, даже, блюр как раз и не подойдёт - лучше что-нибудь вроде "волн") и получаем


для любителей интерактива примитивная гифка:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 6.6.2011, 2:05
Сообщение #13


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


задача делится на три части:

1. выделение области
2. подготовка нескольких изображений
3. смена их по событию таймера

1 думаю решена

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

все средствами QPainter реализуется.

эффект блюра - алгоритм простой, на QPainter без проблем делается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.6.2011, 7:30
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 5.6.2011, 20:33) *
Но из первого поста это неочевидно
Цитата(efg @ 4.6.2011, 23:36) *
это анимация (смазать, размыть,
по-моему всё очевидно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 6.6.2011, 10:25
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


нашёл, вот:
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


Quiet.cpp:
#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();
}


не только ничего не рисуется, так ещё и при закрытии окна вылезает appcrash
что я делаю не так?

Сообщение отредактировал efg - 7.6.2011, 0:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
efg
  опции профиля:
сообщение 6.6.2011, 12:29
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 6.5.2011
Пользователь №: 2658

Спасибо сказали: 2 раз(а)




Репутация:   0  


работает, только если применить эффект ко всему виджету... boundingRectFor(rect) не учитывается почему-то

Сообщение отредактировал efg - 7.6.2011, 1:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 21:57