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提供的方法进行演示,感兴趣的可以尝试其它效果哦! O(∩_∩)O
效果图
好了,我们一起来看下代码是如何实现的。
上代码
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;
}
下代码
类似QQ离线头像Demo下载 , 免费的,放心吧,骚年! O(∩_∩)O
结尾
只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!
如果你觉得所写的对你有帮助,默默点个赞哈,你的赞就是我最大的支持,嘿嘿~不要说我骗赞哦,(^__^)