首页 > 程序开发 > 综合编程 > 其他综合 >

QT之灰色头像(QQ离线头像)

2016-12-13

QT之灰色头像(QQ离线头像):在讲正常图片转灰色图片之前,我们先来了解下灰度图。灰度图又称为灰阶图,任何颜色都由红、绿、蓝三原色组成。

QT之灰色头像(QQ离线头像):

在讲正常图片转灰色图片之前,我们先来了解下灰度图。灰度图又称为灰阶图,任何颜色都由红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;


我们再来看QT提供的qGray():

对于算法不一样,即精确度不一样,得到的灰度图的效果也就不一样!浮点数运算得到的效果是最好的,取绿色得到的效果是最差的。在这里,我们使用QT提供的方法进行演示,感兴趣的可以尝试其它效果

效果图

好了,我们一起来看下代码是如何实现的。

上代码

HeadToGray::HeadToGray(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    initNormalhead();
}

HeadToGray::~HeadToGray()
{

}

void HeadToGray::initNormalhead()
{
    QPixmap normalHead = QPixmap(NORMAL_HEAD).scaled(QSize(ui.normalHead->width(), ui.normalHead->height()), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui.normalHead->setPixmap(normalHead);

    QPixmap grayHead = QPixmap::fromImage(normalHeadToGray().scaled(QSize(ui.grayHead->width(), ui.grayHead->height()), Qt::KeepAspectRatio, Qt::SmoothTransformation));
    ui.grayHead->setPixmap(grayHead);
}

//正常图片转灰色图
QImage HeadToGray::normalHeadToGray()
{
    QImage normalHead(NORMAL_HEAD);
    for (int nRow = 0; nRow < normalHead.width(); nRow++)
    {
        for (int nColumn = 0; nColumn < normalHead.height(); nColumn++)
        {
            QRgb rgb = normalHead.pixel(nRow, nColumn);
            int pixNum = qGray(rgb);//使用QT提供的灰色算法
            normalHead.setPixel(nRow, nColumn, qRgba(pixNum, pixNum, pixNum, qAlpha(rgb)));
        }
    }
    return normalHead;
}
相关文章
最新文章
热点推荐