QImage

111 篇文章 9 订阅

一些基本操作方法

获取图像的首地址:

    const uchar *QImage::bits() const

获取图像的总字节数

    int QImage::byteCount() const

获取图像每行字节数

    int QImage::bytesPerLine() const  

还可以这样计算(width:图像宽度,img.depth是图图像深度):

    int bytePerLine = (width * img.depth()  +  31) / 32 * 4;

存入图像,格式为R,G,B,A(0,1,2,3)

    QImage::Format_RGB32

存入图像,格式为R,G,B(0,1,2)

    QImage::Format_RGB888

存入图像,此时需要设定一张颜色表QVector<QRgb>,如下

    QImage::Format_Indexed8  

灰度颜色表:

    QVector<QRgb> vtrColor;

    for(int k = 0;k < 256;++k)

    {

      vtrColor.push_back( qRgb(k,k,k) );

    }

 

灰度图

    普通彩色图片中每个像素中有R、G、B三个分量,而每个分量有256种(0~255)值可以选择,这样一个像素点就可以有1600多万(255255255)的颜色变化范围。

    而灰度图就是R、G、B三分分量的值相同的一种特殊彩色图像。即R=G=B.

位深

    位深是指存储每个像素所用的位数.

    如上面介绍的QImage方法,img.depth(),该方法可以返回当前图像的位深.

常规处理

unsigned char *grayData;
    QImage img;
    img.load (m_strPath+"/2.jpg");

    QPixmap pixmap(QPixmap::fromImage (img));

    ui->label->setPixmap (pixmap);

    unsigned char *data = img.bits ();

    int w = img.width ();
    int h = img.height ();

    int bytePerLine = (w * 24 + 31) / 8;
    //存储处理后的数据
    grayData = new unsigned char [bytePerLine * h];
    unsigned char r,g,b;
    for ( int i = 0; i < h; i++ )
    {
        for ( int j = 0; j < w; j++ )
        {
            r =  *(data + 2);
            g = *(data + 1);
            b = *data;

            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;

            //ui->textEdit->append (QString("%1 %2 %3").arg (r).arg (g).arg (b));
        }
    }

    QImage grayImage(grayData,w,h,bytePerLine,QImage::Format_RGB888);

    QPixmap pixmap2(QPixmap::fromImage (grayImage));

    ui->label_2->setPixmap (pixmap2);

 

参考:

https://www.yuque.com/docs/share/23cdad29-2b72-4ee6-9655-82ca1346f347

 

 

 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值