转载来自: http://www.cnblogs.com/Romi/archive/2012/12/03/2800039.html
参考代码,又在其他地方找了相关的知识点,才了解代码的含义,不一一赘述,侵删
QImage *image = new QImage(":/1.jpg");
QImage *grayImage = new QImage;
unsigned char *data=image->bits();
int width=image->width();//图像宽
int height=image->height();//图像高
int bytePerLine=(width*image->depth()+31)/8;//图像每行字节对齐 //@2
unsigned char* graydata=new unsigned char[bytePerLine*height];//存储处理后的数据
//r,g,b的顺序是反的,所以在进行赋值的时候,是反过来的 @3
unsigned char r,g,b;
// for (int i=0;i<height;i++)
// {
// for (int j=0;j<width;j++)
// {
// //@4
// r = *(data+2);
// g = *(data+1);
// b = *data;
//设置灰度值 @5,rgb转换灰度值是存在固定的公式的
// graydata[i*bytePerLine+j*3] =(r*30+g*59+b*11)/100;
// graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;
// graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;
// data+=4;
// }
// }
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
r = *(data+2);
g = *(data+1);
b = *data;
graydata[i*bytePerLine+j*3] =r;
graydata[i*bytePerLine+j*3+1]=g;
graydata[i*bytePerLine+j*3+2]=b;
data+=4;
}
}
grayImage=new QImage(graydata,width,height,bytePerLine,QImage::Format_RGB888);
QLabel *label = new QLabel();
label->setPixmap(QPixmap::fromImage(*grayImage));
label->show();
在网上找的代码,进行处理,直接对代码进行解释和处理