最快的代码更改Qt中的动画像素

时间:2013-04-10 01:41:33

标签: c++ qt animation optimization

我希望通过将像素的颜色更改为相同的值来为小(100x20)图像设置动画。例如,每帧将红色通道值增加1,然后减少。图像有alpha通道,动画速度为30 ... 100 fps(取决于平台; 30对于linux来说足够了,但是窗口需要大约70才能看起来很流畅)。

据我所知,在QImage中完成绘图速度更快,但使用QPixmap显示速度更快。

1 个答案:

答案 0 :(得分:2)

我喜欢QGraphicsEffectQPropertyAnimation s。白色不会着色,但黑色会着色。

#include <QLabel>
#include <QPixmap>
#include <QGraphicsColorizeEffect>
#include <QTimerEvent>
#include <QPropertyAnimation>
#include <QShowEvent>
#include <QDebug>

class Widget : public QLabel
{
    Q_OBJECT
    Q_PROPERTY(qreal redness READ getRedness WRITE setRedness)

public:
    Widget(QWidget *parent = 0)
    {
        QPixmap p(300, 300);
        p.fill(Qt::black);
        this->setPixmap(p);
        colorize = new QGraphicsColorizeEffect();
        colorize->setColor(Qt::red);
        redness = 0;
        colorize->setStrength(redness);
        this->setGraphicsEffect(colorize);

        animation = new QPropertyAnimation(this,"redness");
        animation->setDuration(2000);
        animation->setLoopCount(10);
        animation->setStartValue(0.0);
        animation->setEndValue(1.0);
        animation->setEasingCurve(QEasingCurve::CosineCurve);
        animation->start();
    }

    ~Widget(){}
    qreal getRedness()
    {
        return redness;
    }
    void setRedness(qreal val)
    {
        redness = val;
        colorize->setStrength(redness);
        this->update();
//        qDebug() << redness;
    }

public slots:
    void showEvent(QShowEvent *)
    {
        animation->start();
    }

private:
    qreal redness;
    QGraphicsColorizeEffect * colorize;
    QPropertyAnimation * animation;

};

这是main.cpp

#include <QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

希望有所帮助。