转载来自: 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();在网上找的代码,进行处理,直接对代码进行解释和处理